将输出直接加载到变量powershell

时间:2017-01-21 22:28:20

标签: powershell variables output

我有这个脚本来杀死VNC进程并重新启动VNC服务:

$ip = Read-Host 'Enter hostname or IP'

& tasklist /s $ip /FI "IMAGENAME eq winvnc*"

$procid_1 = Read-Host 'pid 1'
$procid_2 = Read-Host 'pid 2'

& taskkill /s $ip /pid $procid_1
& taskkill /s $ip /pid $procid_2

Stop-Service -InputObject $(Get-Service -Computer $ip -Name "uvnc_service")
Start-Service -InputObject $(Get-Service -Computer $ip -Name "uvnc_service")

此命令

& tasklist /s $ip /FI "IMAGENAME eq winvnc*"

给了我这个输出:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
winvnc.exe                    3576                            0      2,968 K
winvnc.exe                    4444                            0      5,556 K

我必须手动输入PID(在这种情况下为3576和4444)变量$ procid_1和$ procid_2

有没有办法将tasklist输出直接传递给变量?

提前感谢任何提示! 约瑟夫

1 个答案:

答案 0 :(得分:2)

使用Get-Process cmdlet代替tasklist - Get-Process将输出真实的.NET对象,因此您可以使用点表示法直接获取Id属性:

$RemoteComputer = Read-Host 'Enter hostname or IP'

Get-Process -Name winvnc -ComputerName $RemoteComputer |ForEach-Object {
    & taskkill /s $ip /pid $_.Id
}