我正在尝试停止使用特定名称运行的多个服务。 我希望我可以执行PowerShell脚本,并停止所有服务,但不包括我在文本文件中指定的服务。 请帮助。
$ServiceRunName = Get-Service | where {($_.Name -like "ser_*") -and ($_.Status -eq "Running")} | Select-Object -Property Name
$fileServices = Get-Content ..\run.txt
If ($fileServices -ne $null) {`enter code here`
foreach ($line in $fileServices ) {
$service = $line
"$service"
"$name"
if($service -eq $ServiceRunName ){
" not kill "
}else {
"kill"
}
}
}
答案 0 :(得分:0)
下面的代码定义一个数组,其中包括不要停止的服务名称,而不是读取文件:
# Alternative to array: $servicesNotToStop = Get-Content ..\run.txt
$servicesNotToStop = @("WlanSvc","vpnagent")
Get-Service | ? {$_.Status -eq "Running"} | ? { $servicesNotToStop -notcontains $_.Name} | % { Stop-Service $_ -WhatIf}
Get-Service | ? {$_.Status -eq "Running"}
...使所有服务都处于运行状态,并将它们发送到管道中。
? { $servicesNotToStop -notcontains $_.Name}
...检查数组中是否包含pipieline(type = $_
)中的实际对象(ServiceController
)(name
属性包括服务名称)。
% { Stop-Service $_ -WhatIf}
...对每个预先由?-filter转发的对象执行停止服务。 -WhatIf
的{{1}}开关可防止停止服务,但它会打印将停止的服务。许多PowerShell cmdlet提供Stop-Service
开关,以在“空”运行中测试命令。
来自msdn:
-WhatIf
显示如果cmdlet运行将发生的情况。该cmdlet没有运行。
更新1
读取不应从文件中停止的服务:
WhatIf
dontStop.txt的格式:
$servicesToStop = Get-Content .\dontStop.txt
Get-Service | ? { $_.Status -eq "Running" } | ? { $servicesToStop -notcontains $_.Name } | % { Stop-Service $_ -WhatIf }
更新2
您所询问的代码大致相同:
service1
service2
希望有帮助