4

我试图将 C# 中的哈希表作为脚本参数传递给 PowerShell,但未成功。当我在 PowerShell 中执行时,脚本和参数可以正常工作,所以我假设我的错误在 C# 端。

在 C# 中,我只是使用 Command.Parameters.Add(),就像对任何其他参数一样。我传递给脚本的所有其他参数都被正确接收,但哈希表为空。

在 C# 方面,我尝试使用 Hashtable 对象和 Dictionary<string, string> 对象,但似乎都不起作用。在这两种情况下,我都确认该对象已实例化并且在传递给 PowerShell 之前具有值。我觉得有一个非常明显的解决方案盯着我看,但它只是没有点击。

4

2 回答 2

5

使用这个答案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( );

它显示1from$ht.Counta = bfrom 枚举散列表值。

于 2013-09-16T23:59:20.690 回答
3

您只能将字符串作为命令行参数传递。

我不知道是否有限制,但如果没有,您需要将哈希表转换为字符串并在您的 PowerShell 脚本中解析它。

于 2013-09-12T14:41:24.647 回答