powershell - PowerShell 是否在后台构建哈希表以进行输出?
问题描述
我试图了解对象和哈希表在 Powershell 中是如何工作的。我知道这两者之间的区别,但我对一个问题有点困惑。如果我运行 Get-Service 以得到包含名称、显示名称等的输出,这是否意味着这是 Powershell 在后台构建的 Hashtable?我知道哈希表是键=值,但是当我从 get-service 获得输出时,它超过了 2 列。我只是对我在 Powershell 中看到的内容有点困惑 :)
解决方案
我喜欢这样解释:
- 在 PowerShell 中,一切都是对象。
- 哈希表是对象。
- 字符串是对象。
- 整数是对象。
- 数组是对象。
- 对象数组是对象
- 等等
- 在 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
做一些过滤等。这一切都把我们引向了问题的症结所在:
- 你如何形象化一个物体?
运行时Get-Service
,它会输出一个对象,并将其交给 PowerShell 的控制台。您所看到的是 PowerShell 控制台对类型对象应该是什么样子的解释。Object[]
类似地,哈希表和 2 列数组可以解释和显示相同,即使在后端,它们是不同类型的对象。
推荐阅读
- go - 为什么接口指针分配这么难?
- python - 从多个网页中提取元素
- css - CSS在点击时停止缓慢旋转div
- asp.net-core - 存在 cookie 时 IdentityServer4 用户会话已过期
- reactjs - JavaScript React,我无法读取文本文件并指定名称
- c# - 为什么我的 FileStream.Read 只输出零而不读取文件
- php - 限制 laravel 日志文件大小
- typescript - 创建解析程序以通过 AppSync 更新 dynamoDB 项目 - AWS CDK
- python - 如何在 Django 中使用序列化程序返回自定义的非模型值?
- javascript - Jasmine spyOnProperty 在第二次通话中不起作用