Potrzebuję dodać (stosunkowo) małą pauzę między dwoma zestawami kodu, ponieważ druga połowa musi mieć pierwszą połowę pomyślnie wykonaną przed uruchomieniem - ale PowerShell czasami trochę wyprzedza siebie i postępuje, zanim poprzednie polecenie zakończy się całkowicie.Powershell: Sleeping mid-pipeline
Tylko dla kontekstu, jest to kod pracuję z:
Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false `
| New-Partition -DriveLetter D -UseMaximumSize
Często to się nie powiedzie, ponieważ napęd nie jest całkowicie zainicjowany przez czas PowerShell wykonuje New-Partition
.
Zwykle bym użyć coś takiego:
Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false
Start-Sleep -Seconds 2
New-Partition -DriveLetter D -UseMaximumSize
Jednak problemem jest to, że obiekt wyjściowy Initialize-Disk
jest stracone i New-Partition
nie uzyskać obiekt wejściowy.
Próbowałem oddanie Start-Sleep
w rurociągu:
Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false `
| Start-Sleep -Seconds 2 `
| New-Partition -DriveLetter D -UseMaximumSize
... ale zgłasza wyjątek jako Start-Sleep
nie wie, jak ma sensu obiektu wejściowego (co jest fair enough).
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: W jaki sposób mogę dodać pauzę w moim kodu utrzymując obiekt wyjściowy poprzedniego apletu polecenia?
To, co jest warte, nie zadziałało. – Bink