Powershell 如何以同步命令的形式运行Get-ADPrincipalGroupMembership?

Powershell 如何以同步命令的形式运行Get-ADPrincipalGroupMembership?,powershell,Powershell,我正在尝试运行一个脚本,从广告中获取用户信息。在提供员工ID后,脚本将获取所有用户的组并将其打印为列表。之后,它会获取更多属性,如SamAccountName、LockedOut等。然后它会检查用户是否是“eTips”组的成员 我的问题是,出于某种原因,脚本的输出并没有按照脚本编写的顺序显示 代码如下: $EmpID = Read-Host "Enter Employee ID" $ShowMemberOf = Read-Host "Want to see all the groups he m

我正在尝试运行一个脚本,从广告中获取用户信息。在提供员工ID后,脚本将获取所有用户的组并将其打印为列表。之后,它会获取更多属性,如SamAccountName、LockedOut等。然后它会检查用户是否是“eTips”组的成员

我的问题是,出于某种原因,脚本的输出并没有按照脚本编写的顺序显示

代码如下:

$EmpID = Read-Host "Enter Employee ID"
$ShowMemberOf = Read-Host "Want to see all the groups he members of (takes time...)? (y/n)"

if ($ShowMemberOf -eq "y" -or $ShowMemberOf -eq "yes") {
    $User = get-aduser -Filter {EmployeeID -like $EmpID} | Select-Object -ExpandProperty SamAccountName

    Write-Host "Group list:"
    Get-ADPrincipalGroupMembership $User | select name

    Write-Host "The rest of the user's info:"
    get-aduser -Filter {EmployeeID -like $EmpID} -Properties * | Select-Object SamAccountName, PasswordExpired,
    PasswordLastSet, OfficePhone, LockedOut, Enabled, CN

    $MemberOfEtips = get-aduser -Filter {EmployeeID -like $EmpID} -Properties MemberOf | Select-Object -ExpandProperty MemberOf | Select-String -Pattern "etips"
    if ($?) {
        write-host "Member of an eTips group"
    } 
    else {
        write-host "NOT member of eTips group"
    }

}

else {

    Write-Host "The rest of the user's info:"
    get-aduser -Filter {EmployeeID -like $EmpID} -Properties * | Select-Object SamAccountName, PasswordExpired,
    PasswordLastSet, OfficePhone, LockedOut, Enabled, CN

    $MemberOfEtips = get-aduser -Filter {EmployeeID -like $EmpID} -Properties MemberOf | Select-Object -ExpandProperty MemberOf | Select-String -Pattern "etips"
    if ($?) {
        "Member of an eTips group"
    } 
    else {
        "NOT member of eTips group"
    }
}
这是输出:

Enter Employee ID: 4449871
Want to see all the groups he members of (takes time...)? (y/n): y
Group list:

The rest of the user's info:

name                                 
----                                 
Domain Users                         
SMS_USERS                                                                   
dg_computingl            
ManagerUsers
eTips                    

Member of an eTips group
如您所见,即使“Get-ADPrincipalGroupMembership”cmdlet尚未完成,脚本仍将继续运行。因此,结果是我在“用户信息的其余部分”下获取组列表,而不是在“组列表:”下

第二个奇怪的是,正因为如此,它甚至没有运行这个部分:

get-aduser -Filter {EmployeeID -like $EmpID} -Properties * | Select-Object SamAccountName, PasswordExpired,
PasswordLastSet, OfficePhone, LockedOut, Enabled, CN
它只是跳转到检查用户是否属于eTips组的部分

请解释一下我做错了什么

  • 删除
    Write Host
    无论您在何处使用它,您使用的其他命令的行为都类似于
    Write Output
    ,这就是为什么顺序看起来很奇怪。只需将要输出的字符串放在它们自己的行上,以具有相同的行为和适当的显示

  • 第二个
    getaduser
    命令确实运行,但我想它根本不会产生任何输出,您应该单独检查它

  • 我宁愿对
    $memberofeips
    运行
    if
    ,而不是
    $?
    ,但这可能只是我不知道的模式

  • 默认情况下,大多数PowerShell cmdlet是同步的(存在特定的异常,如作业)

  • 删除
    Write Host
    无论您在何处使用它,您使用的其他命令的行为都类似于
    Write Output
    ,这就是为什么顺序看起来很奇怪。只需将要输出的字符串放在它们自己的行上,以具有相同的行为和适当的显示

  • 第二个
    getaduser
    命令确实运行,但我想它根本不会产生任何输出,您应该单独检查它

  • 我宁愿对
    $memberofeips
    运行
    if
    ,而不是
    $?
    ,但这可能只是我不知道的模式

  • 默认情况下,大多数PowerShell cmdlet是同步的(存在特定的异常,如作业)


  • 首先,谢谢你!删除
    写入主机
    解决了此问题。1。首先,谢谢你!删除
    写入主机
    解决了此问题。2.现在它运行并显示输出(在此之前,如果我单独运行它,它会显示输出)。3.
    $?
    保存最后一个输出并检查它是否正确(我在阅读了其他人的问题后使用了它)。我使用它是因为当我尝试
    if($memberofeips-eq$true)
    时,它不起作用。我猜这是因为
    $MemberOfEtips
    的值不是布尔值。4.我在想如果($memberofeips){#…}:)你的方法有效的话。所以不需要
    -eq$true
    ,很高兴知道这一点。再次感谢你!首先,谢谢你!删除
    写入主机
    解决了此问题。1。首先,谢谢你!删除
    写入主机
    解决了此问题。2.现在它运行并显示输出(在此之前,如果我单独运行它,它会显示输出)。3.
    $?
    保存最后一个输出并检查它是否正确(我在阅读了其他人的问题后使用了它)。我使用它是因为当我尝试
    if($memberofeips-eq$true)
    时,它不起作用。我猜这是因为
    $MemberOfEtips
    的值不是布尔值。4.我在想如果($memberofeips){#…}:)你的方法有效的话。所以不需要
    -eq$true
    ,很高兴知道这一点。再次感谢你!