如何在Windows中创建ForLoop并在For-Each操作符周围插入单引号?



所以我有一个奇怪的任务,我正试图清理我的AD会员资格,我需要为任务写一个for循环。我们有分配给一个组的组,我们正试图从组中删除这些组,因为不支持嵌套组。我有一个很好的for循环,目前工作:

主命令:

Get-ADGroup -Filter * | Select-Object -Property Name

上面的命令给了我一个所有域组的列表。我想使用这个列表并遍历它,以显示组成员关系。

With ForEach-Object语句:

Get-ADGroup -Filter * | Select-Object -Property Name | ForEach-Object { Get-ADGroupMember -Identity $_}

这不起作用,因为我不能用单引号将group_name字符串返回到$_中。相反,我需要在$_操作符周围返回一个单引号,以便它返回'group_name'中的group_name

如何使单引号在group_name周围返回?

语句的问题:

Get-ADGroup -Filter * | Select-Object -Property Name | ForEach-Object { Get-ADGroupMember -Identity $_ }

是否$_指的对象的属性是Name并且Get-ADGroupMember不知道如何处理该对象,如果相反,您引用的是对象的属性值它应该可以正常工作:

... | ForEach-Object { Get-ADGroupMember -Identity $_.Name }
重要的是要注意,在这种情况下,Select-Object根本不需要,只会减慢您的脚本速度,而且,如果您想找到所有具有嵌套组作为成员的组您可以使用像Where-Object: 这样的过滤cmdlet
Get-ADGroup -Filter * | Where-Object {
(Get-ADGroupMember $_.DistinguishedName).where({ $_.ObjectClass -eq 'group' }, 'First')
}

最新更新