当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

作者:精品下载站 日期:2024-12-14 04:57:34 浏览:16 分类:玩电脑

PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)


[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

PowerShell 等待的定义

PowerShell wait cmdlet 用于将执行保持一段时间以等待命令、作业或进程完成,通知用户后台作业正在运行并要求等待一段特定时间,重新启动远程系统,并等待它出现,启动和停止虚拟机等,这取决于指定的命令。如果该命令是让后台作业首先处理,那么它将等待完成,如果该命令是在特定时间段内停止执行,那么用户必须等到指定的时间。

语法:

a.等待过程

上述命令用于等待进程停止,然后再接受新输入或移至下一个命令。

b.等待作业

该命令用于完成后台作业,执行完成后才会进入下一阶段。

c.开始-睡眠

此命令将脚本执行暂停指定的时间(以秒或毫秒为单位),并且不能使任何命令或作业在后台等待,但会暂停脚本执行。

d.等待事件

此命令暂停脚本或函数的执行,直到引发特定事件,然后继续执行脚本。

e.等待参数

许多命令直接在命令中使用 -Wait 参数来等待该命令完成,而不是使用单独运行的 Wait-Job 命令。

f.超时

Start-Sleep命令类似,此命令将脚本的执行保留指定的时间段。

Wait 方法在 PowerShell 中如何工作?

一旦我们使用等待命令,它就会停止执行,直到后台作业或进程完成,然后从上次停止的位置恢复执行。一些命令,例如 Start-Sleep timeout,只是暂停脚本,但不在后台运行任何作业或进程。

示例

让我们讨论一下 PowerShell 等待的示例。

1. 等待过程示例

当我们使用命令Wait-Process时,它会等待特定进程或应用程序停止。此命令接受进程 ID、名称和超时(以秒为单位)。

例如,我们正在运行 SnippingTools 应用程序,我们将终止它,但我们将等到该进程终止。

Get-Process SnippingTool

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

要使用 wait 命令,我们可以使用 ProcessID 或进程的名称。

Wait-Process -ID 32328
Write-Output "This command will be executed after process termination"

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

您还可以提供超时参数(以秒为单位),如果进程没有在指定时间内终止,则会抛出错误。

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

您还可以为 Wait-Process 命令提供多个进程名称。

2. 启动-睡眠示例

该命令将执行一段时间,然后等待下一个命令。您可以提供以秒或毫秒为单位的时间。

Write-Output "Writing First Line"

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

Start-Sleep -Seconds 5

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

写入输出“该命令将在 5 秒后执行”

您还可以提供-毫秒参数。

Start-Sleep -Milliseconds 5000

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

c.超时示例

这是一个 cmd 命令,但也可以在 PowerShell 中访问。一旦指定了超时(以秒为单位),接下来的命令就会等待直到超时。

Write-Output "Writing First Line"
Timeout /T 5
Write-Output "This command will be executed after 5 seconds"

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

输出:

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

用户可以在指定的超时时间内中断,如果想要不间断的超时则使用/NoBreak开关。

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

使用 /NoBreak 开关的唯一选项是按 Ctrl+C 终止进一步执行。

d.等待作业示例

当我们使用Wait-Job命令时,它会等待脚本块完成并执行下一行命令。

$sb = Start-Job -ScriptBlock{
$i = 0
while($i -lt 10){
$i++
Sleep 3
}
}
Wait-Job $sb.Name
Write-Output "This line will be executed after job completes"

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

输出:

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

我们还可以使用 Wait-Job cmdlet 中的 -Timeout 参数(以秒为单位)指定作业完成的超时时间。如果作业在此期间未完成,脚本将抛出错误。

e.等待事件示例

此命令等待特定事件发生,然后 PowerShell 会暂停执行,并在事件触发时恢复执行。

Wait-Event

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

上述命令等待任何下一个事件触发并暂停 PowerShell 执行。

我们将在这里创建一个新的测试事件来触发 Wait-Event 命令。

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

Wait-Event;
New-Event -SourceIdentifier Timer -Sender windows.timer -MessageData "Test" | Out-Null

输出:

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

如果我们有该事件的任何特定源,我们可以指定该 SourceIdentifier 名称。

Wait-Event -SourceIdentifier "ProcessStarted" -Timeout 200

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

g。命令中的-Wait参数

Restart-Computer、Start-AZVM、Stop-AzVM 等命令很少支持 -Wait 参数,并且在执行 -Wait 后执行下一个命令强> 参数命令。例如,

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

Restart-Computer -ComputerName test1-win2k12 -Wait -Force
Write-Output "Get Process command will be executed after server restart"
Get-Process -ComputerName test1-win2k12

输出:

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

还有其他命令默认包含等待参数,例如 Start-AzVMStop-AzVM 命令。

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

Start-AzVM -Name TestVm -ResourceGroupName TestRG -NoWait
Write-Output "This command will be executed immediately"

要停止虚拟机,

[玩转系统] PowerShell 等等 |等待方法在 PowerShell 中如何工作? (示例)

Stop-AzVM -Name TestVm -ResourceGroupName TestRG
Write-Output "This command will be executed after VM Stops"

在第一个命令 Start-AZVM 中,指定了 -NoWait 参数,以便命令不会等待启动 VM,但在第二个命令 Stop-AZVM 中,默认参数为 Wait,以便下一个命令命令将等待,直到 VM 成功停止。

结论

PowerShell中有很多Wait cmdlet,并且PowerShell命令中支持Wait参数,因此前面的命令应该首先完成,因为有时下一个命令的输入取决于上一个命令的输出,我们需要先执行它们。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯