簡體   English   中英

將哈希表從C#傳遞到PowerShell

[英]Passing a hashtable from C# to PowerShell

我嘗試將哈希表從C#作為腳本參數傳遞給PowerShell,但未成功。 當我在PowerShell中執行時,腳本和參數可以正常工作,因此我假設我的錯誤在C#端。

在C#中,就像在其他任何參數中一樣,我只是簡單地使用Command.Parameters.Add()。 我傳遞給腳本的所有其他參數都可以正確接收,但哈希表為null。

從C#方面,我嘗試同時使用Hashtable對象和Dictionary <string,string>對象,但兩者似乎都不起作用。 在這兩種情況下,我都已確認對象已實例化,並且在傳遞給PowerShell之前具有值。 我覺得有一個非常明顯的解決方案使我盯着臉上,但這只是沒有點擊。

您只能將字符串作為命令行參數傳遞。

我不知道是否有限制,但是如果沒有限制,則需要將哈希表轉換為字符串並在PowerShell腳本中進行解析。

使用此答案Command.Parameters.Add( string, object )方法重載,我能夠將哈希表傳遞給腳本。 這是測試代碼:

string script = @"
param( $ht )

Write-Host $ht.Count
$ht.GetEnumerator() | foreach { Write-Host $_.Key '=' $_.Value }
";

Command command = new Command( script, isScript: true );

var hashtable = new Hashtable { { "a", "b" } };
command.Parameters.Add( "ht", hashtable );

Pipeline pipeline = runspace.CreatePipeline( );
pipeline.Commands.Add( command );
pipeline.Invoke( );

它從$ht.Count顯示1 ,從枚舉哈希表值顯示a = b

暫無
暫無

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

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