下午好。所以我有以下代码行检索任何后缀为-blah1和blah2的AD组。
import-module activedirectory
$group = Get-ADGroup -Filter { (name -like "*-blah1") -or (name -like "*-blah2") } | Select Name
上面的代码显示了群组:
ABC-blah1
ABC-blah2
我希望能够为特定用户查询这些组(例如:blahuser
)。如果用户不在组中,我想脚本告诉我。有任何想法吗?感谢。
答案 0 :(得分:2)
您正在寻找Get-ADGroupMember和Where-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