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

2024-02-11

如何将哈希表转换为字符串数组? 假设 $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 是单个字符串。我尝试了很多其他方法,但除了手动循环之外,没有任何效果,我真的不想这样做。


大卫·麦金托什自己的回答 https://stackoverflow.com/a/21413763/45375效果很好,但应该注意的是,结果数组的元素对应于all默认输出的行,其中包括:

  • 空的前导行和尾随行
  • 两个标题行(包含列名称的行和分隔行)

Out-String只需将您通常在控制台(终端)中看到的内容发送到字符串,默认情况下为single字符串,并与-Stream as an array字符串(行)。

以下是 David 命令的一个变体,它删除了标题和空行:

[string[]] $l_array = ($l_table | Out-String -Stream) -ne '' | select -Skip 2

这个答案的其余部分显示how to 控制细节获得的字符串表示形式;它使用 PS v3+ 语法和内置别名% for ForEach-Object为简洁起见。

Note: For clarity, the sample input hashtable is called $ht (not $l_table) in the following examples; the PSv4+ .ForEach() variants perform better.

  • Get all keys作为字符串数组:

      [string[]] $ht.Keys 
    
  • Get all values作为字符串数组:

      [string[]] $ht.Values
    
  • Get a 自定义表示 of 键值对,格式为<key>=<value>;注意.GetEnumerator()需要发送键值对单独地通过管道;默认情况下,PowerShell 传递一个哈希表作为一个整体:

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

请注意,虽然[string] / [string[]]演员,这也适用于隐含地在字符串插值期间(内部"...",一个可扩展的字符串),可以很好地配合原始 https://learn.microsoft.com/en-us/dotnet/api/system.type.isprimitive.NET 类型(以及其他数字类型,例如[decimal] and [bigint]);一般来说,类型只会打印完整的内容类型名称,除非他们的.ToString()方法被显式重写以返回更有意义的自定义表示(这是原始类型所做的事情,并且只有somePowerShell cmdlet 返回的非基本类型)。

另请注意,在可扩展字符串内使用数组(类似数据结构)会扩展到其元素与(很少使用)的值的(字符串化)元素串联$OFS首选项变量,默认为空格字符。 (例如。,$a='one', 'two'; "$a"扩展到'one two';也就是说,它相当于"$([string[]] $a -join ' ')" - see 这个答案 https://stackoverflow.com/a/40445998/45375欲了解更多信息可扩展字符串(字符串插值)在 PowerShell 中。

一个简单的选择示例property一个值来在字符串中表示它:

# 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)" }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将哈希表转换为字符串数组 的相关文章

  • () 和 $() 之间的区别[重复]

    这个问题在这里已经有答案了 有什么区别 Write Host Get Date just paren and Write Host Get Date dollar paren 括号内的内容可以是任何内容 仅举一个简单的示例 两者有什么区别吗
  • Powershell 命令未发现异常

    我有以下 powershell 脚本 它使用一个函数并且可以在 ISE 中正常运行 Get ComputerSessions Computer localhost Functions Function Get ComputerSession
  • 如何将 .bat 文件中的变量获取到 PowerShell 脚本中?

    我正在用 PowerShell 替换 bat 脚本的部分内容 批处理文件的配置是通过以下文件完成的set适当的环境变量 我正在寻找一种方法将这些变量值加载到 ps1脚本 无需修改 bat文件 因为它们也在其他地方使用 一个例子 bat看起来
  • 获取文件夹及其子文件夹中最长文件路径的长度

    我正在寻找一个可以从命令行 批处理 PowerShell 运行的脚本 该脚本将遍历文件夹及其子文件夹 并返回一个数字 该数字是最长文件路径的长度 我已经看到了一些批处理和 PowerShell 脚本 例如 如何在 Windows 中查找路径
  • 如何从 PowerShell 指定应用程序池身份用户和密码

    我在自动化 Web 应用程序设置和使用应用程序池标识适当配置 IIS 方面遇到了很多困难 我在用 PowerShell 编写的 Web 应用程序部署脚本中执行此操作 我的要求是我需要 PowerShell 脚本将应用程序池身份用户设置为特定
  • 替换 CSV 文件中的引号和特殊字符的一些难题

    我在处理一些需要清理并加载到数据库中的 CSV 文件时遇到了一些难题 我相当擅长使用 PowerShell 但不擅长正则表达式和 csv 列操作 这是我遇到的问题 我正在使用的 CSV 文件中有一个 注释 字段 可以包含各种不同的字符 主要
  • PowerShell 脚本 ffmpeg

    作为一名优秀的 Windows 系统管理员 我终于开始学习 PowerShell 话虽这么说 我不知道我在做什么 惊讶 惊讶 我认为远离生产环境 在家里使用 PowerShell 对我来说将是一次很好的学习经历 最近 我开始使用 FFMPE
  • 使用 Powershell SQL 将数据提取到 Excel

    我想使用 powershell 将数据从 SQL Server 提取到新的 excel 文件 对于小型数据集 我的代码可以工作 但某些表的行数超过 100 000 行 这将需要很长时间 我不在 SQl 服务器中使用该实用程序的原因是因为我想
  • 抑制数组列表添加方法管道输出

    我正在使用数组列表来构建日志项序列以供稍后记录 工作起来很不错 但是 Add 方法将当前索引发送到管道 我可以通过将其发送到 null 来解决这个问题 如下所示 strings Add junk gt null 但我想知道是否有某种机制可以
  • 如何使用卸载路径卸载 MSI

    我正在尝试获取一组应用程序的卸载路径并卸载它们 到目前为止 我得到了卸载路径列表 但我很难真正卸载这些程序 到目前为止我的代码是 app msi1 msi2 msi3 msi4 Regpath HKLM Software Microsoft
  • 具有多个范围的 Powershell 整数参数验证

    我知道您可以声明一个仅接受特定范围内的值的整数参数 Parameter ValidateRange 1024 66535 Port 是否可以验证多个范围的参数输入 例如 假设我希望允许端口输入为 1 到 80 135 到 445 以及 10
  • PowerShell:检索AppPool中的应用程序数量

    如何通过 PowerShell 命令检索与特定 IIS AppPool 关联的应用程序数量 我们可以使用以下命令手动查看关联的应用程序 Get Item IIS AppPools AppPoolName 但是 如果我们想要手动选择Appli
  • 使用 init.ps1 和 nuget 将文件复制到解决方案文件夹

    我在使用 nuget 包的 init ps1 中的 ps 脚本时遇到问题 我试图在安装包时创建一个解决方案文件夹 然后将 dll pdbs 复制到此文件夹 并删除项目中包安装的源 dll pdbs 我能够创建解决方案文件夹 但将文件从 co
  • 如何并行执行PowerShell函数多次?

    我不确定是否需要将其称为多线程 基于作业或异步的需求 但基本上我有一个 Powershell 脚本函数 它需要多个参数 并且我需要使用不同的参数多次调用它并让它们运行在平行下 目前 我这样调用该函数 Execute param1 param
  • EWS - 访问共享日历项目/约会

    我正在尝试获取共享日历的所有项目 我已关注EWS 访问所有共享日历 https stackoverflow com questions 23766747 ews access all shared calendars 23773834 23
  • Powershell,如何添加共享文件夹的权限

    我有以下创建共享文件夹的代码 if Test Path c myFolder New Item Path c myFolder ItemType Directory If GET WMIOBJECT Win32 Share Filter N
  • 如何使用PowerShell批量调用Update-Database

    我们使用 Azure 弹性池生成多个客户端数据库和一个引用客户端数据库的主数据库 我们已经拥有多个数据库 并且正在开发新版本的代码 我们使用 EF6 代码优先 当我们更改模型 添加属性 时 我们创建迁移文件并需要调用Update Datab
  • VSTS 任务组 Powershell 参数

    我使用具有四个参数的 Azure Powershell 任务内联脚本创建了 VSTS 任务组 我已将此任务组添加到发布定义并配置参数 当我尝试释放时失败并出现以下错误 2018 03 23T10 28 42 2811600Z 错误 在 C
  • Powershell从Linux客户端连接到Windows远程

    我正在尝试从我的 Linux 工作站远程连接到 Windows 计算机 我在 Arch Linux 工作站上安装了 powershell 目前正在尝试连接到主机 在主机上 Enable PSRemoting 然后允许所有主机Set Item
  • 更改每个命令的 powershell 标题

    我想在窗口标题中显示我在 powershell 中输入的最后一个命令 以便更容易找到 目前我有 C gt host ui rawui WindowTitle 但这只是获取相对于我输入时的上一个命令 所以如果我有 C gt cd C gt h

随机推荐