Powershell脚本容易错误

时间:2014-05-01 21:27:52

标签: powershell

想看看有没有更简单的方法呢?看起来我应该能够以更简单的方式获得积极或消极的态度。

$svc = GWMI Win32_Service @prm
    if (($svc | ? {$_.Name -match "Symantec Antivirus"}).State -match "Running") {
        $SEPRun = "Yes"
        }
    else {
        $SEPRun = "No"
        }

3 个答案:

答案 0 :(得分:1)

首先,您可以使用Get-Wmi命令进行过滤,如果我猜测您正在寻找任何正在运行的进程而不是服务列表中的最新进程,那么在没有else子句的情况下测试会更好。

$SEPRun = $false;
(GWMI Win32_Service -Filter "Name='Symantec Antivirus'") | % { if($_.State -eq "Running")
{$SEPRun = $true} }

答案 1 :(得分:1)

我会在Filter上使用Get-WmiObject参数。您可以使用逻辑运算符AND和OR组合多个条件。例如,您的查询只是

$isRunning = (gwmi Win32_Service @prm -Filter "Name LIKE '%Symantec Antivirus%' AND State = 'Running'" | measure-object).Count -gt 0

此外,“Symantec Antivirus”听起来像DisplayName而不是名称。例如,我机器上的Windows Update服务的DisplayName为“Windows Update”,名称为“wuauserv”。

答案 2 :(得分:1)

如果您只想将$ isRunning设置为$ true或$ false,那么您应该只需要:

$isRunning = (GWMI Win32_Service -Filter "Name='Symantec Antivirus'").state -eq 'Running'

如果你真的希望它是“是”或“否”,你可以使用开关代替If / Else

$isRunning = 
switch ((GWMI Win32_Service -Filter "Name='Symantec Antivirus'").state -eq 'running') 
{ True {'Yes'} False {'No'} }