Что касается неинтерактивного -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
cmd / C "type $ file" 2> $ null Это ничего не делает, удалите часть cmd и введите ее в командной строке, это не настоящая команда. Вот почему он ничего не возвращает.