格式化Get-AdUser中的MemberOf字符串



我正在运行一个简单的脚本,列出我的所有域用户,他们上次登录的时间,他们的帐户是否启用,以及他们是哪些组的成员。

我有两个问题。第一,lastLogon值不是日期/时间格式。第二,更重要的是,MemberOf列列出了组对象的所有内容,而我真正想要的只是CN值。此外,对于多个组中的用户,某些信息会被截断。

我该如何解决这个问题?

这是我正在运行的脚本:

Get-AdUser -Filter * -Properties Name,Description,Enabled,lastLogon,MemberOf | FT Name,Description,Enabled,lastLogon,MemberOf -autosize | format-list | out-string -width 4096 | Out-File C:test.txt

因此,首先我建议将信息输出为CSV,而不是尝试将其输出到文本文件中。试图把所有的账户都集中在一条线上是非常不切实际的。例如,我的用户对象在我的环境中的133个不同组中。

其次,我将放弃将其作为一个单行,而是使用实际的脚本来构建可以导出到CSV的自定义对象。以下是一些最重要的代码,可以让您朝着正确的方向前进。如果有机会的话,我稍后会把它变成经过实际功能测试的代码。

$results = @()
$users = Get-ADUser -Filter * -Properties Name,Description,Enabled,lastLogon,MemberOf
foreach($user in $users){
    $lastlogon = [datetime]::FromFileTime($user.lastlogon)
    foreach($group in $user.MemberOf){
        $temp = New-Object PSCustomObject -Property @{'Name' = $user.Name;
                                                      'Description' = $user.Description;
                                                      'Enabled' = $user.Enabled;
                                                      'LastLogon' = $lastlogon;
                                                      'Group' = '';
        }
        $temp.Group = $group.Split(',')[0]
        $results += $temp
    }
}
$results | Export-CSV C:TempSomeFile.csv -NoTypeInformation

测试了它,代码对我有效。

最新更新