Выполнение powershell.exe из сценария powershell (запускается в ISE, но не в сценарии)

Я новичок в этом удивительном мире Power shell. У меня проблема со сценарием, и я очень ценю вашу помощь.

У меня есть сценарий "cmd4.ps1", который должен запустить другой сценарий "Transfer.ps1", который должен получить 3 строковых параметра, и его нужно запускать как другой процесс, отличный от "cmd4.ps1".

cmd4.ps1:

$ Script = "- File" "" + $ LocalDir + "\ Remote \ Transfer.ps1" "http: //" + $ ServerIP + "/ Upload /" + $ FileName + "" + $ ServerIP + "" + $ LocalIP

Запуск-процесс powershell.exe -ArgumentList $Script 

После эжекции $Script иметь значение, аналогичное

-File "c:\temp re\Remote\Transfer.ps1" http://10.1.1.1/Upload/file.txt 10.1.1.1 10.1.1.10

содержащий синтаксис для использования -File параметр для запуска скрипта Powershell.exe и три параметра, которые необходимы для Transfer.ps1 ("http://10.1.1.1/Upload/file.txt", 10.1.1.1, 10.1.1.10).

Когда я пишу эти инструкции в PowerShell ISE, я вижу, что все значения верны, а PowerShell.exe выполняется с правильными значениями, все работает нормально!, но если я помещу эти инструкции в сценарий "cmd4.ps1", это не будет работать, я Я имею в виду, что что-то не так с параметрами, потому что я вижу, что это запускает powershell, но это никогда не заканчивается.

2 ответа

-ArgumentList ожидает массив строковых аргументов вместо одной строки. Попробуйте это вместо этого:

$ScriptArgs = @(
    '-File'
    "$LocalDir\Remote\Transfer.ps1"
    "http://$ServerIP/Upload/$FileName $ServerIP $LocalIP"
)

Start-Process powershell.exe -ArgumentList $ScriptArgs

Обратите внимание, что вы можете упростить строковое построение аргументов, как показано выше.

Почему бы вам не положить это в cmd4.ps1?

& "c:\temp re\Remote\Transfer.ps1" "http://10.1.1.1/Upload/file.txt" "10.1.1.1" "10.1.1.10"
Другие вопросы по тегам