Консольные приложения не работают в Powershell

Консольные приложения не работают в Powershell

Мне достался в наследство ящик Windows Server 2003 r2. У меня есть скрипт Powershell, который мне нужно запустить на машине, но что-то, похоже, ужасно не так с системой. Например, открытие консоли Powershell и ввод ipconfigприводит к следующему ответу:

The term 'ipconfig' is not recognized as a cmdlet, function, operable program, or script file.  Verify the term and try again.

Мой скрипт Powershell пытается вызвать pscp.exe (из проекта putty) и получает ту же ошибку, что и выше.

Моим первым подозрением было, что это проблема пути, и, конечно же, когда я открыл окно переменных среды, переменная PATHдаже не существовала. Поэтому я создал ее и убедился, что каталог, содержащий ее, pscpуказан там. По-прежнему ничего не вышло.

Выполнение тех же команд (ipconfig или pscp) в cmd.exe работает так, как и ожидалось, после того как я добавил несколько базовых записей в PATHпеременную (%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;).

$env:pathв Powershell возвращает значения переменной PATH, но PowerShell по-прежнему не будет выполнять программы, находящиеся в этих каталогах. get-host | select versionвозвращает 1.0.0.0.

Есть какие-нибудь подсказки?

решение1

Похоже, что ваша среда немного запуталась. Вот несколько дополнительных шагов по устранению неполадок, надеюсь, один из них даст больше полезной информации:

Попробуйте запустить команду, используя полный путь: c:\windows\system32\ipconfig.exe

Попробуйте командлет invoke-expression:

invoke-expression -command "ipconfig"  

или:

invoke-expression -command "c:\windows\system32\ipconfig.exe"  

Попробуйте использовать поставщик процесса .Net (вы не сможете увидеть результаты вызова, но он предоставит вам некоторую информацию о нем, которая может быть полезна):

[System.Diagnostics.Process]::Start("c:\windows\system32\ipconfig.exe")

решение2

Попробуйте запустить powershell -NoProfileи посмотреть, работает ли что-то. Если да, то ваша проблема в скрипте профиля, который вы можете редактировать с помощью notepad $profile.

Попробуйте открыть окно CMD и запустить ipconfigтам. Если это работает в CMD, но не в PowerShell, то сравните среду, найденную в каждом из них. Самый простой способ, вероятно, запустить setв CMD и запустить cmd.exe /C setв окне PowerShell и сравнить результаты.

решение3

Немного странно видеть ваш PATH, выраженный в терминах других переменных среды. Интересно, может ли это сделать вещи шаткими.

Например, вот что я ожидаю увидеть в вашей переменной PATH (предполагая, что C: является вашим основным установочным диском):

PATH=C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem;

Связанный контент