首页 > 解决方案 > PowerShell 是否在后台构建哈希表以进行输出?

问题描述

我试图了解对象和哈希表在 Powershell 中是如何工作的。我知道这两者之间的区别,但我对一个问题有点困惑。如果我运行 Get-Service 以得到包含名称、显示名称等的输出,这是否意味着这是 Powershell 在后台构建的 Hashtable?我知道哈希表是键=值,但是当我从 get-service 获得输出时,它超过了 2 列。我只是对我在 Powershell 中看到的内容有点困惑 :)

标签: powershell

解决方案


我喜欢这样解释:

  1. 在 PowerShell 中,一切都是对象。
  • 哈希表是对象。
  • 字符串是对象。
  • 整数是对象。
  • 数组是对象。
  • 对象数组是对象
  • 等等
  1. 在 PowerShell 中,函数和 Cmdlts 与对象交互并返回对象。

函数和 Cmdlet,如Get-Service,返回一个对象。例如。跑:

$Services = Get-Service
$Services.GetType()


IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

在这里您可以看到这$Services是一个类型Object[](对象数组)。由于 CmdletGet-Service输出一个对象,因此我们可以通过管道将其传递给另一个函数。IE

$Services = Get-Service
$Services | Export-Csv -Path 'C:\services.csv'

这会将对象输出到 CSV 文件。你可以做进一步的管道,比如添加Where-Object做一些过滤等。这一切都把我们引向了问题的症结所在:

  1. 你如何形象化一个物体?

运行时Get-Service,它会输出一个对象,并将其交给 PowerShell 的控制台。您所看到的是 PowerShell 控制台对类型对象应该是什么样子的解释。Object[]类似地,哈希表和 2 列数组可以解释和显示相同,即使在后端,它们是不同类型的对象。


推荐阅读