![](/img/trans.png)
[英]Powershell C# Cmdlet with Hashtable/Dictionary parameters
[英]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.