来自C#的Powershell命令“the term is not recognized as cmdlet”

4

我有一个问题,就是无法从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();
    }

问题在于有些电脑可以正常运行,但有些电脑会出现消息“the term 'msg' is not recognized as a cmdlet, function,etc." 。这种情况发生在c:\windows\system32中的每个可执行文件上。当我使用像“Get-Process”这样的cmdlet时,它可以正常工作...
我现在正在测试两台计算机,它们都将ExecutionPolicy设置为不受限制,并且它们具有相同的Powershell版本。环境变量中的“路径”也是相同的。

可执行文件msg.exe在两个系统上都存在吗?这个命令在Vista开始替换了"net send",我相信这就是你的命令要调用的东西。 - mjolinor
是的,如果我直接在PowerShell中输入命令,它可以正常工作。 就像我说的那样,这会发生在系统32中的每个文件上(msg、psexec、tscmd等)。 - Paulo Rocha
你正在创建自定义的 Cmdlet 吗? - Aravind
1个回答

4

你是如何编译你的 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的帮助。 - Paulo Rocha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接