2

我想编写一个简单的 If 语句来检查进程是否存在。如果它存在,应该开始一些事情。

像这样,但工作.. ;)

If ((Get-Process -Name Tvnserver.exe ) -eq $True)
{ 
    Stop-Process tnvserver
    Stop-Service tvnserver
    Uninstall...
    Install another Piece of Software
}
Else
{
    do nothing
}

谢谢

4

2 回答 2

4

Get-Process不返回布尔值,并且列出的进程名称没有扩展名,这就是您的代码不起作用的原因。删除扩展并检查结果是否$nullMusaab Al-Okaidi建议的那样,或者将结果转换为布尔值:

if ( [bool](Get-Process Tvnserver -EA SilentlyContinue) ) {
  # do some
} else {
  # do other
}

如果您不希望脚本在进程未运行的情况下执行任何操作:只需省略else分支。

于 2013-02-24T18:31:44.663 回答
3

如果进程不存在,这将评估为 true:

(Get-Process -name Tvnserver.exe -ErrorAction SilentlyContinue) -eq $null

或者如果你想改变它,你可以否定该语句,如下所示:

-not ( $(Get-Process -name Tvnserver.exe -ErrorAction SilentlyContinue) -eq $null )

-ErrorAction SilentlyContinue如果进程不存在,必须避免引发任何错误,这一点很重要。

于 2013-02-24T16:12:46.127 回答