gpt4 book ai didi

powershell - 将哈希表转换为字符串数组

转载 作者:行者123 更新时间:2023-12-03 09:30:35 24 4
gpt4 key购买 nike

如何将哈希表转换为字符串数组?
假设$ l_table是一个哈希表。如果我尝试

$l_array = $l_table | format-table

那么$ l_array是一个数组,但是“FormatEntryData”对象的数组。
如果我做
[string[]]$l_array = $l_table | format-table

那么$ l_array是一个字符串数组,但是这些字符串都是“Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData”。如果我尝试
$l_array = $l_table | out-string

那么$ l_array是单个字符串。我已经尝试了许多其他方法,但是除了手动循环(我真的不想做)之外,没有任何效果。

最佳答案

David I. McIntosh's own answer运作良好,但应注意,结果数组的元素对应于默认输出的所有行,其中包括:

  • 空的开头和结尾行
  • 两个标题行(具有列名的行和分隔符行)
  • Out-String只是将您通常在控制台(终端)中看到的内容发送给一个字符串,默认情况下为单个字符串,并且 -Stream作为字符串数组。
    这是David命令的变体,它删除了 header 和空行:
    [string[]] $l_array = ($l_table | Out-String -Stream) -ne '' | select -Skip 2

    该答案的其余部分显示 如何控制获得的字符串表示形式的细节;为了简洁起见,它使用PS v3 +语法和内置别名 %表示 ForEach-Object
    注意:为了清楚起见,在下面的示例中,示例输入哈希表称为 $ht(不是 $l_table)。 PSv4 + .ForEach()变体的效果更好。
  • 获取所有作为字符串数组:
      $ht.Keys | % ToString # or (PSv4+): $ht.Keys.ForEach('ToString')
  • 获取所有作为字符串数组:
      $ht.Values | % ToString # or (PSv4+): $ht.Values.ForEach('ToString')
  • <key>=<value>格式获取键值对的自定义表示;请注意,需要.GetEnumerator()才能通过管道分别发送键值对;默认情况下,PowerShell作为一个整体传递哈希表:
      $ht.GetEnumerator() | % { "$($_.Name)=$($_.Value)" }

    # or (PSv4+):
    $ht.GetEnumerator().ForEach({ "$($_.Name)=$($_.Value)" })

  • 请注意,虽然 .ToString()(在字符串插值期间也隐式应用)(在 "..."内部,可扩展字符串),但与 primitive .NET类型(以及其他数字类型,例如 [decimal][bigint])配合使用时效果很好;通常,类型将只打印其完整类型名称,除非显式覆盖了它们的 .ToString()方法以返回更有意义的自定义表示(这是原始类型的作用,并且只有某些PowerShell返回的非原始类型才是这种情况) cmdlet)。
    还要注意,在可扩展字符串中使用数组(类似数据结构)会将其元素与 $OFS首选项变量的值(默认为空格char)串联(字符串化)。 (例如 $a='one', 'two'; "$a"扩展为 'one two')-有关PowerShell中可扩展字符串(字符串插值)的更多信息,请参见 this answer
    选择一个值的属性以在字符串中表示它的简单示例:
    # Sample hashtable containing a value of a non-built-in type,
    # [System.Diagnostics.Process]
    $ht = @{ one = 1; two = Get-Process -ID $PID }

    # Use the `.Path` property to represent the value.
    $ht.GetEnumerator() | % { "$($_.Name)=$($_.Value.Path)" }

    关于powershell - 将哈希表转换为字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21413483/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com