突然要取得AD中所有域用戶并且制作成列表舶赔,因為不可避免地多次要用到秆吵,所以這里寫下來以備忘。
方法一(該方法會列出所有用戶不管是啟用的還是禁用的)
- 用管理員登錄任意一臺域控(DC),運行Windows PowerShell捞附,在PowerShell下運行命令:
Get-WmiObject -Class Win32_UserAccount >C:\userList.txt
注意其后的C:\userList.txt指明了我通過輸出重定向把取得用戶信息輸出到了C:\userList.txt這個文件里,你可以根據(jù)實際情況變更它您没。
-
打開C:\userList.txt文件鸟召,把里面的內(nèi)容復(fù)制出來,打開一個Excel的空白工作簿氨鹏,把這個內(nèi)容粘貼到Sheet1的A列里如圖:
取得的內(nèi)容粘貼到EXCEL里的Sheet1里的A列里 -
點擊EXCEL里底部Sheet1右邊的+號按鈕欧募,新建一個新工作表Sheet2如圖:
新建工作表Sheet2 - 在EXCEL界面按ALT+F11打開VBA環(huán)境,依次點擊菜單插入Insert仆抵、模塊Module跟继,此時將插入一個新的模塊名為Module1,選中它镣丑,然后在右邊空白環(huán)境里粘貼下面代碼:
'A format converter for AD user information
'By Darwin Zuo (darwin.zuo@163.com)
'2019-08-29
Sub ADUserFormConvert()
rowInSheet2 = 1
rowInSheet1 = 0
blankCounting = 0
Sheets("Sheet2").Cells(1, 1) = "Account Type"
Sheets("Sheet2").Cells(1, 2) = "Caption"
Sheets("Sheet2").Cells(1, 3) = "Domain"
Sheets("Sheet2").Cells(1, 4) = "SID"
Sheets("Sheet2").Cells(1, 5) = "Full Name"
Sheets("Sheet2").Cells(1, 6) = "Name"
Do While blankCounting < 5
rowInSheet1 = rowInSheet1 + 1
cv = Sheets("sheet1").Cells(rowInSheet1, 1).Value
If Len(cv) > 0 Then
blankCounting = 0
hdr4 = Left(cv, 4)
If hdr4 = "Acco" Then
rowInSheet2 = rowInSheet2 + 1
Sheets("sheet2").Cells(rowInSheet2, 1) = Right(cv, Len(cv) - 14)
ElseIf hdr4 = "Capt" Then
Sheets("sheet2").Cells(rowInSheet2, 2) = Right(cv, Len(cv) - 14)
ElseIf hdr4 = "Doma" Then
Sheets("sheet2").Cells(rowInSheet2, 3) = Right(cv, Len(cv) - 14)
ElseIf hdr4 = "SID " Then
Sheets("sheet2").Cells(rowInSheet2, 4) = Right(cv, Len(cv) - 14)
ElseIf hdr4 = "Full" Then
Sheets("sheet2").Cells(rowInSheet2, 5) = Right(cv, Len(cv) - 14)
ElseIf hdr4 = "Name" Then
Sheets("sheet2").Cells(rowInSheet2, 6) = Right(cv, Len(cv) - 14)
End If
Else
blankCounting = blankCounting + 1
End If
Loop
MsgBox "Done."
End Sub
-
按F5運行代碼舔糖,如果顯示下面的信息那么信息已經(jīng)轉(zhuǎn)換好了,關(guān)掉VBA環(huán)境切換到Sheet2查看結(jié)果即可:
運行成功會顯示這個窗口
對于大多數(shù)情況下莺匠,操作到此為止了金吗,得到的數(shù)據(jù)如下圖:
最終得到的數(shù)據(jù)
方法二(可以選擇是列出所有用戶、僅啟用用戶趣竣、僅禁用用戶)
- 用管理員登錄任意一臺域控(DC)摇庙,運行Windows PowerShell,根據(jù)需要在PowerShell下執(zhí)行下面三個中的某個命令:
#這是只列出啟用的用戶的版本
Get-ADUser -Filter {Enabled -eq "True"} >C:\userList.txt
#這是只列出被禁用的用戶的版本
Get-ADUser -Filter {Enabled -eq "False"} >C:\userList.txt
#這是列出所有用戶的版本
Get-ADUser -Filter {ObjectClass -eq "user"} >C:\userList.txt
注意其后的C:\userList.txt指明了我通過輸出重定向把取得用戶信息輸出到了C:\userList.txt這個文件里期贫,你可以根據(jù)實際情況變更它跟匆。
-
打開C:\userList.txt文件,把里面的內(nèi)容復(fù)制出來通砍,打開一個Excel的空白工作簿玛臂,把這個內(nèi)容粘貼到Sheet1的A列里如圖:
取得的內(nèi)容粘貼到EXCEL里的Sheet1里的A列里 -
點擊EXCEL里底部Sheet1右邊的+號按鈕,新建一個新工作表Sheet2如圖:
新建工作表Sheet2 在EXCEL界面按ALT+F11打開VBA環(huán)境封孙,依次點擊菜單插入Insert迹冤、模塊Module,此時將插入一個新的模塊名為Module1虎忌,選中它泡徙,然后在右邊空白環(huán)境里粘貼下面代碼:
'A format converter for AD user information
'By Darwin Zuo (darwin.zuo@163.com)
'2019-09-30
Sub ADUserFormConvert()
rowInSheet2 = 1
rowInSheet1 = 0
blankCounting = 0
Sheets("Sheet2").Cells(1, 1) = "DistinguishedName"
Sheets("Sheet2").Cells(1, 2) = "Enabled"
Sheets("Sheet2").Cells(1, 3) = "GivenName"
Sheets("Sheet2").Cells(1, 4) = "Name"
Sheets("Sheet2").Cells(1, 5) = "ObjectClass"
Sheets("Sheet2").Cells(1, 6) = "ObjectGUID"
Sheets("Sheet2").Cells(1, 7) = "SamAccountName"
Sheets("Sheet2").Cells(1, 8) = "SID"
Sheets("Sheet2").Cells(1, 9) = "Surname"
Sheets("Sheet2").Cells(1, 10) = "UserPrincipalName"
Do While blankCounting < 5
rowInSheet1 = rowInSheet1 + 1
cv = Sheets("sheet1").Cells(rowInSheet1, 1).Value
If Len(cv) > 0 Then
blankCounting = 0
hdr4 = Left(cv, 4)
If hdr4 = "Dist" Then
rowInSheet2 = rowInSheet2 + 1
Sheets("sheet2").Cells(rowInSheet2, 1) = Right(cv, Len(cv) - 20)
ElseIf hdr4 = "Enab" Then
Sheets("sheet2").Cells(rowInSheet2, 2) = Right(cv, Len(cv) - 20)
ElseIf hdr4 = "Give" Then
Sheets("sheet2").Cells(rowInSheet2, 3) = Right(cv, Len(cv) - 20)
ElseIf hdr4 = "Name" Then
Sheets("sheet2").Cells(rowInSheet2, 4) = Right(cv, Len(cv) - 20)
ElseIf hdr4 = "Obje" Then
If Left(cv, 7) = "ObjectC" Then
Sheets("sheet2").Cells(rowInSheet2, 5) = Right(cv, Len(cv) - 20)
Else
Sheets("sheet2").Cells(rowInSheet2, 6) = Right(cv, Len(cv) - 20)
End If
ElseIf hdr4 = "SamA" Then
Sheets("sheet2").Cells(rowInSheet2, 7) = Right(cv, Len(cv) - 20)
ElseIf hdr4 = "SID " Then
Sheets("sheet2").Cells(rowInSheet2, 8) = Right(cv, Len(cv) - 20)
ElseIf hdr4 = "Surn" Then
Sheets("sheet2").Cells(rowInSheet2, 9) = Right(cv, Len(cv) - 20)
ElseIf hdr4 = "User" Then
Sheets("sheet2").Cells(rowInSheet2, 10) = Right(cv, Len(cv) - 20)
End If
Else
blankCounting = blankCounting + 1
End If
Loop
MsgBox "Done."
End Sub
-
按F5運行代碼,如果顯示下面的信息那么信息已經(jīng)轉(zhuǎn)換好了膜蠢,關(guān)掉VBA環(huán)境切換到Sheet2查看結(jié)果即可:
運行成功會顯示這個窗口
對于大多數(shù)情況下堪藐,操作到此為止了莉兰,表格已經(jīng)在Sheet2里整理好了。
注意:
- 有可能上面提到的最后一步會提示由于安全原因等等導(dǎo)致代碼不能執(zhí)行礁竞,那么不要緊糖荒,在VBA環(huán)境下點擊保存按鈕,在彈出的另存為對話框中選擇另存為類型為啟用宏的工作簿Excel Macro-Enabled Workbook模捂,然后保存捶朵。
-
打開剛剛保存的工作簿,此時系統(tǒng)可能有個安全提示狂男,點擊開啟內(nèi)容Enable Content如下圖:
開啟宏才能使用剛才建立的代碼 -
按ALT+F8综看,在列表中選擇ADUserFormConvert然后點擊運行Run,那么一樣會得到第5步的結(jié)果岖食。
選中宏然后點運行
方法三 最近結(jié)合上面兩個方法寫了個腳本红碑,算上面兩個方法結(jié)合的完美版
將下面的代碼復(fù)制到記事本里并另存為.ps1文件(PoweShell腳本文件)泽疆,然后運行它根據(jù)提示操作即可。
如果腳本沒有被修改的話滥朱,最終生成的結(jié)果保存在當(dāng)前用戶的臨時文件夾里滞谢,運行完畢后會自動打開該文件夾,找到名為userList.csv的文件即是最終生成的結(jié)果洽洁。
$saveto = $env:temp + "\userlist.csv"
cls
Write-Host "Easy tool to get the AD user information by darwin.zuo@163.com, 2022"
Write-Host "左東華(darwin.zuo@163.com)于2022年制作的用于取得活動目錄用戶的小工具"
Write-Host
Write-Host "The simplified version data format can be gotten from any of the PC in AD; the script must be run on DC the AD for detailed version."
Write-Host "精簡版可以運行在活動目錄中的任何一臺電腦上;詳盡版數(shù)據(jù)的取得必須將本腳本在域控上運行。"
Write-Host "Please choose the data format/請選擇數(shù)據(jù)格式:"
Write-Host "1. Simplified version / 精簡版"
Write-Host "2. Detailed version / 詳盡版"
Write-Host "3. Quit / 退出"
Write-Host
$ver = Read-Host "Choice / 選擇"
if ($ver -eq 1)
{
$userList = Get-WmiObject -Class Win32_UserAccount
$userList
$userList | select AccountType, Caption, Domain, SID, FullName, Name | Export-Csv -NoTypeInformation $saveto
}
elseif ($ver -eq 2)
{
$userList = Get-ADUser -Filter {ObjectClass -eq "user"}
$userList
$userList | select DistinguishedName,Enabled,GivenName,Name,ObjectClass,ObjectGUID,SamAccountName,SID,Surname,UserPrincipalName | Export-Csv -NoTypeInformation $saveto
}
else
{
Write-Host "Canceled / 已取消"
Exit
}
Write-Host
Write-Host "The data already output to following file if there is no error occurred / 如果沒有錯誤的話澎剥,數(shù)據(jù)已經(jīng)輸出到如下文件:"
Write-Host
Write-Host $saveto
Write-Host
Write-Host
Start $env:temp
達叔傻樂(darwin.zuo@163.com)