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