如何在 Windows 中创建一个 For 循环并在 For-Each 运算符周围插入单引号

How Can I Make A ForLoop in Windows and Insert with Single Quotes Around the For-Each Operator

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

主要命令:

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

以上命令为我提供了所有域组的列表。 我想获取此列表并遍历它以显示组成员身份。

使用 ForEach-Object 语句:

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

这不起作用,因为我无法使用单引号将 group_name 字符串 return 编辑到 $_ 中。相反,我需要 return 围绕 $_ 运算符的单引号,以便它 return 是 'group_name' 中的 group_name

如何在 group_name 周围为 return 加上单引号?

声明的问题:

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

是否$_指的是一个对象属性是NameGet-ADGroupMember不知道如何处理所述对象,如果相反,您指的是对象的 属性 值 它应该可以正常工作:

... | ForEach-Object { Get-ADGroupMember -Identity $_.Name }

重要的是要注意,在这种情况下,根本不需要 Select-Object,它只会减慢您的脚本速度,此外,如果您想找到 所有具有嵌套的组group as member 您可以使用过滤 cmdlet,例如 Where-Object:

Get-ADGroup -Filter * | Where-Object {
    (Get-ADGroupMember $_.DistinguishedName).where({ $_.ObjectClass -eq 'group' }, 'First')
}