後半は実行前に前半を正常に実行する必要があるため、2セットのコードの間に(比較的)小さな一時停止を追加する必要がありますが、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:前のコマンドレットの出力オブジェクトを保持したまま、コードに一時停止を追加するにはどうすればよいですか?