所有
我实现了我的第一个PowerShell脚本,它做了一些设置,设置了注册表项,最后需要重新启动服务。问题是我只有可执行文件的名称,但没有服务名称。 Restart-Service只能与服务名称一起使用。谷歌搜索(也好Binging)周围没有给我太多结果。
我想知道是否有办法按可执行文件名重启服务?
我知道我可以通过可执行文件名来获取进程,但是只是杀死进程并重新启动它不是一个好选择,因为服务启动/停止功能没有被调用,它可能无法正常工作。
感谢。
答案 0 :(得分:4)
您可以尝试使用wmi并执行以下操作:
(gwmi win32_service | ?{$_.pathname -match "\\executable.exe "}) | Restart-Service
答案 1 :(得分:1)
Get-WmiObject -Class Win32_Service -Filter "PathName LIKE '%PartOfTheName%'" -ComputerName PC1 | Foreach-Object{
$_.StopService()
$_.StartService()
}
答案 2 :(得分:0)
您可以使用WMI执行此操作:
$process = Get-Process sqlservr| select -ExpandProperty Id
Get-WmiObject win32_Service|
where {$process -contains $_.ProcessId}|
foreach {Restart-Service $_.Name}
编辑:更改了脚本以重新启动服务,而不仅仅是停止它。
答案 3 :(得分:0)
#set by logic to determine if the service will restart or not
$global:ServerWillRestart=$true
#can be found using the name column of Get-services cmdlet
$serviceName="Set name of the service"
if($global:ServerWillRestart){
$service =Get-Service | where{ $_.Name -eq $serviceName}
do{
Write-output "The service $ServiceName will is being stopped"
Stop-Service $service
Start-Sleep -s 2
}
while($service.WaitForStatus("Stopped"))
do{
Write-Output "The service $ServiceName will is being started"
Start-Service $service
Start-Sleep -s 2
}
while($service.WaitForStatus("Running"))