无法完全正确了解PowerShell管道语法

时间:2019-09-24 16:30:05

标签: powershell syntax

我想运行一个简单的脚本,该脚本显示Active Directory中的所有特权用户。我已经接近了,但是语法不太正确。我认为代码很容易解释:

'Domain Admins', 'Administrators', 'Enterprise Admins', 'Schema Admins', 'Server Operators', 'Backup Operators' | 
    ForEach-Object {$groupName = $_ Get-ADGroupMember -Identity $_ -Recursive |
    Get-ADUser | Select-Object Name, DisplayName, @{n='GroupName';e={ $groupName }}} 

在PowerShell ISE中,它强调了Get-ADGroupMember并指出:“表达式或语句中出现意外的标记'Get-ADGroupMember'。”

我在做什么错了?

预先感谢

-吉姆

附录-我忽略但又未在问题中提出的另一个问题:Get-ADUser似乎没有返回DisplayName属性,因此我们必须明确要求它:

 'Domain Admins', 'Administrators', 'Enterprise Admins', 'Schema Admins', 'Server Operators', 'Backup Operators' |
    ForEach-Object {$groupName = $_; Get-ADGroupMember -Identity $_ -Recursive | Get-ADUser -Properties Name, DisplayName |
    Select-Object Name, DisplayName, @{n='GroupName';e={ $groupName }}}

1 个答案:

答案 0 :(得分:3)

您忘记了用分号作为语句分隔符:

'Domain Admins', 'Administrators', 'Enterprise Admins', 'Schema Admins', 'Server Operators', 'Backup Operators' | 
    ForEach-Object {$groupName = $_; Get-ADGroupMember -Identity $_ -Recursive |
    Get-ADUser | Select-Object Name, DisplayName, @{n='GroupName';e={ $groupName }}} 

请注意$groupname = $_之后的分号。当您在脚本块中组合多个语句并且不使用换行符将它们分开时,您需要使用分号来分隔它们。