我试图停止使用特定名称运行的多个服务。我想拥有一个可以执行的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"
}
}
}
下面的代码定义了一个数组,包括不停止的服务的名称,而不是读取文件:
# 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}
...检查管道中的实际对象( $_
((type = ServiceController
(是否不包括在数组中(name
属性包括服务名称(。
% { Stop-Service $_ -WhatIf}
...执行事先被填充的对象执行停止服务?-WhatIf
的Stop-Service
旋转可防止销售销售,但它打印了将停止服务的。许多PowerShell CMDLET提供WhatIf
-Switches来测试"干"'-run。
来自msdn:
-Whatif
显示如果CMDLET运行会发生什么。cmdlet不运行。
更新1
阅读不应从文件中停止的服务:
$servicesToStop = Get-Content .dontStop.txt
Get-Service | ? { $_.Status -eq "Running" } | ? { $servicesToStop -notcontains $_.Name } | % { Stop-Service $_ -WhatIf }
dontstop.txt的格式:
service1
service2
更新2
或多或少您的代码问题:
$ServiceRunName = Get-Service | where-object { $_.Status -eq "Running" } | Select-Object -ExpandProperty Name
$fileServices = Get-Content "..run.txt"
If ($null -ne $fileServices) {
foreach ($service in $ServiceRunName) {
foreach ($serviceNotToStop in $fileServices ) {
if ($service -ne $serviceNotToStop ) {
Stop-Service $service -WhatIf
break
}
}
}
}
希望有帮助