我需要在两组代码之间添加一个(相对)小的暂停,因为后半部分需要在运行之前成功执行前半部分——但 PowerShell 有时会提前一点,并在前一个命令完全完成之前继续执行。
只是为了上下文,这是我正在使用的代码:
Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false `
| New-Partition -DriveLetter D -UseMaximumSize
这通常会失败,因为在 PowerShell 执行New-Partition
.
通常我会使用类似的东西:
Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false
Start-Sleep -Seconds 2
New-Partition -DriveLetter D -UseMaximumSize
然而问题是输出对象Initialize-Disk
丢失并且New-Partition
没有得到输入对象。
我尝试将其Start-Sleep
放入管道中:
Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false `
| Start-Sleep -Seconds 2 `
| New-Partition -DriveLetter D -UseMaximumSize
...但它会引发异常,因为Start-Sleep
它不知道如何理解输入对象(这很公平)。
Start-Sleep : The input object cannot be bound to any parameters for the command either because the command does not take pipeline
input or the input and its properties do not match any of the parameters that take pipeline input.
At C:\Users\Administrator\Desktop\test.ps1:104 char:87
+ ... nfirm:$false | Start-Sleep -Seconds 2 `
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (MSFT_Disk (Obje...11E2-93F2-0...):PSObject) [Start-Sleep], ParameterBindingException
+ FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.StartSleepCommand
tl;dr:如何在我的代码中添加暂停,同时保留前面 cmdlet 的输出对象?