Невозможно запустить параметризованный пакетный файл на удаленном компьютере с помощью PowerShell - PullRequest
0 голосов
/ 03 мая 2019

Выполнить параметризованный командный файл удаленного сервера из PowerShell.

Не выдает ошибку и не выполняет команду на удаленном компьютере.

$path = "D:\run\test-5.2.bat";
Invoke-Command -ComputerName testserver -Scriptblock { "$path" }

Скрипт внутри bat-файла msiexec с параметрами, которые должны выполняться только из командной строки.

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

$path - это строка.PowerShell просто выводит пустые строки вместо их исполнения, в отличие от CMD или bash.Используйте оператор вызова (&):

& "$path"

или Start-Process:

Start-Process cmd.exe -ArgumentList '/c', $path -NoNewWindow -Wait

, чтобы PowerShell выполнял строку в качестве команды.Поскольку вы говорите, что запускаете msiexec.exe из пакетного сценария, может потребоваться использование последнего.

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

Invoke-Command -Computer testserver -Scriptblock { & "$using:path" }

или путем передачи $path в качестве аргумента блоку сценария:

Invoke-Command -Computer testserver -Scriptblock { & "$($args[0])" } -ArgumentList $path
0 голосов
/ 03 мая 2019

На основе этой ссылки MSDN вы можете запустить файл сценария ps1 на удаленных компьютерах. Поэтому, если есть возможность «портировать» содержимое файла bat в ps1, оно должно работать. Вот пример MSDN:

Пример 11. Запуск сценария на всех компьютерах, перечисленных в текстовом файле

 PS C:\> Invoke-Command -ComputerName (Get-Content Servers.txt) -FilePath C:\Scripts\Sample.ps1 -ArgumentList Process, Service

В этом примере используется командлет Invoke-Command для запуска сценария Sample.ps1 на всех компьютерах, перечисленных в файле Servers.txt. Команда использует параметр FilePath для указания файла сценария. Эта команда позволяет запустить сценарий на удаленных компьютерах, даже если файл сценария недоступен для удаленных компьютеров.

Когда вы отправляете команду, содержимое файла Sample.ps1 копируется в блок сценария, и блок сценария запускается на каждом из удаленных компьютеров. Эта процедура эквивалентна использованию параметра ScriptBlock для отправки содержимого скрипта.

Надеюсь, это поможет

...