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

时间:2017-11-16 00:38:49

标签: powershell

下午好。所以我有以下代码行检索任何后缀为-blah1和blah2的AD组。

import-module activedirectory

$group = Get-ADGroup -Filter { (name -like "*-blah1") -or (name -like "*-blah2") } | Select Name

上面的代码显示了群组:

  

ABC-blah1
  ABC-blah2

我希望能够为特定用户查询这些组(例如:blahuser)。如果用户不在组中,我想脚本告诉我。有任何想法吗?感谢。

3 个答案:

答案 0 :(得分:2)

您正在寻找Get-ADGroupMemberWhere-Object命令。

Get-ADGroup -Filter { (name -like "*-blah1") -or (name -like "*-blah2") } |
    Get-ADGroupMember |
    Where-Object {$_.SamAccountName -match 'blahuser'}

答案 1 :(得分:0)

功能连接 - Mstsc { <#
.SYNOPSIS
在没有密码提示的情况下连接RDP会话的功能

.DESCRIPTION 此功能提供启动RDP会话的功能,而无需键入密码

.PARAMETER ComputerName 这可以是单个计算机名称或将打开RDP会话的计算机阵列

.PARAMETER用户 用于验证的用户名

.PARAMETER密码 用于验证的密码

.PARAMETER凭证 将用于对远程系统进行身份验证的PowerShell凭据对象

.PARAMETER Admin 在mstsc命令上设置/ admin开关:将您连接到用于管理服务器的会话

.PARAMETER MultiMon 在mstsc命令上设置/ multimon开关:将远程桌面服务会话监视器布局配置为与当前客户端配置相同

.PARAMETER FullScreen 在mstsc命令上设置/ f开关:以全屏模式启动远程桌面

.PARAMETER Public 在mstsc命令上设置/ public开关:以公共模式运行远程桌面

.PARAMETER宽度 在mstsc命令上设置/ w:参数:指定远程桌面窗口的宽度

.PARAMETER高度 在mstsc命令上设置/ h:参数:指定远程桌面窗口的高度

.NOTES
名称:Connect-Mstsc 作者:Jaap Brasser DateUpdated:2016-10-28 版本:1.2.5 博客:http://www.jaapbrasser.com

.LINK http://www.jaapbrasser.com

。实施例
。 \连接-Mstsc.ps1

描述

此命令点源脚本以确保您当前的PowerShell会话中可以使用Connect-Mstsc功能

。实施例
Connect-Mstsc -ComputerName server01 -User contoso \ jaapbrasser -Password(ConvertTo-SecureString' supersecretpw' -AsPlainText -Force)

描述

将使用contoso \ jaapbrasser的凭据创建到server01的远程桌面会话

。实施例
Connect-Mstsc server01,server02 contoso \ jaapbrasser(ConvertTo-SecureString' supersecretpw' -AsPlainText -Force)

描述

将使用contoso \ jaapbrasser的凭据创建两个到server01和server02的RDP会话

。实施例
server01,server02 | Connect-Mstsc -User contoso \ jaapbrasser -Password(ConvertTo-SecureString' supersecretpw' -AsPlainText -Force)-Width 1280 -Height 720

描述

将使用contoso \ jaapbrasser的凭据创建两个到server01和server02的RDP会话,两个会话的分辨率都是1280x720。

。实施例
server01,server02 | Connect-Mstsc -User contoso \ jaapbrasser -Password(ConvertTo-SecureString' supersecretpw' -AsPlainText -Force)-Wait

描述

将创建到server01的RDP会话,一旦mstsc进程关闭,会话下一个会话将打开到server02。使用contoso \ jaapbrasser的凭据和两个会话将以1280x720的分辨率。

。实施例
Connect-Mstsc -ComputerName server01:3389 -User contoso \ jaapbrasser -Password(ConvertTo-SecureString' supersecretpw' -AsPlainText -Force)-Admin -MultiMon

描述

将使用contoso \ jaapbrasser的凭据创建到端口3389的server01的RDP会话,并为mstsc设置/ admin和/ multimon开关

。实施例
Connect-Mstsc -ComputerName server01:3389 -User contoso \ jaapbrasser -Password(ConvertTo-SecureString' supersecretpw' -AsPlainText -Force)-Public

描述

将使用contoso \ jaapbrasser的凭据创建到端口3389的server01的RDP会话,并为mstsc设置/ public开关

。实施例 Connect-Mstsc -ComputerName 192.168.1.10 -Credential $ Cred

描述

将使用存储在$ cred变量中的凭证创建到系统192.168.1.10的RDP会话。

。实施例
Get-AzureVM | Get-AzureEndPoint -Name'远程桌面' | ForEach-Object {Connect-Mstsc -ComputerName($ .Vip,$ .Port -join':')-User contoso \ jaapbrasser -Password(ConvertTo-SecureString' ; supersecretpw' -AsPlainText -Force)}

描述

使用用户contoso \ jaapbrasser和密码supersecretpw

为每个Azure虚拟机启动RDP会话

。实施例 PowerShell.exe -Command"& {。 \连接-Mstsc.ps1; Connect-Mstsc server01 contoso \ jaapbrasser(ConvertTo-SecureString' supersecretpw' -AsPlainText -Force)-Admin}"

描述

将使用连接到管理会话的contoso \ jaapbrasser的凭据创建到server01的远程桌面会话,此示例可用于计划任务或批处理文件。

>

[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()
            }       
        }
    }
}

}

答案 2 :(得分:0)

你可以这样做:

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