¿Por qué un argumento necesidad PowerShell secuencia de comandos para copiar a una variable local?
-
24-09-2019 - |
Pregunta
Tengo una muy simple script de PowerShell v1.0 para matar procesos por nombre:
$target = $args[0]
get-process | where {$_.ProcessName -eq $target} | stop-process -Force
que funciona. Sin embargo, cuando sólo tenía
get-process | where {$_.ProcessName -eq $args[0]} | stop-process -Force
que no encontraría ningún proceso. Entonces, ¿por qué la necesidad argumento que va a copiar en una variable local para el código de trabajo?
Solución
Esto ocurrió ayer en otro después . Básicamente un { <script> }
ScriptBlock obtiene sus propios $ args que representa argumentos sin nombre pasaron en ella por ejemplo:.
PS> & { $OFS=', '; "`$args is $args" } arg1 7 3.14 (get-date)
$args is arg1, 7, 3.14, 03/04/2010 09:46:50
El cmdlet Where-Object utiliza una ScriptBlock para que pueda proporcionar la escritura arbitraria que se evalúa como verdadera o falsa. En el caso en que a objetos, no hay argumentos sin nombre en el pasado por lo ScriptBlock $ args deben estar vacíos.
Usted ha encontrado una solución temporal. El que yo sugeriría es utilizar un nombre de parámetro por ejemplo:.
param($Name, [switch]$WhatIf)
get-process | where {$_.Name -eq $Name} | stop-process -Force -WhatIf:$WhatIf