Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Скрипт-отчёт по пользователям в AD с указанием групп, в которых они состоят (http://forum.oszone.net/showthread.php?t=244940)

Geliosvamp 18-10-2012 11:09 2007722

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

Необходимо сделать скрипт, который будет выводить отчёт по пользователям в 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 2007726

(Get-ADUser UserName -Prop memberof).MemberOf


Время: 20:45.

Время: 20:45.
© OSzone.net 2001-