【问题标题】:Powershell commands from C# 'the term is not recognizes as cmdlet'来自 C# 的 Powershell 命令“该术语未被识别为 cmdlet”
【发布时间】:2013-12-14 21:25:56
【问题描述】:

我在从 C# 应用程序执行 powershell 命令时遇到问题。 我发现了很多与这个问题相关的东西,但没有一个能帮助我弄清楚可能发生了什么。

所以我有这个小测试功能:

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
            Runspace runspace = RunspaceFactory.CreateRunspace();

            runspace.Open();

            Pipeline pipeline = runspace.CreatePipeline();
            pipeline.Commands.AddScript("msg * test");
    
            pipeline.Invoke();

            runspace.Close();
    }

问题在于,在某些计算机上它工作得很好,但在其他计算机上,我收到“术语'msg' 未被识别为 cmdlet、函数等”的消息。 c:\windows\system32 中存在的每个可执行文件都会发生这种情况。 当我使用像“Get-Process”这样的 cmdlet 时,它可以正常工作...

我现在正在两台计算机上进行测试,它们都将 ExecutionPolicy 设置为不受限制,并且它们具有相同的 Powershell 版本。 环境变量上的“路径”也是一样的。

【问题讨论】:

  • 两个系统上都存在可执行的msg.exe吗?这取代了从 Vista 开始的“网络发送”,我相信这就是您的命令要调用的内容。
  • 是的,如果我直接在 powershell 中键入命令,它工作正常。正如我所说,它发生在 ths system32 中的每个文件(msg、psexec、tscmd 等)。
  • 您是否正在创建自定义 Cmdlet ????

标签: c# powershell cmdlet


【解决方案1】:

您如何编译您的 C# 应用程序?如果它被编译为 x86 平台,那么它将使用虚拟化的System32 目录C:\windows\syswow64,并且该目录中没有 msg.exe。您可以 A) 编译为 x64 或 B) 使用路径 C:\windows\sysnative\msg.exe

【讨论】:

  • 这似乎是问题所在。我尝试将命令用作 'c:\windows\system32\msg.exe' 但也没有工作。但是他们我已经将一些文件作为 msg、psexec、tscmd 等复制到 'C:\windows\syswow64' 并开始工作。非常感谢 Keith,帮了大忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 2019-10-12
  • 2017-12-11
  • 2021-12-09
  • 2020-02-25
  • 2020-04-17
相关资源
最近更新 更多