Мне достался в наследство ящик 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;