Назад | Перейти на главную страницу

Консольные приложения не работают в 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.

Есть подсказки?

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

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

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

Попробуйте запустить команду, используя полный путь: 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")

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

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

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