2016-05-25 3 views
2

У меня есть эта функция в PowerShell:Передача массивов в качестве параметров в Powershell?

function Run-Process 
{ 
    param([string]$proc_path, [string[]]$args) 
    $process = Start-Process -FilePath $proc_path -ArgumentList $args -PassThru -Wait 
    $exitcode = Get-ExitCode $process 
    return $exitcode 
} 

И в какой-то код в другом месте, я называю это таким образом:

$reg_exe = "C:\WINDOWS\system32\reg.exe" 
$reg_args = @("load", "hklm\$user", "$users_dir\$user\NTUSER.DAT") 
$reg_exitcode = Run-Process -proc_path $reg_exe -args $reg_args 

Когда это называется, $proc_path получает значение для $reg_exe, но $args пустым.

Это параметры массива передаются в Powershell, не так ли?

ответ

2

$args is a special (automatic) variable in PowerShell, не используйте его для имени параметра.

-ArgumentList - это типичное имя, присвоенное этому типу параметров в PowerShell, и вы должны придерживаться соглашения. Вы могли бы дать ему псевдоним args и тогда вы могли бы назвать его так, как вам нравится, не вступая в конфликт с переменной:

function Run-Process { 
[CmdletBinding()] 
param(
    [string] 
    $proc_path , 

    [Alias('args')] 
    [string[]] 
    $ArgumentList 
) 
    $process = Start-Process -FilePath $proc_path -ArgumentList $ArgumentList -PassThru -Wait 
    $exitcode = Get-ExitCode $process 
    return $exitcode 
} 

Возможная альтернатива, которая может работать, если вы абсолютно необходимо назвать параметр как args (непроверенные) :

function Run-Process 
{ 
    param([string]$proc_path, [string[]]$args) 
    $process = Start-Process -FilePath $proc_path -ArgumentList $PSBoundParameters['args'] -PassThru -Wait 
    $exitcode = Get-ExitCode $process 
    return $exitcode 
} 

Пожалуйста, не делайте этого; другое обходное решение лучше.

+0

Ах, джед, ладно, спасибо. Я не думал, что это возможно автоматическая переменная. – supercheetah

+1

@supercheetah, как вы сформулировали этот комментарий, я полностью прочитал его в голосе [Jerry Gergich] (https://en.wikipedia.org/wiki/Jerry_Gergich) :) – briantist

+0

Теперь у вас это тоже в голове. – supercheetah

Смежные вопросы