Powershell-检索组列表,使用列表查找特定组成员

Powershell-检索组列表,使用列表查找特定组成员,powershell,Powershell,下午好。下面这行代码检索任何后缀为-blah1和blah2的广告组 import-module activedirectory $group = Get-ADGroup -Filter { (name -like "*-blah1") -or (name -like "*-blah2") } | Select Name 以上代码显示组: abc-blah1 abc-blah2 我希望能够为特定用户查询这些组(例如:blahuser)。如果组中不存在该用户,我想编写脚本来告诉我。有什么想法吗?

下午好。下面这行代码检索任何后缀为-blah1和blah2的广告组

import-module activedirectory

$group = Get-ADGroup -Filter { (name -like "*-blah1") -or (name -like "*-blah2") } | Select Name
以上代码显示组:

abc-blah1
abc-blah2

我希望能够为特定用户查询这些组(例如:
blahuser
)。如果组中不存在该用户,我想编写脚本来告诉我。有什么想法吗?谢谢。

您正在查找和命令

函数连接Mstsc{
}您可以这样做:

$userName = "ThisIsMyUserName"
$Groups = Get-ADGroup -Filter { (name -like "*-blah1") -or (name -like "*-blah2") } | Where-Object { $userName -notin ($_ | Get-ADGroupMember).SamAccountName} |select -ExpandProperty name

如果可能存在嵌套组,则可能需要
获取ADGroupMember-Recursive
[cmdletbinding(SupportsShouldProcess,DefaultParametersetName='UserPassword')]
param (
    [Parameter(Mandatory=$true,
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true,
        Position=0)]
    [Alias('CN')]
        [string[]]     $ComputerName,
    [Parameter(ParameterSetName='UserPassword',Mandatory=$true,Position=1)]
    [Alias('U')] 
        [string]       $User,
    [Parameter(ParameterSetName='UserPassword',Mandatory=$true,Position=2)]
    [Alias('P')] 
        [string]       $Password,
    [Parameter(ParameterSetName='Credential',Mandatory=$true,Position=1)]
    [Alias('C')]
        [PSCredential] $Credential,
    [Alias('A')]
        [switch]       $Admin,
    [Alias('MM')]
        [switch]       $MultiMon,
    [Alias('F')]
        [switch]       $FullScreen,
    [Alias('Pu')]
        [switch]       $Public,
    [Alias('W')]
        [int]          $Width,
    [Alias('H')]
        [int]          $Height,
    [Alias('WT')]
        [switch]       $Wait
)

begin {
    [string]$MstscArguments = ''
    switch ($true) {
        {$Admin}      {$MstscArguments += '/admin '}
        {$MultiMon}   {$MstscArguments += '/multimon '}
        {$FullScreen} {$MstscArguments += '/f '}
        {$Public}     {$MstscArguments += '/public '}
        {$Width}      {$MstscArguments += "/w:$Width "}
        {$Height}     {$MstscArguments += "/h:$Height "}
    }

    if ($Credential) {
        $User     = $Credential.UserName
        $Password = $Credential.GetNetworkCredential().Password
    }
}
process {
    foreach ($Computer in $ComputerName) {
        $ProcessInfo = New-Object System.Diagnostics.ProcessStartInfo
        $Process = New-Object System.Diagnostics.Process

        # Remove the port number for CmdKey otherwise credentials are not entered correctly
        if ($Computer.Contains(':')) {
            $ComputerCmdkey = ($Computer -split ':')[0]
        } else {
            $ComputerCmdkey = $Computer
        }

        $ProcessInfo.FileName    = "$($env:SystemRoot)\system32\cmdkey.exe"
        $ProcessInfo.Arguments   = "/generic:TERMSRV/$ComputerCmdkey /user:$User /pass:$($Password)"
        $ProcessInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden
        $Process.StartInfo = $ProcessInfo
        if ($PSCmdlet.ShouldProcess($ComputerCmdkey,'Adding credentials to store')) {
            [void]$Process.Start()
        }

        $ProcessInfo.FileName    = "$($env:SystemRoot)\system32\mstsc.exe"
        $ProcessInfo.Arguments   = "$MstscArguments /v $Computer"
        $ProcessInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Normal
        $Process.StartInfo       = $ProcessInfo
        if ($PSCmdlet.ShouldProcess($Computer,'Connecting mstsc')) {
            [void]$Process.Start()
            if ($Wait) {
                $null = $Process.WaitForExit()
            }       
        }
    }
}
$userName = "ThisIsMyUserName"
$Groups = Get-ADGroup -Filter { (name -like "*-blah1") -or (name -like "*-blah2") } | Where-Object { $userName -notin ($_ | Get-ADGroupMember).SamAccountName} |select -ExpandProperty name