为特定OU中的每个用户导出AD SamAccountNames和Groups的CSV

时间:2015-09-14 18:24:18

标签: powershell csv active-directory ou

我发现了一个类似的问题here,但它并不适合我的需要,而且我在修改它时遇到了麻烦。

我需要使用以下格式创建特定OU中所有用户的#!/usr/bin/python # -*- coding: utf-8 -*- """ test script to learn PyInstaller usage """ import sys from PyQt4 import QtCore from PyQt4 import QtGui class Main(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) self.ui = Ui_ADCmonitor() self.ui.setupUi(self) self.exitAction = QtGui.QAction('Exit', self) self.exitAction.setShortcut('Ctrl+Q') self.exitAction.triggered.connect(self.close) toolbar = self.addToolBar('Exit') toolbar.addAction(self.exitAction) self.refresh = QtCore.QTimer() self.status_freeze_timer = QtCore.QTimer() self.update_data() def update_data(self): self.status_refresh('Ok') self.refresh.singleShot(200, self.update_data) def status_refresh(self, msg): self.ui.statusbar.showMessage(msg) class Ui_ADCmonitor(object): def setupUi(self, ADCmonitor): ADCmonitor.setObjectName("ADCmonitor") ADCmonitor.resize(300, 300) self.statusbar = QtGui.QStatusBar(ADCmonitor) self.statusbar.setObjectName("statusbar") ADCmonitor.setStatusBar(self.statusbar) QtCore.QMetaObject.connectSlotsByName(ADCmonitor) ADCmonitor.setWindowTitle("ADC Monitor") if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = Main() window.show() sys.exit(app.exec_()) 文件及其AD组成员资格:

.csv

我认为这个剧本让我大部分都在那里:

User, Group (This is a Header)
User1, Group1
User1, Group2
User1, Group3
User2, Group1
User3, Group1
User4, Group1
User4, Group2

这个问题有两个问题。

  1. 我想在$Users = Get-ADGroup -SearchBase "OU=OrgUnit1,OU=OrgUnit2,OU=OrgUnit3,DC=XXX,DC=LOCAL" -Filter * ` | Get-ADGroupMember -Recursive ` | ForEach-Object { Get-ADUser $_ –Properties MemberOf | Select SamAccountName, MemberOf; } ` | Sort-Object SamAccountName | export-csv C:\Messaging\PowerShell\ADUsers\Test1.csv 上搜索,而不必搜索完整的专有名称,因为子OU并不总是相同。

  2. OU=OrgUnit1输出具有AD组的完整可分辨名称,我只需要没有限定符的组名称

2 个答案:

答案 0 :(得分:1)

使用Get-ADOrganizationalUnit获取您要搜索的OU:

$ou = Get-ADOrganizationalUnit -Filter "Name -eq 'OrgUnit1'"
Get-ADGroup -Filter * -SearchBase $ou | ...

memberOf属性是一个组列表(或者更确切地说是它们的专有名称)。要获得所需的输出,您需要展开并解析组名称并创建具有所需属性的新自定义对象:

... | ForEach-Object {
  $account = $_.SamAccountName
  $_.MemberOf | Get-ADGroup | ForEach-Object {
    New-Object -Type PSCustomObject -Property @{
      SamAccountName = $account
      Group          = $_.Name
    }
  }
} | ...

此外,如果在该管道的末尾将输出导出到文件,那么将管道输出分配给变量($Users)毫无意义。

修改后的代码:

$ou = Get-ADOrganizationalUnit -Filter "Name -eq 'OrgUnit1'"
Get-ADGroup -Filter * -SearchBase $ou |
  Get-ADGroupMember -Recursive |
  ForEach-Object { Get-ADUser $_ -Properties MemberOf; } |
  Sort-Object SamAccountName |
  ForEach-Object {
    $account = $_.SamAccountName
    $_.MemberOf | Get-ADGroup | ForEach-Object {
      New-Object -Type PSCustomObject -Property @{
        SamAccountName = $account
        Group          = $_.Name
      }
    }
  } | Export-Csv 'C:\Messaging\PowerShell\ADUsers\Test1.csv'

答案 1 :(得分:0)

您不需要编写这么多代码。用户在 PowerShell 中使用以下代码导出所有 AD 用户。

像这样:

Import-Module ActiveDirectory
Get-ADUser -Filter * -Properties * | export-csv c:\ADusers.csv

如果你有一个大广告,那可能需要一段时间。

相关问题