[英]Running PowerShell through C# pipeline
我正在編寫將與基於C#的Windows窗體應用程序集成的PS腳本。 這是我已經嘗試過/已經完成的:
我能夠通過運行空間和管道運行PS腳本,但是在嘗試運行使用功能的腳本時遇到錯誤,並說: “由於當前主機未實現此功能,因此無法調用此功能。”
我已經研究了這個問題,發現很少有人遇到類似的問題,但是其中一種解決方案強調我需要使用(添加)以下$ ConfirmPreference =“ None”,,-Confirm:$ false,-Force
但是,當我嘗試出現以下錯誤消息時: “一元運算符'-'之后缺少表達式。”您可以看到我試圖通過將字符串分配給變量來連接字符串,但這沒有幫助。 我不知道如何解決,有人知道嗎? 任何幫助都感激不盡。
// 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
,則不需要為要調用的每個Command
將Confirm
設置為false
。 那是隱含的...
而且,還必須在創建Runspace
或調用第一個Command
之前,而不是與每個Command
或Script
一起,一次設置此變量。
您還可以這樣設置此變量:
runspace.SessionStateProxy.SetVariable("ConfirmPreference", "none");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.