¿Por qué un argumento necesidad PowerShell secuencia de comandos para copiar a una variable local?

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

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

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top