Warum eine Powershell-Skript Argument Notwendigkeit hat zu einer lokalen Variablen kopiert werden?
-
24-09-2019 - |
Frage
Ich habe einen sehr einfachen Powershell v1.0 Skript Prozesse mit Namen zu töten:
$target = $args[0]
get-process | where {$_.ProcessName -eq $target} | stop-process -Force
, die funktioniert. Allerdings, wenn ich habe gerade
get-process | where {$_.ProcessName -eq $args[0]} | stop-process -Force
würde es keine Prozesse finden. Warum also das Argument Bedarf in eine lokale Variable kopiert wird für den Code zu arbeiten?
Lösung
Das kam gestern in einem anderen post . Im Grunde ein Skript { <script> }
erhält einen eigenen $ args, die vergangen unbenannte Argumente in sie stellt z.
PS> & { $OFS=', '; "`$args is $args" } arg1 7 3.14 (get-date)
$args is arg1, 7, 3.14, 03/04/2010 09:46:50
Die Cmdlet Where-Object wird mit einem Skript für Sie beliebige Skript zu schaffen, die es entweder wahr oder falsch bewertet. In dem Where-Object Fall gibt es keine unbenannte Argumente in die Skript geführt, so sollte $ args leer sein.
Sie haben eine Behelfslösung gefunden. Die, die ich vorschlagen würde, ist ein benannten Parameter beispiel zu verwenden:.
param($Name, [switch]$WhatIf)
get-process | where {$_.Name -eq $Name} | stop-process -Force -WhatIf:$WhatIf