2013-03-26 16 views
5

İki kod kümesi arasında (nispeten) küçük bir duraklama eklemem gerekiyor çünkü ikinci yarının, çalıştırmadan önce ilk yarının başarılı bir şekilde yürütülmesi gerekiyor - ancak PowerShell bazen biraz önünüzde ilerliyor ve bir önceki komut tamamen tamamlanmadan ilerler. Sürücü tamamen PowerShell New-Partition yürütür zaman başlatılmadı nedeniylePowershell: Orta boru hattı uyumu

Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false ` 
     | New-Partition -DriveLetter D -UseMaximumSize 

Genellikle Bu başarısız: Sadece bağlam için

, bu şimdiye ile çalışıyorum koddur. Sorun Initialize-Disk çıkış nesnesi kaybolur ve New-Partition bir giriş nesneyi almak olmamasıdır Ancak

Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false 
Start-Sleep -Seconds 2 
New-Partition -DriveLetter D -UseMaximumSize 

:

Tipik ben gibi bir şey kullanmayı tercih ediyorum.

Ben boru hattı Start-Sleep koyarak çalıştı:

Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false ` 
     | Start-Sleep -Seconds 2 ` 
     | New-Partition -DriveLetter D -UseMaximumSize 

... ama (yeterince adil) giriş nesnenin mantıklı bilmiyor Start-Sleep olarak bir istisna atar.

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: nasıl önceki cmdlet'inin çıktı nesnesini tutmak iken benim kodda bir duraklama ekleyebilirsiniz?

cevap

6

Sen arka plan işi kullanmayı deneyebilirsiniz: Ayrıca (denenmemiş) deneyebilirsiniz

Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false -asjob | 
wait-job | receive-job | New-Partition -DriveLetter D -UseMaximumSize 
+0

Değeri için, bu benim için işe yaramadı. – Bink

2

: Eğer boru hattında her öğe için belirlenen bir saniyede sayısını uyumak istiyorum

Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false | 
    % { Start-Sleep -Seconds 2 | Out-Null; $_ } | 
    New-Partition -DriveLetter D -UseMaximumSize 
1

sen ForEach-Object'u Graimer önerilebilir.

$disks = Initialize-Disk -PassThru -PartitionStyle GPT -Confirm:$false 
sleep 2 
$disks | New-Partition -DriveLetter D -UseMaximumSize 
0

Bu benim için çalıştı (başka cevaba benzer):

ne olursa olsun boru hattı öğelerin sayısının saniye sadece verilen numarayı uyumak istiyorsanız, boru hattını kırmak zorunda
New-Partition … | ForEach-Object { Start-Sleep -s 3; $_ | Format-Volume … } 
İlgili konular