PowerShell 技能连载 - 创建一个清单式的摘要对象
从 PowerShell 3 开始,PSCustomObject
可以将从其他地方收集的有用信息方便地合并进来。以下例子从不同的 WMI 类获取各种信息,并且输出为一个清单。该清单可以传递给其它命令,也可以直接使用:
1 | # get information from this computer |
从 PowerShell 3 开始,PSCustomObject
可以将从其他地方收集的有用信息方便地合并进来。以下例子从不同的 WMI 类获取各种信息,并且输出为一个清单。该清单可以传递给其它命令,也可以直接使用:
1 | # get information from this computer |
当从 CSV 加载数据到 Excel 中时,我们无法指定格式。
1 | PS> Get-Quote |
1 | PS> Get-Quote -Topics men |
1 | PS> Get-Quote -Topics jewelry |
以下脚本首先加载 HTML 内容,然后使用正则表达式来搜集 HTML 中的引用。当然这只适用于原文有规律的情况。wikiquotes 的引用模式是这样的:
1 | <li><ul>Quote<ul><li>Author</li></ul></li> |
所以以下代码将搜索这个模式,然后清理结构中找到的文本:需要移除 HTML 标签,例如链接,多个空格需要合并为一个空格(通过嵌套函数 Remove-Tag
)。
以下是代码:
1 | function Get-Quote ($Topics='Computer', $Count=1) |
Ole Morten Didriksen 发现了一些 API 调用可以启用音量控制 (https://gist.github.com/oledid)。通过这种方法,用 PowerShell 控制音量静音、取消静音、设置音量就很容易了:
1 | #requires -Version 2.0 |
当您在 PowerShell 中输入 h
命令,您可以看到在这个会话中输入的命令历史。受到 Pratek Singh 的启发 Powershell Get-History+ – Geekeefy,以下是一个灵活的 h+
命令,它能够在网格界面窗口中显示历史纪录,并且支持选定历史记录。按住 CTRL
键可以选择多个项目。
Pratek 通过 Invoke-Expression
命令执行所有选中的项目。这可能有风险,并且它并不显示命令,所以您不知道执行了什么命令。所以在 h+
中,我们把选中的项目复制到剪贴板中。这样,您可以将内容粘贴到需要的地方:可以粘贴到文件中,或是将它们粘贴回 PowerShell 来执行。将它们粘贴回 PowerShell 中之后,您还有机会查看这些命令,然后按 ENTER
键执行这些命令。
1 | Function h+ |
只需要将 h+ 函数加入您的配置文件脚本中(可以通过 $profile
找到路径)这样它随时可以拿来使用。
Prateek Singh 贡献了一个干净的,CSV 格式的的 MAC 厂商列表。这个列表可以在他的博客 Get-MACVendor using Powershell – Geekeefy 找到。在通过 MAC 地址确定网络设备的厂商时,这个列表十分有用。
您可以用 PowerShell 方便地将它下载到计算机中:
1 | #requires -Version 3.0 |
有些时候您可能需要创建非表格形式的,个性化的报表。
对于这种情况, PowerShell 可以连接到 Excel 的对象模型。通过这种方法,您可以操作独立的单元格,读写它们的内容,甚至对它们进行格式化。这给你最大的灵活度。然而,它的缺点是需要大量的编码,因为您需要人工操作每一个单元格。并且,通过 .NET 操作 COM 对象相对比较慢。
以下是起步的代码。它展示了如何连接到 Excel,存取独立的单元格,并应用格式设置:
1 | #requires -Version 2.0 |
当从 CSV 中导入数据到 Excel 时,您无法指定格式,包括字体和颜色等。从 HTML 数据中导入 Excel 则可以包含格式。以下是一个演示创建一个带格式的彩色 Excel 报告是多么容易的例子,假设报表中包含一张表格:
1 | #requires -Version 2.0 |
用 PowerShell 创建一个最简单的 Excel 报表只需要几行代码:将结果导出为 CSV 文件,然后将它作为参数启动 Excel:
1 | #requires -Version 2.0 |
有一些需要注意的事项:
-UseCulture
来使用注册表中设置的分隔符即可。在前一个技能中我们开始将 PowerShell 的结果转换为 HTML 报告。报告内容目前一切正常。要使人加深印象,结果需要做一些设计改进。以下是我们之前的成果:
1 | #requires -Version 2.0 |
要改进它的样式,可以对报告应用 HTML CSS 样式(层叠样式表)。CSS 决定了报告中所有 HTML 元素的样式细节。您可以在 -Head
参数中插入一个 CSS 样式表:
1 | #requires -Version 2.0 |
应用一个样式表之后,报告会一下子变得清新现代起来。
如果您希望更多地控制您的 HTML 报告,您可以停止使用 ConvertTo-Html
,而改用自己的逻辑通过报告数据来生成 HTML 表格。不过这超出了我们快速技能的范畴。
在之前的技能中我们开始将 PowerShell 结果转为 HTML 报告。现在报告的结果接近完成了。我们只需要对某些列标题进行润色和重命名即可。这是上一次的脚本:
1 | #requires -Version 2.0 |
要重命名列标题,请使用之前同样的策略将非字符串内容转换为字符串内容:使用计算属性。所以如果您想将 TimeGenerated
重命名为 Time
,那么可以这样做:
1 | #requires -Version 2.0 |