Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Скрипт-отчёт по пользователям в AD с указанием групп, в которых они состоят

Ответить
Настройки темы
PowerShell - Скрипт-отчёт по пользователям в AD с указанием групп, в которых они состоят

Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!

Необходимо сделать скрипт, который будет выводить отчёт по пользователям в 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
Быть может есть уже рабочий подобный скрипт, который я не нашёл. Или помогите, пожалуйста, с этим..

Отправлено: 11:09, 18-10-2012

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


(Get-ADUser UserName -Prop memberof).MemberOf
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:16, 18-10-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Скрипт-отчёт по пользователям в AD с указанием групп, в которых они состоят

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Переименование файлов с указанием порядкового номера shao Скриптовые языки администрирования Windows 38 28-09-2011 17:54
ТЕРМИНАЛЬНІЙ режим с указанием прав TERMINAL Хочу все знать 1 18-08-2009 14:50
Разное - настройка групп, пользователей, предоставление пользователям прав viktor030372 Microsoft Windows 2000/XP 26 23-04-2009 14:23
Проблема с указанием пути на сайте Bullet-Avalon Вебмастеру 3 21-12-2008 22:34
Группа не может менять пароли пользователям, которых завели до делегирования fozgen Microsoft Windows NT/2000/2003 0 22-05-2008 12:08




 
Переход