Powershell 匹配两个get进程变量无效

Powershell 匹配两个get进程变量无效,powershell,scripting,Powershell,Scripting,通过我的代码,我想获得一个名为VNCviewer的程序的ProcessID,然后在这个程序中打开一个新会话,此时我得到了概览控制台的ProcessID和一个打开的会话,而不知道ProcessID(两个任务的名称相同)。现在我想找到新会话的ProcessID来得到它,我做了一个循环来匹配ProcessID和kill,它不是保存在我的第一个变量中的那个,但它不起作用,我得到一个错误,变量“PID”是只读的。有人能帮我解决吗 $NVCOverview = Get-Process vncviewer $

通过我的代码,我想获得一个名为VNCviewer的程序的ProcessID,然后在这个程序中打开一个新会话,此时我得到了概览控制台的ProcessID和一个打开的会话,而不知道ProcessID(两个任务的名称相同)。现在我想找到新会话的ProcessID来得到它,我做了一个循环来匹配ProcessID和kill,它不是保存在我的第一个变量中的那个,但它不起作用,我得到一个错误,变量“PID”是只读的。有人能帮我解决吗

$NVCOverview = Get-Process vncviewer
$wshell = New-Object -ComObject wscript.shell;
start-sleep -Milliseconds 1000

(New-Object -ComObject WScript.Shell).AppActivate((get-process vncviewer).MainWindowTitle)
Start-Sleep -Milliseconds 100
$wshell.SendKeys("{TAB}")
Start-Sleep -Milliseconds 100
$wshell.SendKeys("{TAB}")
Start-Sleep -Milliseconds 100
$wshell.SendKeys("{ENTER}")

Start-Sleep -Milliseconds 5000

$newVncProcesses = get-process vncviewer | where {$_.Id -NotLike $NVCOverview[0]}

foreach ($pid in $newVncProcesses)
{
    Stop-Process $pid
}

我希望循环将捕获neweset会话的ID并将其终止。

$PID是Powershell中的一个保留自动变量,它保存当前Powershell会话的进程ID,因此如消息所示为只读

将$pid更改为$id或类似的内容,它应该可以像预期的那样工作

有关中的许多自动变量的更多信息,有些变量可能非常有用

编辑:您的过滤器也有点不正确,您只比较当前对象的Id属性与原始变量的整个对象,并且使用索引为零,这对于包含单个进程的变量没有意义。这:

$newVncProcesses = get-process vncviewer | where {$_.Id -NotLike $NVCOverview[0]}
应该看起来更像这样:

$newVncProcesses = get-process vncviewer | where {$_.Id -ne $NVCOverview.Id}

好吧,试过了,有点效果,但现在的问题是,它扼杀了整个vnc的事情,不仅是会话,它扼杀了概述。啊,是的,你的过滤器看起来不太正确,我已经更新了答案来解决这个问题。