powershell - 匹配两个 get-process 变量不起作用
问题描述
使用我的代码,我想获取一个名为 VNCviewer 的程序的 ProcessID,然后我在这个程序中打开一个新会话,此时我已经获得了概览控制台的 ProcessID 和一个打开的会话,但不知道 ProcessID(这两个任务都是同名)。现在我想找到新会话的 ProcessID 来得到这个我做了循环来匹配两个 processID 并杀死不是保存在我的第一个变量中但它不工作的那个我收到变量“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}
推荐阅读
- docker - 手动遵循 Dockerfile 说明
- excel - 如何在excel中将JPEG粘贴为gif?
- python - Openpyxl Vlookup - Python
- java - 使用 Android Studio 在特定时间显示通知
- java - 使用 java Spring 从 Oracle 数据库返回创建的 ID
- firebase - Firebase Firestore 分页最佳实践/优化与否?
- scala - [Mockito][withObjectMocked]NoSuchFieldException: MODULE$
- apache - apache httpd 在 root 用户下运行良好,但在非 root 用户下运行失败
- kubernetes - 使用 cert-manager/Traefik 动态添加/删除域 TLS 证书
- c++ - 将节点按降序插入链表 C++