Bir komut yürütmesi ve stderr çıktısını daha sonra işlenmek üzere geçici bir dosyada saklaması gereken bir Powershell cmdlet'i yazıyorum. Bu çıkış, cmdlet'in daha sonra kullanabileceği COM bağlantı noktalarını listeler.Bir bloğu -WhatIf işleminden nasıl hariç tutarım?
# mostly side-effect-free information gathering
$info = [IO.Path]::GetTempFileName()
info-gather.exe 2>$info
Get-Content $info | ForEach-Object {
# processing
}
Remove-Item $info
# serious things with serious side effects start here
Ben önemsiz olmayan yan etkisi olmayacağından bu cmdlet -WhatIf
uygulamak istiyoruz. Ancak, -WhatIf
davranışı, info-gather.exe
komutunu alır ve hiçbir zaman yürütülmez. Bunun yerine, yazdırır:
Ya: Bu komut asla çalıştırılmaz Çünkü
"tmp78A4.tmp \ üzere geçici \ yol \" hedef üzerinde "Dosya Çıktı", iç işlemi gerçekleştirilmesi İşlem gerçekleşmez ve gerçek yan etkileri olan cmdlet'in geri kalanı yürütülür, çünkü hangi portların kullanılacağını bilmez, -WhatIf
büyük ölçüde işe yaramaz.
Bu blok için cmdlet'in geri kalanında geçersiz kılmadan bu bloğu nasıl -WhatIf
atlayabilirim?
'$ info = [IO.Path] :: GetTempFileName() 've ' info-gather.exe 2> $ info' arasında (ve bir an için uyku veya duraklama) geçici dosya ** aslında '-WhatIf 'anahtarını da gönderdiğinde ** var. – gravity
@gravity, Yorumunuzu anladığımdan emin değilim. 'GetTempFileName()' bir dosya oluşturur ve ismini döndürür; böylece dosya '2 $ $ 'olduğunda gerçekleşir. (Ancak' GetTempFileName', zaten var olan başka bir dosyanın adını döndürmez). – zneak
Bu cmdlet'in '[CmdletBinding (SupportsShouldProcess = $ true)]' var mı? Bunu -WhatIf'yi desteklemek için nasıl kurdunuz? – Matt