【发布时间】:2021-05-22 14:14:57
【问题描述】:
我有以下代码:
foreach ($program in $programlist){
"$line installed $program" | Out-File "$logpath\log.txt" -Append
psexec \\"$hostikname" -u bla\bla -p $plainpwd cmd /c "pushd $BucketPath & copy $program c:\programdata\"
psexec \\"$hostikname" -i -u bla\bla -p $plainpwd -h cmd /c "c:\programdata\$program"
psexec \\"$hostikname" -u bla\bla -p $plainpwd cmd /c "del c:\programdata\$program"
}
这是我们用来在客户端电脑上远程安装程序的脚本的一部分。 效果很好只有一个问题: 脚本在完成每个 psexec 行之前不会继续。该脚本让最终用户以管理员权限安装程序,它是交互式安装,因此需要用户在计算机上。 如果由于某种原因一个用户调用脚本,然后去喝咖啡,脚本将一直卡住,直到用户返回并继续安装。 我想做的是检查 - 如果由于某种原因其中一条 psexec 行花费超过 2 分钟,我想退出 break break psexec 部分并继续代码。
我怎样才能做到这一点?
【问题讨论】:
-
您可以使用
start-job不等待任何人 -
不幸的是,这对脚本不利,因为一个 psexec 行依赖于另一个,主要目标是等待 X 分钟,如果脚本发现某些东西卡在其中一个psexec 行我想让它做点什么
-
dountil循环怎么样? -
$TimeStart = Get-Date $TimeEnd = $timeStart.addminutes(2) Write-Host "Start Time: $TimeStart" write-host "End Time: $TimeEnd" Do { $TimeNow = Get-Date if ($TimeNow -ge $TimeEnd) { Write-host "It's time to finish." } else { Write-Host "Not done yet, it's only $TimeNow" } Start-Sleep -Seconds 10 } Until ($TimeNow -ge $TimeEnd) -
psexec 将在远程计算机上打开安装,发生这种情况时,脚本将在远程计算机上安装完成后继续执行,如果远程计算机上的用户不执行任何操作,则意味着安装将在远程计算机上停止,然后脚本不会继续前进。即使最终用户不在他的计算机上,我也需要找到一种在 X 分钟后继续前进的方法。就像 psexec 脚本块的计时器一样。 10 分钟后,打破障碍并继续
标签: powershell break psexec