gpt4 book ai didi

Powershell - 检查远程进程,如果完成继续

转载 作者:行者123 更新时间:2023-12-04 15:12:18 25 4
gpt4 key购买 nike

作为备份操作的一部分,我正在运行 7zip 命令以将文件夹压缩为单个 .7z 文件。没有问题,因为我正在使用 InVoke-WMIMethod .

例子:

$zip = "cmd /c $irFolder\7za.exe a $somedirectory.7z $somedirectory"
"InVoke-WmiMethod -class Win32_process -name Create -ArgumentList $zip -ComputerName $remotehost"

随着我的脚本继续运行,我的问题出现了,7za.exe 进程尚未完成。然后我试图从远程系统中复制该项目,但它要么不完整,要么失败。

有人可以指出我的方向,以找出如何识别 7za.exe 进程是否仍在运行,等到它死了,然后继续我的脚本的其余部分?

我可以通过...掌握从远程系统中拉出的过程。
get-wmiobject -class Win32_Process -ComputerName $remotehost | Where-Object $_.ProcessName -eq "7za.exe"}

不确定如何将其转换为我的问题的可用信息。

答案更新: (感谢@dugas 插入)

这将为那些需要它的人提供一些反馈......
do {(Write-Host "Waiting..."),(Start-Sleep -Seconds 5)}
until ((Get-WMIobject -Class Win32_process -Filter "Name='7za.exe'" -ComputerName $target | where {$_.Name -eq "7za.exe"}).ProcessID -eq $null)

最佳答案

您可以使用 Invoke-Command cmdlet 在远程计算机上调用 Wait-Process cmdlet。例子:

$process = Invoke-WmiMethod -Class Win32_Process -Name create -ArgumentList notepad -ComputerName RemoteComputer

Invoke-Command -ComputerName RemoteComputer -ScriptBlock { param($processId) Wait-Process -ProcessId $processId } -ArgumentList $process.ProcessId

由于您提到使用 Invoke-Command 不是一个选项,因此另一个选项是轮询。
例子:
$process = Invoke-WmiMethod -Class Win32_Process -Name create -ArgumentList notepad -ComputerName hgodasvccr01
$processId = $process.ProcessId

$runningCheck = { Get-WmiObject -Class Win32_Process -Filter "ProcessId='$processId'" -ComputerName hgodasvccr01 -ErrorAction SilentlyContinue | ? { ($_.ProcessName -eq 'notepad.exe') } }

while ($null -ne (& $runningCheck))
{
Start-Sleep -m 250
}

Write-Host "Process: $processId is not longer running"

关于Powershell - 检查远程进程,如果完成继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18341767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com