我尝试将散列表从C#传递给PowerShell作为脚本参数失败。我在PowerShell中执行时脚本和参数正常工作,所以我假设我的错误是在C#端。
在C#中,我只是使用Command.Parameters.Add(),就像我对任何其他参数一样。我传递给脚本的所有其他参数都被正确接收,但哈希表为空。
在C#方面,我尝试过使用Hashtable对象和Dictionary< string,string>对象,但似乎都不起作用。在这两种情况下,我都确认该对象已实例化,并且在传递给PowerShell之前具有值。我觉得有一种非常明显的解决方案让我盯着我看,但它并没有点击。
答案 0 :(得分:2)
您只能将字符串作为命令行参数传递。
我不知道是否有限制,但如果没有限制,则需要将哈希表转换为字符串并在PowerShell脚本中解析它。
答案 1 :(得分:2)
使用this answer和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( );
它显示1
中的$ht.Count
,以及枚举哈希表值的a = b
。