Что касается неинтерактивного -d
, он просто запускает команду, не возвращая вывод, а затем завершает удаленный запрос. На самом деле это происходит, только возвращая код ошибки удаленного процесса. В вашем случае он отображает вывод $file
в несуществующем скрытом окне cmd
на удаленной машине и завершается. Вот почему вы ничего не видите. Попробуйте создать файл на удаленном компьютере, используя ключ -d
и вы увидите, что он работает.
Обновить:
Если $file
является переменной на удаленном компьютере, проблема в том, что вы используете переменную, которая раскрывается в вашей локальной среде powershell (как вы уже упоминали), поэтому используйте вместо нее переменную cmd
(учитывая, что вы отправляете команду в cmd
), которая не не расширяется в powershell. PSExec.exe \\$hostname -u user -p pass -d cmd /c "type %file%" 2> $null
Тем не менее, это не РЕАЛЬНОЕ решение! потому что, если вы хотите отправить команду на powershell удаленно? Вам нужно что-то, препятствующее расширению, например %%varibale%%
в cmd
. Я обнаружил, что использование «будет расширять, но» предотвращает расширение в powershell:
PS> "This is $file"
против PS> 'This is $file'
Но это не помогает в вашем случае, но есть и другой способ - создать скрипт на локальном компьютере и отправить его по назначению с помощью PSEXEC:
PSExec.exe \\$hostname -u user -p pass -c powershell script.ps1 2> $null
Или ... используйте Invoke-Command, как указано здесь:
PS C:\> invoke-command -filepath c:\scripts\test.ps1 -computerName $hostname