我对这个完全不知所措。最近我的许多 powershell 脚本开始失败,因为它们无法找到命令 dnscmd.exe。
让我感到困惑的是,可执行文件存在且可以运行,我可以在命令提示符中正常运行它。我在 powershell 中尝试了以下操作来运行命令:
- dns命令
- & dnscmd
- & dnscmd.exe
- & c:\windows\system32\dnscmd.exe
全部返回“术语 dnscmd 未被识别为 cmdlet、函数、脚本文件或可操作程序的名称....”
有人能告诉我为什么 powershell 完全无法看到命令,而正常的命令提示符/windows 资源管理器等可以吗?使用 powershell 2。
答案1
在我看来,这听起来像是文件系统重定向器的工作。您运行的是 64 位操作系统吗?
例如,当您使用 PowerShell (x86) 在 64 位操作系统上调用 C:\Windows\system32\dnscmd.exe 时,它将被重定向到 C:\Windows\SysWow64\dnscmd.exe。重定向发生在访问文件夹时,因此即使您明确提供了可执行文件的路径,您仍会被转移。可以通过调用本机 Windows API 在当前线程上禁用此功能,也可以通过使用某些变量和别名来避免此功能。
更多信息请点击这里: http://msdn.microsoft.com/en-us/library/aa384187%28VS.85%29.aspx
答案2
这是文件系统重定向,但你可以绕过
代替
C:\windows\system32
(重定向器将抓住)使用
C:\windows\sysnative\dnscmd.exe
答案3
执行后会得到什么:
Get-Command dnscmd.exe -CommandType 应用程序
答案4
我遇到了完全相同的问题,原来是我意外固定了 x86 版本的 PowerShell。
文件系统重定向器确实有一些神奇的作用……