Bản thân tôi không phải là người quản trị hệ thống/PowerShell, nhưng tôi gặp sự cố khi truy vấn Powershell này hoạt động.
Nhu cầu là kéo lại tất cả người dùng trong một Nhóm bảo mật Windows cụ thể và định dạng chúng theo một cách cụ thể (được hiển thị bên dưới), tuy nhiên, tôi đang gặp một số sự cố khi xác định lý do tại sao bộ lọc của tôi cho Nhóm bảo mật không hoạt động và tự hỏi liệu có vấn đề gì xảy ra với cách tôi thiết lập bộ lọc.
#đoạn trích
$searcher.filter = "(&(memberof=CN=My Windows Security Group,OU=SecurityGroups,OU=Messaging,OU=Enterprise,DC=****,DC=****)(objectCategory=*)) "
$results = $searcher.findall()
Tôi có một điểm ngắt được thiết lập trong PowerShell ISE, tuy nhiên $results không chứa bất kỳ giá trị nào trong khi gỡ lỗi.
Tôi đã lập mô hình này từ một tập lệnh hiện có từ một đồng nghiệp, nơi có vẻ như anh ấy đang truy vấn DL và đang thấy các giá trị kết quả $ khi gỡ lỗi này:
#--------------------------------------------- --------
Ví dụ về bộ lọc #DL (hoạt động)
#--------------------------------------------- --------
$Searcher.Filter = "(&(memberOf=CN=DL_TestApp_Admin,OU=Danh sách phân phối,OU=Nhắn tin,OU=Enterprise,DC=dcInfo,DC=dcInfo,DC=****)(objectCategory=*))"
$results = $searcher.findall()
Đây là toàn bộ tập lệnh PS (do tôi sửa đổi) để lọc Nhóm bảo mật Windows
$curdate = (Nhận ngày).ToString("MMddyyyy")
$baseDN = "LDAP://"
$Searcher = Dịch vụ thư mục đối tượng mới.DirectorySearcher
$searcher.searchroot = đối tượng mới system.directoryservices.directoryentry($basedn)
#--------------------------------------------- --------
#Bộ lọc nhóm bảo mật Windows (không hoạt động)
#--------------------------------------------- --------
$searcher.filter = "(&(memberof=CN=My Windows Security Group,OU=SecurityGroups,OU=Messaging,OU=Enterprise,DC=****,DC=****)(objectCategory=*)) "
$results = $searcher.findall()
#--------------------------------------------- --------
#Xây dựng tập dữ liệu ở định dạng cụ thể
#--------------------------------------------- --------
$usercsv = $results | #-Vật {
Đối tượng mới -TypeName PSObject -Property @{
"ID người dùng" = $_.properties['samAccountName'][0]
"Vai trò người dùng" = "Blah"
"Vai trò Nâng cao" = "Y"
"Người dùng nội bộ" = "Y"
"Ngày đăng nhập lần cuối" = $null
"Thông tin cụ thể về ứng dụng 1" = $null
"Thông tin dành riêng cho ứng dụng 2" = $null
"Ngày tạo tài khoản" = $null
"Ngày thay đổi mật khẩu cuối cùng" = $null
"Địa chỉ email của người dùng" = $_.properties['mail'][0]
"Tên người dùng" = $null
"Họ của người dùng" = $null
"Thông tin dành riêng cho ứng dụng 3" = $null
"Nhóm đánh giá" = $null
}
}
# xuất sang csv
$usercsv | Chọn đối tượng -Thuộc tính "ID người dùng","Vai trò người dùng","Vai trò nâng cao","Người dùng nội bộ","Ngày đăng nhập lần cuối","Thông tin cụ thể của ứng dụng 1","Thông tin cụ thể của ứng dụng 2","Ngày tạo tài khoản ","Ngày thay đổi mật khẩu gần đây nhất","Địa chỉ email của người dùng","Tên người dùng","Họ của người dùng","Thông tin cụ thể của ứng dụng 3","Nhóm đánh giá" | Xuất-Csv -NoTypeInformation -Path "UsersListing_$curdate.csv"
Máy chủ ghi "Đã ghi", $results.Count, "(các) bản ghi"
#xóa CR LF cuối cùng
#TODO: Di chuyển chức năng này thành một chức năng chung trong một tập lệnh riêng cho tất cả
kịch bản để gọi
$stream = [IO.File]::OpenWrite("UsersListing_$curdate.csv")
$stream.SetLength($stream.Length - 2)
$stream.Close()
$stream.Dispose()
Ban đầu, tôi đã viết cái này để chạy trong đường dẫn phát hành DevOps Poweshell như sau để tạo tệp csv:
$Members = Get-ADGroup -Filter {Name -eq "WSG"} -Properties Member |
Select-Object -ExpandProperty Thành viên
$GlobalCatalog = "$((Get-ADDomainController -Discover).Name):xxxx"
$output = Foreach ($Người dùng trong $Thành viên)
{
Get-ADUser -Identity $User -Server $GlobalCatalog -Properties CN,
EmailAddress, AccountExpirationDate, Created, HomePage, LastLogonDate,
PasswordLastSet, whenCreated | Chọn đối tượng CN,
SamAccountName,EmailAddress, AccountExpirationDate, Created, Enabled,
Trang chủ, Ngày đăng nhập cuối cùng, Tên, Mật khẩuLastSet, UserPrincipalName,
khi được tạo
}
# xuất tệp csv
đầu ra $ | Xuất-Csv $Env:TEMP\Users.csv -NoTypeInformation
Trong trường hợp này, định dạng đầu ra không quan trọng và tôi không chắc liệu mình có thể sửa đổi truy vấn này để xuất kết quả sang định dạng này hay không:
"ID người dùng" = $_.properties['samAccountName'][0]
"Vai trò người dùng" = "Blah"
"Vai trò Nâng cao" = "Y"
"Người dùng nội bộ" = "Y"
"Ngày đăng nhập lần cuối" = $null
"Thông tin cụ thể về ứng dụng 1" = $null
"Thông tin dành riêng cho ứng dụng 2" = $null
"Ngày tạo tài khoản" = $null
"Ngày thay đổi mật khẩu cuối cùng" = $null
"Địa chỉ email của người dùng" = $_.properties['mail'][0]
"Tên người dùng" = $null
"Họ của người dùng" = $null
"Thông tin dành riêng cho ứng dụng 3" = $null
"Nhóm đánh giá" = $null
Và kết quả từ truy vấn này có định dạng cụ thể sau:
CN:
SamAccountName :
Địa chỉ email :
Ngày hết hạn tài khoản:
Tạo :
Đã bật:
Trang chủ :
Ngày đăng nhập cuối cùng:
Tên :
Mật khẩuLastSet:
UserPrincipalName :
khi được tạo:
Cảm ơn trước cho bất kỳ sự giúp đỡ.