Я унаследовал 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;