답변:
시험
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expand
중복 그룹에 도움이되지는 않지만 중첩 된 그룹의 구성원을 가져오고 CN뿐만 아니라 구성원에 대한 전체 AD 쿼리 문자열을 제공합니다.
다음은 명령 프롬프트에서 다른 방법입니다. 출력을 구문 분석해야하므로 자동화 방법이 확실하지 않습니다.
그룹이 "글로벌 보안 그룹"인 경우 :
net group <your_groupname> /domain
"도메인 로컬 보안 그룹"을 찾고있는 경우 :
net localgroup <your_groupname> /domain
net user /domain
). 감사!
다음은 특히 OU 구조가 복잡하고 그룹의 전체 고유 이름을 모르는 경우에보다 일반적으로 유용한 ds 명령 버전입니다.
dsquery group -samid "Group_SAM_Account_Name" | dsget group -members -expand
또는 그룹의 CN (일반적으로 SAM ID와 동일)을 알고 있으면 이름에 공백이있는 경우 인용됩니다.
dsquery group -name "Group Account Name" | dsget group -members -expand
주석에 명시된 바와 같이 기본적으로 ds * 명령 (dsquery, dsget, dsadd, dsrm)은 도메인 컨트롤러에서만 사용할 수 있습니다. 그러나 Windows Server 설치 미디어의 지원 도구에서 관리 도구 팩을 설치하거나 Microsoft 다운로드 사이트에서 다운로드 할 수 있습니다.
PowerShell을 사용하여 이러한 쿼리를 수행 할 수도 있습니다. PowerShell은 Server 2008, 2008 R2 및 Windows 7의 설치 가능 기능으로 이미 제공되지만 XP 또는 Vista에 설치하려면 WinRM Framework 를 다운로드 해야합니다 .
PowerShell의 모든 AD-특정 cmdlet에 대한 액세스를 얻으려면 것 ALSO 다음의 설치 작업 중 하나 이상을 수행해야합니다 :
Quest AD 추가 기능이 필요없는 PowerShell 솔루션의 경우 다음을 시도하십시오.
Import-Module ActiveDirectory
Get-ADGroupMember "Domain Admins" -recursive | Select-Object name
중첩 된 그룹도 열거됩니다. 원하지 않으면 -recursive 스위치를 제거하십시오 .
서버와 클라이언트에서 작동하는 매우 쉬운 방법 :
NET GROUP "YOURGROUPNAME" /DOMAIN | find /I /C "%USERNAME%"
사용자가 YOURGROUPNAME 그룹에 있으면 1을, 그렇지 않으면 0을 반환합니다
그런 다음 % ERRORLEVEL % 값을 사용할 수 있습니다 (그룹의 사용자 인 경우 0, 그렇지 않은 경우 1).
IF %ERRORLEVEL%==0 NET USE %LOGONSERVER%\YOURGROUPSHARE
whoami /groups | find /I /C "YOURGROUPNAME"
PowerShell 및 Quest 소프트웨어의 Active Directory 용 무료 ActiveRoles 관리 셸을 사용하면 다음을 사용할 수 있습니다.
(Get-QADGroup "GroupName") 멤버
이 명령은 다른 버전의 Windows (예 : Windows 7)에 제공되지 않으므로 서버 버전의 Windows에서만 사용 dsget
하고 dsquery
사용할 수 있습니다. 해당 명령이없는 시스템에서는 AdFind 명령을 사용하여 원하는 정보를 얻을 수 있습니다 .
다음은 그룹 멤버십을 얻기위한 쿼리 예입니다.
AdFind.exe -default -f name="Domain Admins" member -list
로컬 그룹과 사용자를 나열하는 방법?
다음 powershell 스크립트를 사용하여 로컬 그룹과 해당 그룹의 구성원을 나열하십시오.
$server="YourServerName"
$computer = [ADSI]"WinNT://$server,computer"
$computer.psbase.children | where {
$_.psbase.schemaClassName -eq 'group' } | foreach {
write-host $_.name
write-host "------"
$group =[ADSI]$_.psbase.Path
$group.psbase.Invoke("Members") | foreach {
$_.GetType().InvokeMember("Name", 'GetProperty',
$null, $_, $null)}
write-host
}
위의 텍스트를 메모장에 복사하고로 저장하십시오 filename.ps1
. 그런 다음 파일을 실행하십시오. 각 그룹에 그룹과 사용자를 표시하거나 powershell에서 실행할 수 있습니다.
cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:
다음으로는, 입력을 요청Process[0]
UserGroup1
try 의 표시 멤버의 경우 :
dsquery group -name UserGroup1 | dsget group -members | dsget user -display
cmd
어떤 이유로 든 에서 제대로 작동하지 않을 것이라고 생각합니다 .
dsget failed:'Target object for this command' is missing.