Điểm:0

Làm cách nào để Tìm tất cả Thành viên của Nhóm Bảo mật Windows trong PowerShell, Gán cho Tên Biến và Xuất ra CSV?

lá cờ za

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 đỡ.

Điểm:2
lá cờ ng

Không cần phải bận tâm với tìm kiếm LDAP thực tế vì Mô-đun PowerShell Active Directory đã được giới thiệu trong Windows Server 2008 R2.

Get-ADGroupMember là những gì bạn đang tìm kiếm. Nếu sau đó bạn cần biết thêm chi tiết về các thành viên trong nhóm, bạn có thể sử dụng Get-ADUser trên chúng để có được bất kỳ thông tin nào bạn cần.

Mô-đun AD PowerShell được cài đặt tự động trên tất cả các Bộ điều khiển miền, nhưng bạn có thể cài đặt nó trên bất kỳ hệ thống Windows Server nào bằng cách bật tính năng Windows tương ứng:

Cài đặt-Tính năng Windows RSAT-AD-PowerShell

Bạn cũng có thể cài đặt nó trên các hệ thống máy khách Windows như một phần của Công cụ quản trị máy chủ từ xa.

Tikhon avatar
lá cờ za
Có ví dụ triển khai nào mà tôi có thể làm theo không?
Semicolon avatar
lá cờ jo
@jazzBox Ít nhất bạn đã xem trang hướng dẫn được liên kết chưa?
Điểm:1
lá cờ za

Đây là Poweshell cuối cùng được phát triển để đạt được kết quả như mong muốn:

$curdate = (Nhận ngày).ToString("MMddyyyy")
#--------------------------------------------- ------------------------------
# Nhận thành viên cho Nhóm bảo mật Windows
#--------------------------------------------- ------------------------------
$Members = Get-ADGroup -Filter {Name -eq "My AD Group"} -Properties Member | Select-Object -ExpandProperty Thành viên

$GlobalCatalog = "$((Get-ADDomainController -Discover).Name):1234"
kết quả $ = @()

Foreach ($Người dùng trong $Thành viên)
{    
    $userInfo = Get-ADUser -Identity $User -Server $GlobalCatalog -Properties SamAccountName, EmailAddress, LastLogonDate
    $details = [đã đặt hàng] @{
        
        "ID Active Directory" = $userInfo.SamAccountName
        "Vai trò người dùng" = "Nhóm quảng cáo của tôi"
        "Vai trò Nâng cao" = "N"
        "Người dùng nội bộ" = "Y"
        "Ngày đăng nhập lần cuối" = $userInfo.LastLogonDate
        "Thông tin cụ thể về ứng dụng 1" = $null
        "Thông tin cụ thể của ứng dụng 2" = $null
        "Ngày tạo tài khoản" = $null
        "Ngày thay đổi người khuyết tật cuối cùng" = $null
        "Địa chỉ email người dùng" = $userInfo.EmailAddress
        "Tên người dùng" = $null
        "Họ của người dùng" = $null
        "Thông tin cụ thể của ứng dụng 3" = $null
        "Nhóm đánh giá" = $null

    }
    $results = Đối tượng mới PSObject -Property $details
}
#--------------------------------------------- --------
#xuất kết quả sang csv
#--------------------------------------------- --------
$kết quả | Xuất-Csv -NoTypeInformation -Path "UsersListing_$curdate.csv"

Tên biến (ID Active Directory, Vai trò người dùng, v.v.) đại diện cho các tiêu đề cột trong tệp CSV.

Hy vọng nó sẽ giúp được ai đó.

Điểm:0
lá cờ cn

Bạn cần chỉ định một DN cơ sở. Đây thường là tên miền gốc DN.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.