【问题标题】:Formatting MemberOf string in Get-AdUser在 Get-AdUser 中格式化 MemberOf 字符串
【发布时间】:2014-10-15 18:39:35
【问题描述】:

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

我有两个问题。一,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

【问题讨论】:

  • 使用像Format-Table 这样的cmdlet 破坏输入给它们的对象。如果您要继续管道,请不要使用它们,仅供参考

标签: powershell


【解决方案1】:

所以,首先我建议将信息输出为 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:\Temp\SomeFile.csv -NoTypeInformation

经过测试,该代码对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多