2013-11-28 132 views
2

我遇到了從C#應用程序執行powershell命令的問題。 我發現很多與這個問題有關的東西,但沒有一個幫助我找出可能發生的事情。來自C#的Powershell命令'該術語無法識別爲cmdlet'

所以我有這個小測試功能:

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(); 
    } 

的問題是,在一些電腦它工作得很好,但在其他我收到消息說:「術語‘味精’未被識別爲一個cmdlet,函數等「 這發生在c:\ windows \ system32中的每個可執行文件中。 當我使用像Get-Process這樣的cmdlet時,它可以正常工作...

我在兩臺計算機上測試,他們都將ExecutionPolicy設置爲無限制,並且它們具有相同的Powershell版本。 環境變量上的'路徑'也是一樣的。

感謝任何幫助。

在此先感謝。

Paulo

+0

兩個系統上都存在可執行文件msg.exe嗎?這取代了從Vista開始的「網絡發送」,我相信這就是你的命令要調用的內容。 – mjolinor

+0

是的,如果我直接在powershell中鍵入命令,它工作正常。 正如我所說,它發生在system32(msg,psexec,tscmd等)中的每個文件。 –

+0

您是否正在創建自定義Cmdlet? – Aravind

回答

3

你是如何編譯C#應用程序的?如果它被編譯爲x86平臺,那麼它將使用虛擬化的System32目錄C:\windows\syswow64,並且該目錄中沒有msg.exe。您可以A)編譯爲x64或B)使用路徑C:\windows\sysnative\msg.exe

+0

這似乎是問題所在。 我試過使用命令'c:\ windows \ system32 \ msg.exe',但也沒有工作。但他們我已經複製了一些文件如msg,psexec,tscmd等到'C:\ windows \ syswow64',它開始工作。 非常感謝基思,很有幫助。 –

相關問題