powershell - Powershell - 拆分/组织属性的方法?
问题描述
我正在尝试了解我们的 Active Directory 用户以及他们所属的组。
来自 Java 背景,我想我可以使用嵌套的 for 循环为用户迭代一次,然后为组迭代一次,分别管道输出。在对其进行测试后,我意识到我遇到了一个问题,即由于 Select cmdlet 格式化值的方式,组无法正确显示。我在 Powershell 中引用了 Split 属性值,但我认为这不是我正在寻找的,因为我需要一种方法来识别用户组关系在下面的代码中,我有 1 个循环来测试值。
$user = @(Get-ADUser -Filter * -Properties * | Select DisplayName)
for ($i = 0; $i -le ($user.length - 1); $i += 1) {
$group=@(Get-ADUser -Filter "Name -eq '$user[$i]'" | Get-ADPrincipalGroupMembership | Select name)
echo $user[$i]
echo $group[$i]
}
我使用 Identity 参数对一位用户进行了测试:
$group=Get-ADUser -Identity "First Name Last Name" | 获取 ADPrincipalGroupMembership | 选择名称
这给了我这个输出:
显示名称
.....................
用户 1
<#缺少组#>
用户 2
用户 3...
我注意到用户之间的空格,该组的值应该是。我做了一些研究并相信 Select-object cmdlet 是问题所在;我为用户使用 Select DisplayName 并为组使用 Select name 但 PowerShell 无法解析两者,因为它们占用同一列,所以我假设这是主要问题。我想要的应该与此类似:
显示名称
.....................
用户 1
第 1 组
第 2 组
第 3 组
用户 2
第 1 组
第 2 组
第 3 组
用户 3
...
也许我一直在错误地处理这个问题,但是有没有办法解决这个问题?
解决方案
使用Get-ADUser
两次会降低你的效率。此外,只需要 DisplayName 时获取所有属性也会降低效率。尝试这样的事情:
$Users = Get-ADUser -Filter * -Properties DisplayName
foreach ($User in $Users) {
$User.DisplayName
$Groups = $User | Get-ADPrincipalGroupMembership
$Groups.Name
}
我认为您遇到问题的部分原因是echo $group[$i]
. 如果用户的组成员资格与$i
.
推荐阅读
- apache-spark - 如何使用 spark 过滤流数据并将其从 apache flume 转换为 rdd/data freame 以将其写入表
- c++ - 谷歌云 TPU 支持 Tensorflow C++ API
- angular - Angular CLI - 从优化中排除包
- mysql - 每天从 SQL Server 到 Mysql 的选定对象的数据传输?
- flutter - 如何获得泛型类型?
- python - 在python 3中将十六进制转换为数组内的bin
- c++ - ##__VA_ARGS__ 是什么意思?
- php - Laravel 5.7 检查电子邮件是否经过验证
- php - 如何在 Mac 上用 php7.3 编译 v8js?
- google-cloud-dataflow - 从模板启动时,数据流作业不会从 PubSub 消耗