2016-05-26 3 views
1

Я пытаюсь передать аргументы удаленной машине с помощью прилагаемого сценария. Но он бросает исключение, говоря: «не может индексировать нулевой массив». Где я иду не так?Передача аргументов удаленной машине?

param(
[Parameter(Mandatory = $True, Position = 0)][ValidateNotNull()]$server = $(throw "Please provide Environment name. Ex: cyclone,jwoww or joker"), 
[Parameter(Mandatory = $true, position = 1)][string]$logType = $(throw "Please provide type of log you want"), 
[Parameter(Mandatory = $true, position = 2)][string]$howMany = $(throw "Please provide number of log rows you want") 
) 

invoke-command -computername $server -credential abc\def{ 

Get-EventLog -logname $arg[0] -newest $arg[1] | Out-File c:\EventLogs.txt 

} -argumentlist $logType,$howMany 

ответ

1

Просто добавьте Param блок в Invoke-Command командлета и использовать имена параметров вместо $arg[0] и $arg[1]

invoke-command -computername $server -credential abc\def{ 
    Param($logType, $howMany) 

Get-EventLog -logname $logType -newest $howMany | Out-File c:\EventLogs.txt 

} -argumentlist $logType,$howMany 
+0

Пробовал это уже. Он не запрашивает значения, когда выполняется внутри блока сценариев, и генерирует исключение, запрашивающее значения. –

+0

Просто добавьте узел записи перед вызовом 'Invoke-Command' и дамп ваши параметры, например:' Write-Host $ server; Write-Host $ logType; Write-Host $ howMany' для проверки параметров успешно передается в ваш скрипт. Параметры –

+0

не передаются в блок сценариев. Если я попрошу пользователя ввести params внутри блока сценария, он не запрашивает params и просто выдает ошибку, чтобы значение было введено. –