控制台应用程序在 Powershell 中不起作用

控制台应用程序在 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列在那里。仍然没有结果。

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;

相关内容