![](/img/trans.png)
[英]Powershell to display all automatic services that are stopped and attempt to start those services
[英]PowerShell - Start rocopy only if all services have stopped
我是PowerShell的新手,我想知道是否有人可以为我提供以下帮助,因为我无法在该站点上找到有关该问题的任何先前主题。
问题:有没有办法写出robocopy命令,以便仅在$ stopservices中的服务全部停止后才能启动? 以下是我所拥有的,但是在自动复制启动时某些时候该服务仍在运行,然后错误提示“该进程无法访问该文件,因为该文件正在被另一个进程使用。”。
<## Stop all services ##>
write-host `r`n "Stopping services on "$server `r`n
foreach ($service in $stopservices)
{
set-service $service -ComputerName $server -StartupType Disabled -Status Stopped -PassThru
}
<## Copy all files ##>
$robocopy = "{0} {1} {2} /XF {3} {4} {5} /XD {6} {7} /MIR /MT /TEE /LOG:{8}" -f $robocopy, $source, $destination, $logPath
Invoke-Expression $robocopy
Pause
如果服务没有停止,则可以尝试在Set-Service
之后使用Stop-Service
Cmdlet。
Get-Service -Name $service -ComputerName $server | Stop-Service -Force
然后,您可以通过在Robocopy
之前使用以下while循环来等待服务停止。
While($stopservices | Get-Service | ? {$_.Status -eq "Running" -or $_.Status -eq "Stopping"}){
Sleep -Seconds 5
}
如果$stopservices
中的服务之一仍在运行,它将使脚本休眠5秒钟。 一旦所有服务都不处于“正在Running
或“正在Stopping
状态,则Robocopy
将启动。 因此,整个脚本可能如下所示:
# Stop all services #
write-host `r`n "Stopping services on "$server `r`n
foreach ($service in $stopservices)
{
set-service $service -ComputerName $server -StartupType Disabled -Status Stopped -PassThru
Get-Service -Name $service -ComputerName $server | Stop-Service -Force
}
While($stopservices | Get-Service | ? {$_.Status -eq "Running" -or $_.Status -eq "Stopping"}){
Sleep -Seconds 5
}
# Copy all files #
$robocopy = "{0} {1} {2} /XF {3} {4} {5} /XD {6} {7} /MIR /MT /TEE /LOG:{8}" -f $robocopy, $source, $destination, $logPath
Invoke-Expression $robocopy
Pause
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.