簡體   English   中英

通過C#管道運行PowerShell

[英]Running PowerShell through C# pipeline

我正在編寫將與基於C#的Windows窗體應用程序集成的PS腳本。 這是我已經嘗試過/已經完成的:

  1. 我能夠通過運行空間和管道運行PS腳本,但是在嘗試運行使用功能的腳本時遇到錯誤,並說: “由於當前主機未實現此功能,因此無法調用此功能。”

  2. 我已經研究了這個問題,發現很少有人遇到類似的問題,但是其中一種解決方案強調我需要使用(添加)以下$ ConfirmPreference =“ None”,,-Confirm:$ false,-Force

  3. 但是,當我嘗試出現以下錯誤消息時: “一元運算符'-'之后缺少表達式。”您可以看到我試圖通過將字符串分配給變量來連接字符串,但這沒有幫助。 我不知道如何解決,有人知道嗎? 任何幫助都感激不盡。

      // create Powershell runspace Runspace runspace = RunspaceFactory.CreateRunspace(); // open it runspace.Open(); // create a pipeline and feed it the script text Pipeline pipeline = runspace.CreatePipeline(); //allow the functions to be exec string sa = "$ConfirmPreference = \\"None\\" "; string se = " -Confirm:$false -Force"; string s = sa +scriptText + se; pipeline.Commands.AddScript(s); 

-Confirm:$false -Force是函數參數,它們並不獨立存在。

Do-Something -param1 'foo' -Confirm:$false -Force

但是,即使您使用這些參數修改了每個函數調用,也可能無法解決所有問題。 有關更多選項,請參見此處

好了,PowerShell附帶了一個名為CommonParameters的對象( MSDN:System.Management.Automation.Internal.CommonParameters

可以在此處看到要表示的參數: MSDN:通用參數名稱

據我所知,是否將變量$ConfirmPreference設置為None ,則不需要為要調用的每個CommandConfirm設置為false 那是隱含的...

而且,還必須在創建Runspace或調用第一個Command之前,而不是與每個CommandScript一起,一次設置此變量。

您還可以這樣設置此變量:

runspace.SessionStateProxy.SetVariable("ConfirmPreference", "none");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM