扩大成员

问题描述 投票:0回答:3

目前正在为数据保险库/安全审计系统开发 PowerShell 脚本。

我目前在使用以下脚本时遇到一些困难

$table_user = @()
$record_user = [ordered]@{
    "ObjectGUID"         = ""
    "SamAccountName"     = ""
    "Name"               = ""
    "Surname"            = ""
    "GivenName"          = ""
    "Created"            = ""
    "Modified"           = ""
    "LastLogon"          = ""
    "Enabled"            = ""
    "Office"             = ""
    "Company"            = ""
    "Department"         = ""
    "MemberOf"           = ""
    "HomeDirectory"      = ""
}
$Users = Get-AdUser -Filter * -Properties * |
         select ObjectGUID, SamAccountName, Name, Surname, GivenName,
                @{Name='Created';Expression={$_.Created.ToString("yyyy\/MM\/dd HH:mm:ss")}},
                @{Name='Modified';Expression={$_.Modified.ToString("yyyy\/MM\/dd HH:mm:ss")}},
                @{Name="LastLogon";Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp).ToString('yyyy\/MM\/dd HH:mm:ss')}},
                Enabled, Office, Company, Department, MemberOf, HomeDirectory

foreach ($user in $users) {
    $Record_User."ObjectGUID"     = $User.ObjectGUID
    $Record_User."SamAccountName" = $User.SamAccountName
    $Record_User."Name"           = $User.Name
    $Record_User."Surname"        = $User.Surname
    $Record_User."GivenName"      = $User.GivenName
    $Record_User."Created"        = $User.Created
    $Record_User."Modified"       = $User.Modified
    $Record_User."LastLogon"      = $User.LastLogon
    $Record_User."Enabled"        = $User.Enabled
    $Record_User."Office"         = $User.Office
    $Record_User."Company"        = $User.Company
    $Record_User."Department"     = $User.Department
    $Record_User."MemberOf"       = $User.MemberOf
    $Record_User."HomeDirectory"  = $User.HomeDirectory

    $objRecord = New-Object PSObject -Property $Record_User
    $table_User += $objRecord
}

我希望每一行都包含一个独特的

MemberOf
,例如;

谁能帮助我如何分离

MemberOf
组,以便每个独特的组在导出时都在单独的行上?

powershell active-directory active-directory-group
3个回答
2
投票

使用嵌套循环

ForEach ($user in $users)
{
    ForEach ($group in $user.memberOf) 
    {
        # your code to build a CSV row here
    }
}

注意。

$table_User += $objRecord
非常慢,每次添加内容时它都会复制整个数组的内存 - 所以它变得越来越慢。使用:

$table_User = foreach (...) {}

语法代替,以收集 foreach 循环的输出。


0
投票

将您的选择输入

ForEach-Object
并使用嵌套循环复制每个
MemberOf
条目的对象,同时通过
calculated property
替换MemberOf属性。

$Users = Get-AdUser -Filter * -Properties * |
         select ... |
         ForEach-Object {
           if ($_.MemberOf) {
             foreach ($member in $_.MemberOf) {
               $_ | Select-Object -Property *,@{n='MemberOf';e={$member}} -Exclude MemberOf
             }
           } else {
             $_   # pass object without memberships as-is
           }
         }

0
投票

请在此处放置完整代码而不是 # your code to build a CSV row

您对 $table_User = forEach (...) {}

的建议是什么
© www.soinside.com 2019 - 2024. All rights reserved.