Я пытаюсь использовать оператор вызова 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
Иди разберись.