【问题标题】:Passing a hashtable from C# to PowerShell将哈希表从 C# 传递到 PowerShell
【发布时间】:2013-09-17 00:23:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# powershell hashtable


    【解决方案1】:

    使用this answerCommand.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.Count1,以及来自枚举散列表值的a = b

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我担心可能是这种情况。我能够通过发送“key=value”组合的字符串数组然后使用 string.split(=) 将所有内容正确放入哈希表来使其工作。谢谢。
      • 如果您使用 ps.Commands.AddParameter(string, object) 传递参数,那么您至少可以传递数组、字符串和 int 类型。不只是字符串
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 2021-05-29
      • 1970-01-01
      相关资源
      最近更新 更多