Назад | Перейти на главную страницу

Оператор вызова powershell с несколькими аргументами?

Я пытаюсь использовать оператор вызова PowerShell для выполнения следующей команды:

"C: \ Program Files (x86) \ PuTTY \ plink.exe" "-v -agent -m C: \ Scripts \ idrac_powerup_commands.txt root @ [имя_сервера]"

Текущий код

$runputtyscript = @()
$runputtyscript += "-v"
$runputtyscript += "-agent"
$runputtyscript += "-m C:\Scripts\idrac_powerup_commands.txt"

& 'C:\Program Files (x86)\PuTTY\plink.exe' $allArgs root@servername

Проблема

Это выполняется, но сценарий не выполняет файл с командами так же, как если бы исходная строка была выполнена из командной строки. Он показывает мне консоль администратора (так что он вошел в систему, аутентифицирован с помощью открытого ключа и т. д.), но он просто не запустил сценарий, который я просил запустить.

Вещи, которые я пробовал

Вопрос

Может быть, более лаконичный способ спросить: Как правильно использовать аргументы, которые затем имеют свои собственные аргументы (например, "-m [имя файла] -v -a" с оператором вызова (&) в PowerShell?

Возможно, вы столкнулись с ситуацией, когда ваша переменная не обрабатывается двоичным файлом Win32. Вы можете облегчить это с помощью двойных кавычек:

'C:\Program Files (x86)\PuTTY\plink.exe' "$allArgs" root@servername

Некоторое время назад у меня была такая же проблема с netsh.

Вы почти получили это. Каждый параметр должен быть отдельным элементом массива. ($ allargs?)

$runputtyscript = @()
$runputtyscript += "-v"
$runputtyscript += "-agent"
$runputtyscript += "-m"
$runputtyscript += "C:\Scripts\idrac_powerup_commands.txt"

& 'C:\Program Files (x86)\PuTTY\plink.exe' $runputtyscript root@servername

Я бы добавил его в путь и запустил напрямую:

$env:path += ';C:\Program Files (x86)\PuTTY'
plink -v -agent -m C:\Scripts\idrac_powerup_commands.txt root@servername

Или, не изменяя путь, сделайте обратную кавычку без кавычек:

C:\Program` Files` (x86)\PuTTY\plink.exe -v -agent -m C:\Scripts\idrac_powerup_commands.txt root@servername

По какой-то причине, если написать его следующим образом, он отлично работает из командной строки PowerShell и из командной строки, вызывающей powershell.exe C: \ Path \ To \ Script.ps1

& 'C:\Program Files (x86)\PuTTY\plink.exe' -v -agent -m C:\Scripts\idrac_powerup_commands.txt root@servername | Write-Host

Иди разберись.