PowerShell 技能连载 - 进度条定时器
这是一个使用 PowerShell 进度条的简单例子。这段代码显示一个休息倒计时的进度条。只需要调整您希望暂停的秒数即可。您可以使用这个例子在班级或会议中显示休息时间:
1 | $seconds = 60 |
这是一个使用 PowerShell 进度条的简单例子。这段代码显示一个休息倒计时的进度条。只需要调整您希望暂停的秒数即可。您可以使用这个例子在班级或会议中显示休息时间:
1 | $seconds = 60 |
Iain Brighton 创建了一个名为 “PScribo” 的免费的 PowerShell 模块,可以快速地创建文本、HTML 或 Word 格式的文档和报告。
要使用这个模块,只需要运行这段代码:
1 | # https://github.com/iainbrighton/PScribo |
在前一个技能中,我们演示了如何通过将对象转换为纯文本的方式,将结果从 cmdlet 添加到文本报告:
1 | # https://github.com/iainbrighton/PScribo |
这是很直接的方法,但是比较土。如果您希望向复杂的表格添加对象结果,请试试这种方法:
1 | # https://github.com/iainbrighton/PScribo |
它的基本思想史为每个对象属性创建新的对象,然后以表格的方式显示它们。这段代码显示 BIOS 信息的详细报告。
Iain Brighton 创建了一个名为 “PScribo” 的免费的 PowerShell 模块,可以快速地创建文本、HTML 或 Word 格式的文档和报告。
要使用这个模块,只需要运行这条命令:
1 | Install-Module -Name PScribo -Scope CurrentUser -Force |
再之前的技能中,我们介绍了如何生成动态的表格。今天,我们来学习如何根据特定的条件,例如配置错误,高亮某个单元格。
要实现这个目的,我们使用 Set-Style
将格式应用到独立的属性上。以下示例代码选择所有 StartType
的值为 Automatic
但 Status
的值是 Stopped
的对象,并将 HighlightedService
应用在 Status
属性上:
1 | # https://github.com/iainbrighton/PScribo |
Iain Brighton 创建了一个名为 “PScribo” 的免费的 PowerShell 模块,可以快速地创建文本、HTML 或 Word 格式的文档和报告。
要使用这个模块,只需要运行这条命令:
1 | Install-Module -Name PScribo -Scope CurrentUser -Force |
在前一个技能中,我们介绍了如何生成动态的表格。今天,我们将介绍调整表格和显示任意数据是多么容易。我们从前一个示例中取出服务列表:
1 | # https://github.com/iainbrighton/PScribo |
只需要做少许调整,示例代码将返回所有 ad 用户(假设您安装了 ActiveDirectory
模块并且能操作 AD):
1 | # https://github.com/iainbrighton/PScribo |
Iain Brighton 创建了一个名为 “PScribo” 的免费的 PowerShell 模块,可以快速地创建文本、HTML 或 Word 格式的文档和报告。
要使用这个模块,只需要运行这条命令:
1 | Install-Module -Name PScribo -Scope CurrentUser -Force |
今天,我们将生成一个包含动态表格内容的文档:
1 | # https://github.com/iainbrighton/PScribo |
当您运行这段代码时,它生成三个名为 ServiceReport.docx/html/txt 的文件。如您所见,该报告包含表格形式的服务列表。
Iain Brighton 创建了一个名为 “PScribo” 的免费的 PowerShell 模块,可以快速地创建文本、HTML 或 Word 格式的文档和报告。
要使用这个模块,只需要运行这条命令:
1 | Install-Module -Name PScribo -Scope CurrentUser -Force |
下一步,您可以类似这样生成简单的文档:
1 | # https://github.com/iainbrighton/PScribo |
以下是一个在一行代码中交换变量内容的快速技能:
1 | $a = 1 |
当一个函数返回多于四个属性时,PowerShell 将输出结果格式化为列表,否则格式化为表格。在您学习新的方法来影响这种行为之前,请自己验证一下。以下函数返回一个多于 6 个属性的对象:
1 | function Get-TestData |
结果是以表格形式呈现:
1 | PS> Get-TestData |
当移除掉一些属性,限制属性个数为 4 个或更少时,PowerShell 输出一个表格:
1 | PS> Get-TestData |
通常,表格的形式比较容易阅读,特别是有多个数据集的时候。当您得到一个 4 个或更少属性的表格时,您可能不是始终希望返回值只有 4 个属性。所以为什么不像类似 cmdlet 一样处理它呢?
Cmdlet 默认情况下只显示属性的一部分:
1 | PS> Get-Service | Select-Object -First 1 |
使用 Select-Object
可以显示地获得所有属性的列表:
1 | PS> Get-Service | Select-Object -First 1 -Property * |
显然,有第一公民和第二公民之分。在您自己的函数中,您可以类似这样定义第一公民:
1 | function Get-TestData |
现在,您的函数的行为类似 cmdlet,而且您没有定义多于 4 个一等公民,所以缺省情况下得到一个表格的形式:
1 | PS> Get-TestData |
如果一个 PowerShell 函数需要返回多于一类信息,请确保将这些信息集中到一个富对象中。最简单的实现方式是创建一个类似 [PSCustomObject]@{}
这样的自定义对象:
1 | function Get-TestData |
自定义对象的核心是一个哈希表:每个哈希表键将会转换为一个属性。这个方式的好处是您可以使用哈希表中的变量甚至命令,所以这样要收集您想返回的所有信息,将它合并为一个自描述的对象很容易:
1 | PS> Get-TestData |
默认情况下,当一个 PowerShell 函数退出时,它将“忘记”所有的内部变量。然而,有一种办法可以创建持久的内部变量。以下是实现方法:
1 | # create a script block with internal variables |
这段代码创建一个包含内部变量的脚本块。当您多次运行这个脚本块时,计数器会累加:
1 | PS> & $c |
然而,脚本内的 $a
变量的作用域既不是 global
也不是 scriptglobal
。它的作用域只在脚本块的内部:
1 | PS> $a |
要将脚本块转换为函数,请加上这段代码:
1 | PS> Set-Item -Path function:Test-Function -Value $c |