2012-09-11 59 views
0

假設我已經創建並通過如何通過注入一個數組變量變成一個PowerShell運行空間新變量

  var rs = RunspaceFactory.CreateRunspace(); 
      rs.Open(); 

讓我們打開運行空間進一步假設,我想一個變量添加到該的類型爲的是運行空間陣列通過使用新的變量cmdlet的像這樣:

  // create a pipeline to add the variable into the runspace 
      var pipeline = PowerShell.Create(); 
      // create a command object, add commands and parameters to it... 
      var cmd = new PSCommand(); 
      cmd.AddCommand("New-Variable"); 
      cmd.AddParameter("Name", "foo"); 
      cmd.AddParameter("Value", "@()"); 
      // associate the command with the pipeline and runspace, and then invoke 
      pipeline.Commands = cmd; 
      pipeline.Runspace = rs; 
      pipeline.Invoke(); 

代碼工作,我沒有錯誤,但是變量「富」不作爲數組類型來創建。我已經在「@()」上嘗試了許多不同的變體,但是迄今爲止它們都沒有被淘汰。最終,我認爲這個問題歸結爲如何正確地將Value參數格式化爲New-Variable,以便'foo'將被解釋爲一個空的PowerShell數組類型。

謝謝,

馬特

回答

-1
PSCommand.AddParameter

需要一個字符串參數名稱和對象用於該參數值。請參閱文檔here

您應該放置一個「真正的」空數組,而不是表示powershell腳本等效的字符串。

cmd.AddParameter("Value", new object[0]); 
+0

請問downvoter護理解釋自己? – latkin

+0

嗨latkin,謝謝你的回答。我現在能夠根據請求創建變量,但是我在尋找的是如何格式化從文件讀取的文本,以便在請求數組類型時正確解釋文件。我正在構建我的XML管道,並希望(如果可能的話)先知道文本格式來聲明各種類型。如果沒有其他辦法,那麼我會給你的答案信貸。我會投票決定你的答案(以及基思希爾的答案),但我沒有足夠的聲望去做。再次感謝。 – anonmous

+0

如果你是從文本中完成的,你可以看看AddScript方法。例如,'var cmd = new PSCommand()。AddScript(「$ myVar = @()」);'會生成一個名爲'$ myVar'的新變量。 – latkin

3

僅供參考,你可以在C#中直接做到這一點,像這樣:

pipeline.Runspace.SessionStateProxy.PSVariable.Set("foo", new object[0]); 
0

救了我是響應:

如果從文本做這一切,你可以看看AddScript方法。例如,var cmd = new PSCommand().AddScript("$myVar = @()");將生成一個名爲$myVar的新變量。

實例C#代碼:

foreach (Collaborator collab in collabs) 
       { 
        counter ++; 
        arrayUsers.Append("@(\"" + collab.mail + "\", \"" + collab.url + "\")"); 
        if (counter < numbercollabs) 
         arrayUsers.Append(","); 
       } 
       string arrayUsersPowerShell = arrayUsers.ToString(); 
and then : 

using (PowerShell powerShellInstance = PowerShell.Create()) 
       { 
powerShellInstance.AddScript("$d = get-date; " + 
         "$arrayUsers = @(" + arrayUsersPowerShell + "); " + 
         "$d | Out-String; $arrayUsers[0][1]"); 
... 
Collection<PSObject> PSOutput = powerShellInstance.Invoke(); 
... 
} 

因此,我們可以構建陣列正確

相關問題