我有全局数组列表"$global:processid",它有许多processid条目,而$globale:processname包含属于ids的所有进程。有时,$global:processid数组获得的所有条目都是相同的。如何循环遍历两个数组列表,删除所有重复的过程和进程名称。我现在有了下面的代码。但我没有这个过滤器。System.Collections.ArrayList$global:processname = @() System.Collections.ArrayList$global:processid = @()
for ($i = 0; $i -lt $global:processid.Count; $i++) {
"Position "+$i+": "+$global:processid[$i]
#$lvi = [System.Windows.Forms.ListViewItem]::new()
#$lvi.Text = $global:processname[$i]
#$lvi.SubItems.Add($global:processid[$i])
#$global:ListviewOCLRA.Items.Add($lvi)
}重要的是,它将检查重复的过程,并删除在这一位置的过程。例如,如果位置3-7在$global:processid数组列表中一次又一次是相同的条目,那么在arraylist $global:processname中位置3-7的所有条目也应该被删除。
我希望你能理解我的意思。来寻求帮助。
发布于 2022-01-19 13:24:32
尽管如注释所示,最好使用一个包含对象的数组,只要它们仍然完好无损,并且每个索引都可以获得id和匹配的进程名,仍然可以使用两个数组创建这样的数组。
假设您的数组如下:
$processid = 123, 456, 123
$processname = 'notepad', 'powershell', 'notepad'就像你看到的,里面有一个副本
将这些数组连接起来,而它们的索引仍然与名称和id匹配到一个对象数组中。
$processes = for ($i = 0; $i -lt $processid.Count; $i++) {
[PsCustomObject]@{ Id = $processid[$i]; Name = $processname[$i] }
}现在,您可以根据ID属性消除重复对象
$processes | Sort-Object -Property Id -Unique$processes现在包含:
ID Name
-- ----
123 notepad
456 powershell接下来,填写您的列表视图。
for ($i = 0; $i -lt $processes.Count; $i++) {
$lvi = [System.Windows.Forms.ListViewItem]::new()
$lvi.Text = $processes[$i].Name
$lvi.SubItems.Add($processes[$i].Id)
$ListviewOCLRA.Items.Add($lvi)
}https://stackoverflow.com/questions/70769473
复制相似问题