Sto scrivendo un cmdlet di PowerShell che deve eseguire un comando e archiviare l'output stderr in un file temporaneo per l'elaborazione successiva. Questo output elenca le porte COM che il cmdlet può utilizzare in seguito.Come escludere un blocco da -WhatIf elaborazione?
# 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
Vorrei che questo cmdlet per implementare -WhatIf
dal momento che avrà effetti collaterali non banali. Tuttavia, il comportamento -WhatIf
riprende il comando info-gather.exe
e non viene semplicemente eseguito. Invece, esso stampa:
Che cosa succede se: L'esecuzione dell'operazione di "Output to file" on target "temp \ percorso \ a \ tmp78A4.tmp"
Poiché questo comando non viene mai eseguito, l'interno l'elaborazione non si verifica e il resto del mio cmdlet con effettivi effetti collaterali non viene eseguito perché non sa quali porte utilizzare, rendendo in gran parte inutile -WhatIf
.
Come è possibile ignorare -WhatIf
per questo blocco senza sovrascriverlo nel resto del cmdlet?
Sono curioso di sapere se tra '$ info = [IO.Path] :: GetTempFileName()' e 'info-gather.exe 2> $ info' (e si doveva dormire o sospendere per un momento) se il file temporaneo ** esiste effettivamente ** quando ha anche inviato l'opzione '-WhatIf'. – gravity
@gravity, non sono sicuro di aver capito il tuo commento. 'GetTempFileName()' crea un file e ne restituisce il nome, in modo che il file sia garantito quando succede '2> $ info' (ma' GetTempFileName' è garantito per non restituire il nome di un altro file già esistente). – zneak
Questo cmdlet ha '[CmdletBinding (SupportsShouldProcess = $ true)]'? Come si fa ad avere questa configurazione per supportare '-WhatIf'? – Matt