Войти

Показать полную графическую версию : Скрипт-отчёт по пользователям в AD с указанием групп, в которых они состоят


Geliosvamp
18-10-2012, 11:09
Добрый день!

Необходимо сделать скрипт, который будет выводить отчёт по пользователям в AD с указанием групп, в которых они состоят.

Нашёл два скрипта в галерее скриптов Microsoft.

Не знаю можно ли давать ссылки, если надо - дам.

Суть в том, что кусок одного из них может выводить список пользователей:
Спасибо Santhosh Sivarajan.

Function ADUserSearch
{
$ADUserFile = New-Item -type file -force "C:\Scripts\ADUserInfo.csv"
$ObjFiler = "(objectCategory=User)"
$objSearch = New-Object System.DirectoryServices.DirectorySearcher
$objSearch.SearchRoot = "LDAP://dc=infralab, dc=local"
$ObjProp = "samaccountname"
$objSearch.Filter = $ObjFiler
$AllObj = $objSearch.FindAll()
foreach ($Obj in $AllObj)
{ $objItem = $Obj.Properties
$objItem.samaccountname
$objItem.samaccountname | Out-File $ADUserFile -encoding ASCII -append
}
}

Другой выводит по имени пользователя список групп, в которых он состоит:
Спасибо Andreas Werner.

# import AD Modul
Import-Module activedirectory
#Set-ExecutionPolicy unrestricted

#---------------------------
#-------- Variable ---------
#---------------------------
$ADUserMembers=""; $ADUser=""
$ADGroupName=""; $ADGroupCategory=""; $ADGroupScope=""
$i=0

#---------------------------
#------- Functions ---------
#---------------------------
function Get-ADGroupName ($DN)
{
$ADGrpName= (Get-ADGroup -Filter {DistinguishedName -eq $DN}).SamAccountName
return $ADGrpName
}


function Get-GroupMemberOf ($ADGroupName)
{$ii++; $a=0
$Message=""; $Prefix=""
$GroupCategory=""; $GroupScope=""; $GroupName=""

For ($a=0; $a -lt $ii; $a++) {$Prefix = $Prefix + " "}

$DNs=(Get-ADGroup $ADGroupName -Properties *).MemberOf
if ($DNs.count -ne 0)
{
foreach ($DN in $DNs)
{
# $Prefix =" $ADGroupName => "
$GroupName = (Get-ADGroupName $DN)
$GroupCategory = (Get-ADGroup $GroupName -Properties *).GroupCategory
$GroupScope = (Get-ADGroup $GroupName -Properties *).GroupScope

$Message="$Prefix $ADGroupName => $GroupName [$GroupCategory - $GroupScope]"
Write-Host $Message

Get-GroupMemberOf $GroupName ' '
}# End ForEach
}# End IF
}#End Function



#-----------------------------------------------------------------
#--> START: Group Statistic
Clear-Host

$ADUser= Read-Host "Please enter AD-User"

$ADUserMembers=(Get-ADUser $ADUser -Properties *).MemberOf

Write-Host "AD-User: $ADUser" -ForegroundColor blue
#PrimaryGroup
$ADPrimaryGroupDN = (Get-ADUser -Properties * -Filter {SamAccountName -eq $ADUser}).PrimaryGroup
$ADPrimaryGroupName=(Get-ADGroupName $ADPrimaryGroupDN)
$ADGroupCategory=(Get-ADGroup $ADPrimaryGroupName).GroupCategory
$ADGroupScope=(Get-ADGroup $ADPrimaryGroupName).GroupScope
$Message = "Primary Group: $ADPrimaryGroupName [$ADGroupCategory, $ADGroupScope]"
Write-Host $Message -BackgroundColor yellow

#Other groups
foreach ($ADUserMember in $ADUserMembers)
{$i++
$ADGroupName = (Get-ADGroupName $ADUserMember)
$ADGroupCategory=(Get-ADGroup $ADGroupName).GroupCategory
$ADGroupScope=(Get-ADGroup $ADGroupName).GroupScope
$Message = "($i) $ADGroupName [$ADGroupCategory, $ADGroupScope]"
Write-Host $Message -ForegroundColor black
Get-GroupMemberOf $ADGroupName ' '
Write-Host " "
}

Соединив их я получил следующее:

$ADUserMembers=""; $ADUser=""
$ADGroupName=""; $ADGroupCategory=""; $ADGroupScope=""
$i=0

#---------------------------
#------- Functions ---------
#---------------------------


function Get-ADGroupName ($DN)
{
$ADGrpName= (Get-ADGroup -Filter {DistinguishedName -eq $DN}).SamAccountName
return $ADGrpName
}


function Get-GroupMemberOf ($ADGroupName)
{$ii++; $a=0
$Message=""; $Prefix=""
$GroupCategory=""; $GroupScope=""; $GroupName=""

For ($a=0; $a -lt $ii; $a++) {$Prefix = $Prefix + " "}

$DNs=(Get-ADGroup $ADGroupName -Properties *).MemberOf
if ($DNs.count -ne 0)
{
foreach ($DN in $DNs)
{
# $Prefix =" $ADGroupName => "
$GroupName = (Get-ADGroupName $DN)
$GroupCategory = (Get-ADGroup $GroupName -Properties *).GroupCategory
$GroupScope = (Get-ADGroup $GroupName -Properties *).GroupScope

$Message="$Prefix $ADGroupName => $GroupName [$GroupCategory - $GroupScope]"
Write-Host $Message

Get-GroupMemberOf $GroupName ' '
}# End ForEach
}# End IF
}#End Function



#-----------------------------------------------------------------
#--> START: Group Statistic
Clear-Host

#$ADUser= Read-Host "Please enter AD-User"

$ObjFiler = "(objectCategory=User)"
$objSearch = New-Object System.DirectoryServices.DirectorySearcher
$objSearch.SearchRoot = "LDAP://OU=Users,OU=Ulsk,DC=corp,DC=ertelecom,DC=loc"
$ObjProp = "samaccountname"
$objSearch.Filter = $ObjFiler
$AllObj = $objSearch.FindAll()
foreach ($Obj in $AllObj)
{ $objItem = $Obj.Properties
$ADUser=$objItem.samaccountname



$ADUserMembers=(Get-ADUser $ADUser -Properties *).MemberOf

Write-Host "AD-User: $ADUser" -ForegroundColor blue
#PrimaryGroup
$ADPrimaryGroupDN = (Get-ADUser -Properties * -Filter {SamAccountName -eq $ADUser}).PrimaryGroup
$ADPrimaryGroupName=(Get-ADGroupName $ADPrimaryGroupDN)
$ADGroupCategory=(Get-ADGroup $ADPrimaryGroupName).GroupCategory
$ADGroupScope=(Get-ADGroup $ADPrimaryGroupName).GroupScope
$Message = "Primary Group: $ADPrimaryGroupName [$ADGroupCategory, $ADGroupScope]"
Write-Host $Message -BackgroundColor yellow

#Other groups
foreach ($ADUserMember in $ADUserMembers)
{$i++
$ADGroupName = (Get-ADGroupName $ADUserMember)
$ADGroupCategory=(Get-ADGroup $ADGroupName).GroupCategory
$ADGroupScope=(Get-ADGroup $ADGroupName).GroupScope
$Message = "($i) $ADGroupName [$ADGroupCategory, $ADGroupScope]"
Write-Host $Message -ForegroundColor black
Get-GroupMemberOf $ADGroupName ' '
Write-Host " "
}
}


Выходит ошибка (фрагмент):

Сидор Сидоров
Get-ADUser : Не удается привязать параметр "Identity". Не удается преобразовать значение "System.DirectoryServices.ResultPropertyValueCollection" типа "System.DirectoryServices.Result
PropertyValueCollection" в тип "Microsoft.ActiveDirectory.Management.ADUser".
строка:76 знак:27
+ $ADUserMembers=(Get-ADUser <<<< $ADUser -Properties *).MemberOf
+ CategoryInfo : InvalidArgument: (:) [Get-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.ActiveDirectory.Management.Commands.GetADUser

AD-User: Сидор Сидоров
Get-ADGroup : Переменная: "DN" обнаружена в выражении: $DN не имеет определения.
строка:12 знак:29
+ $ADGrpName= (Get-ADGroup <<<< -Filter {DistinguishedName -eq $DN}).SamAccountName
+ CategoryInfo : InvalidArgument: (:) [Get-ADGroup], ArgumentException
+ FullyQualifiedErrorId : Переменная: "DN" обнаружена в выражении: $DN не имеет определения.,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:82 знак:34
+ $ADGroupCategory=(Get-ADGroup <<<< $ADPrimaryGroupName).GroupCategory
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:83 знак:31
+ $ADGroupScope=(Get-ADGroup <<<< $ADPrimaryGroupName).GroupScope
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Primary Group: [, ]

Стоит заметить, что сам скрипт выдачи отчета по группам, в которых состоит юзер, выдаёт подобную ошибку, но только когда доходит до определённой группы (почему мне выяснить не удалось). Фрагмент:
AD-User: Сидоров Сидр
Primary Group: Domain Users [Security, Global]
(1) Группа 1

(2) Группа 2

(3) Группа 3

(4) Deny_Removable storages_corp [Security, Universal]
Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:31 знак:38
+ $GroupCategory = (Get-ADGroup <<<< $GroupName -Properties *).GroupCategory
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:32 знак:35
+ $GroupScope = (Get-ADGroup <<<< $GroupName -Properties *).GroupScope
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Deny_Removable storages_corp => [ - ]
Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:24 знак:18
+ $DNs=(Get-ADGroup <<<< $ADGroupName -Properties *).MemberOf
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:31 знак:38
+ $GroupCategory = (Get-ADGroup <<<< $GroupName -Properties *).GroupCategory
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:32 знак:35
+ $GroupScope = (Get-ADGroup <<<< $GroupName -Properties *).GroupScope
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

=> [ - ]
Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:24 знак:18
+ $DNs=(Get-ADGroup <<<< $ADGroupName -Properties *).MemberOf
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:31 знак:38
+ $GroupCategory = (Get-ADGroup <<<< $GroupName -Properties *).GroupCategory
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:32 знак:35
+ $GroupScope = (Get-ADGroup <<<< $GroupName -Properties *).GroupScope
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

=> [ - ]
Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:24 знак:18
+ $DNs=(Get-ADGroup <<<< $ADGroupName -Properties *).MemberOf
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:31 знак:38
+ $GroupCategory = (Get-ADGroup <<<< $GroupName -Properties *).GroupCategory
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:32 знак:35
+ $GroupScope = (Get-ADGroup <<<< $GroupName -Properties *).GroupScope
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup

=> [ - ]
Get-ADGroup : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите аргумент, не имеющий значение NULL, после чего повторите выполнение команды
.
строка:24 знак:18
+ $DNs=(Get-ADGroup <<<< $ADGroupName -Properties *).MemberOf
+ CategoryInfo : InvalidData: (:) [Get-ADGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup


Быть может есть уже рабочий подобный скрипт, который я не нашёл. Или помогите, пожалуйста, с этим..

Kazun
18-10-2012, 11:16
(Get-ADUser UserName -Prop memberof).MemberOf




© OSzone.net 2001-2012