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 スクリプトは、(putty プロジェクトから) pscp.exe を呼び出そうとしていますが、上記と同じエラーが発生します。
最初に疑ったのは、パスの問題だということでした。そして、環境変数ウィンドウを開いても、確かに変数はPATH
存在していませんでした。そこで変数を作成し、それを含むディレクトリがそこにリストされていることを確認しましたpscp
。それでもダメでした。
変数にいくつかの基本エントリ (%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;) を追加すると、cmd.exe で同じコマンド (ipconfig または pscp) を実行すると期待どおりに動作しPATH
ます。
$env:path
Powershell では変数の値を返しますPATH
が、Powershell はそれらのディレクトリにあるプログラムを実行しません。1.0.0.0 get-host | select version
を返します。
何かヒントはありますか?
答え1
お使いの環境が少しおかしくなっているようです。ここにいくつかの追加のトラブルシューティング手順を示します。そのうちの 1 つがより役立つ情報を提供してくれることを願っています。
フルパスを使用してコマンドを実行してみてください: c:\windows\system32\ipconfig.exe
呼び出し式コマンドレットを試してください:
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 では機能しない場合は、それぞれの環境を比較してください。最も簡単な方法は、CMD で実行しset
、PowerShell ウィンドウで実行してcmd.exe /C set
結果を比較することです。
答え3
PATH が他の環境変数で表現されているのを見るのは少し奇妙です。それが物事を不自然にしているのではないかと思います。
たとえば、PATH 変数に表示される内容は次のとおりです (C: がプライマリ インストール ドライブであると想定)。
PATH=C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem;