Warum eine Powershell-Skript Argument Notwendigkeit hat zu einer lokalen Variablen kopiert werden?

StackOverflow https://stackoverflow.com/questions/2380934

  •  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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top