我继承了一个 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
列在那里。仍然没有结果。
PATH
一旦我向变量 (%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;)添加了一些基本条目,在 cmd.exe 中运行相同的命令 (ipconfig 或 pscp) 就会按预期工作。
$env:path
在 Powershell 中返回变量的值PATH
,但是 powershell 仍然不会执行这些目录中的程序。 get-host | select version
返回 1.0.0.0。
有什么提示吗?
答案1
听起来你的环境有点乱。以下是一些额外的故障排除步骤,希望其中一个步骤能提供更多有用的信息:
尝试使用完整路径运行命令:c:\windows\system32\ipconfig.exe
尝试invoke-expression cmdlet:
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 中运行并在 PowerShell 窗口中运行cmd.exe /C set
并比较结果。
答案3
看到 PATH 以其他环境变量的形式表达,感觉有点奇怪。我想知道这是否会造成问题。
例如,这是我希望在您的 PATH 变量中看到的内容(假设 C: 是您的主安装驱动器):
PATH=C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem;