• 邮件系统审计,需要导出邮箱系统的admins权限清单,脚本如下:
    1. $server_list = @("BJMAIL1","BJMAIL2","BJMAIL3","BJMAIL4","BJMAIL5","BJMAIL6","BJMAIL7","BJMAIL8","BJMAIL9","BJMAIL10","BJMAIL11","BJMAIL12")
    2. # 定义文件导出目录
    3. $FilePath = "D:\test"
    4. Get-ADGroupMember -Identity "Organization Management" | Select-Object name,samaccountname | Export-Csv -Encoding utf8 "$FilePath\OrganizationManagement.csv" -NoTypeInformation
    5. Get-ADGroupMember -Identity "Exchange Trusted Subsystem" | Select-Object name,samaccountname | Export-Csv -Encoding utf8 "$FilePath\ExchangeTrustedSubsystem.csv" -NoTypeInformation
    6. Get-ADGroupMember -Identity "Domain Admins" | Select-Object name,samaccountname | Export-Csv -Encoding utf8 "$FilePath\DomainAdmins.csv" -NoTypeInformation
    7. function get-user {
    8. param ($computer)
    9. $groups = Get-WmiObject -Class Win32_GroupUser -ComputerName $computer
    10. $admins = $groups | where-object {$_.groupcomponent -like '*"Administrators"'}
    11. #获取groupcomponent属性与Administrators字符相关的行数
    12. $admins | ForEach-Object{
    13. $_.partcomponent -match ".+Domain\=(.+)\,Name\=(.+)$" > $nul
    14. #这里使用正则表达式,获取并拿出匹配【.Domain="test",Name="Administrators"】的字符
    15. $_.PSComputerName + "\"+$matches[1].trim('"') + "\" + $matches[2].trim('"')
    16. #去掉分号,并把导出的字符以自己想要呈现的格式组合
    17. }
    18. }
    19. foreach ( $hostname in $server_list){
    20. if (!(test-connection $hostname -Count 1 -Quiet)){
    21. #将无法ping通的服务器记录在一个txt文件中
    22. Write-Output $hostname | Out-File "$FilePath\administrator-error.txt" -Append}
    23. else{
    24. #导出Administrators组内的成员
    25. Get-User -computer $hostname | Out-File "$FilePath\Administrator-users.txt" -Append}
    26. }