tl; др :
Не использовать Invoke-Command
для локальных вызовов - хотя технически это возможно в ограниченном сценарии ios, для этого нет веских оснований.
Вместо этого вызывайте сценарии напрямую :
.\getprocess.ps1
Примечание. В отличие от cmd.exe
, PowerShell по своему дизайну требует .\
для выполнения исполняемого файла, расположенного в текущем каталоге . То есть, чтобы избежать случайного выполнения исполняемых файлов в текущем каталоге, а не из каталога, указанного в $env:Path
, PowerShell в качестве функции безопасности требует явного указания на намерение выполнить что-либо в текущем каталоге (.
). .
Для блоков сценариев ({ ... }
) используйте &
, оператор вызова (например, & { Get-Date }
).
По причинам, связанным с синтаксисом c, вам также необходимо &
для сценариев, если они указаны либо как заключенный в кавычки путь (например, & '.\getprocess.ps1'
), и / или если путь включает в себя ссылки на переменные (например,
& $HOME\getprocess.ps1
).
Действительно, как вы указали в своем собственном ответе , -FilePath
необходимо сочетать с параметром
-ComputerName
(что сообщение об ошибке является настолько обобщенным c неудачно).
Цель параметра -FilePath
- скопировать содержимое локального сценария (*.ps1
файл) на удаленный компьютер для выполнения там . То есть это удобный механизм выполнения кода скрипта, который (только) доступен локально на удаленной машине.
В то время как вы можете технически ориентироваться на локальный компьютер через -ComputerName localhost
(или, более кратко, через -ComputerName .
/ -cn .
), это делает не равным местному звонку :
Всякий раз, когда указано -ComputerName
- даже с -ComputerName localhost
- используется инфраструктура удаленного взаимодействия PowerShell , которая имеет основные последствия :
Целевой компьютер - даже если он локальный - должен быть настроен для удаленного взаимодействия PowerShell - см. about_Remote_Requirements .
Если вы настроены на локальный локальный компьютер В частности, на компьютере должна быть запущена сессия с повышенными правами (с правами администратора).
Выполнение будет намного медленнее, чем direct (локально ) вызов.
Верность типа может быть потеряна как для входных, так и для выходных данных, г Даже при использовании межпроцессного маршалинга через инфраструктуру сериализации на основе PowerShell XML - см. этот ответ .