PowerShell 技能连载 - 查找嵌套的 Active Directory 成员(第 2 部分)
在前一个技能中我们演示了如何使用 ActiveDirectory 模块中的 cmdlet 来查找某个 Active Directory 用户所有直接和间接的成员。
如果您没有权限操作 ActiveDirectory 模块,PowerShell 也可以使用纯 .NET 方法来获取成员:
1 | function Get-NestedGroupMember |
在前一个技能中我们演示了如何使用 ActiveDirectory 模块中的 cmdlet 来查找某个 Active Directory 用户所有直接和间接的成员。
如果您没有权限操作 ActiveDirectory 模块,PowerShell 也可以使用纯 .NET 方法来获取成员:
1 | function Get-NestedGroupMember |
ActiveDirectory
模块(免费的 RSAT 工具的一部分)提供许多 AD cmdlet。其中一个可以读取整个直接组的成员,例如:
1 | PS> Get-ADPrincipalGroupMembership -Identity $env:username |
然而,这个 cmdlet 无法列出间接组的成员,而且它还有一个 bug:在某些场景下,它只是报告“未知错误”。
这是一个简单的读取所有组成员(包括间接成员)的替代方案:
1 | function Get-NestedGroupMember |
这是一个使用 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 |