我有一个在远程服务器上启动任务的 PowerShell 脚本。该任务需要数小时才能运行,因此我需要在我的代码中设置一个循环,每隔几分钟检查一次任务,以查看它是否仍在运行,然后脚本继续执行下一步。我尝试运行以下命令:
$svc_cred = Get-Credential -Credential <DOMAIN>\<ServiceAccount>
$global:Remote_session = New-PSSession -ComputerName <Server> -Credential $svc_cred
Invoke-Command -Session $global:Remote_session -ScriptBlock {
$results = Get-ScheduledTask -TaskName "Export_users" -TaskPath "\"
Write-Output "Taskname: $results.TaskName"
Write-Output "State: $results.State"
}
但这会产生输出:
Taskname: MSFT_ScheduledTask (TaskName = "Export_users", TaskPath = "\").TaskName
State: MSFT_ScheduledTask (TaskName = "Export_users", TaskPath = "\").State
我想要的输出是:
Taskname: Export_users
State: Running
如何对此进行编码以允许访问脚本以检查状态是否等于“正在运行”?
回答1
您可以在 while 循环中使用计划任务的 State 属性,如下所示:
Start-ScheduledTask -TaskName 'SomeTaskName'
while ((Get-ScheduledTask -TaskName 'SomeTaskName').State -ne 'Ready') {
##Wait a while
Start-Sleep -Seconds 10
}
回答2
Santiago Squarzon 的评论回答了我的问题。
"Taskname: $($results.TaskName)" 和 "State: $($results.State)" 甚至更简单,$results |选择对象任务名称,状态 – Santiago Squarzon