Guest User

ex2k3_report.ps1

a guest
Aug 26th, 2013
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #########################################################
  2. ### Exch Collect Info v.0.1.1
  3. ### Efimov (ge][) Gennady, http://gexeg.blogspot.com/
  4. #########################################################
  5.  
  6. param(
  7.     [string[]]$forestlist,
  8.     [string]$resultfile,
  9.     [string]$xslfile = "ex2k3_report.xsl",
  10.     [switch]$help
  11. )
  12.  
  13. . ..\lib\adfunctions.ps1
  14. . ..\lib\FunctionImports.ps1
  15.  
  16. ##------------------------------------------------
  17. [object[]]$script:a_org = @()
  18. [object[]]$script:a_admgroups = @()
  19. [object[]]$script:a_rgs = @()
  20. [object[]]$script:a_servers = @()
  21. [object[]]$script:a_rgcons = @()
  22. [object[]]$script:a_smtpcons = @()
  23. [object[]]$script:a_sg = @()
  24. [object[]]$script:a_db = @()
  25. [object[]]$script:a_addrpolicy = @()
  26. [object[]]$script:a_oab = @()
  27. ##------------------------------------------------
  28.  
  29. function help(){
  30.     Write-Host "Efimov (ge][) Gennady, 2012"
  31.     Write-Host "http://gexeg.blogspot.com/`n"
  32.     Write-Host "Usage:`nex2k3_report.ps1 [-forestlist <array of string>] [-resultfile <String>] [-xslfile <String>] [-help]"
  33. }
  34.  
  35. function parse(){
  36.     if ($help){
  37.         help
  38.         exit
  39.     }
  40.    
  41.     if (-not $forestList){
  42.         $forestlist = @([system.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Name)
  43.         Set-Variable -Name "forestlist" -Scope 1 -Value $forestlist
  44.     }
  45.    
  46.     if (-not $resultfile){
  47.         $path = (Get-Item .).FullName
  48.         $resultfile = Join-Path -Path $path -ChildPath ("{0}_{1}.xml" -f "ex2k3_report",[System.DateTime]::Now.ToString("ddMMyyyy-hh.mm.ss"))
  49.         Set-Variable -Name "resultfile" -Scope 1 -Value $resultfile
  50.     }
  51. }
  52.  
  53. function GetExchOrgDE([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  54.     $ConfigNCStr = GetConfigNC -bindname $forest.ToString()
  55.     $result = GetObjects2 -root "LDAP://$ConfigNCStr" -filter "(objectClass=msExchOrganizationContainer)" -attrs "objectclass"
  56.     return $result.GetDirectoryEntry()
  57. }
  58.  
  59. function GetExchOrgVersion([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  60.     return $forest.Schema.FindProperty("msExchSchemaVersionPt").RangeUpper
  61. }
  62.  
  63. function GetExchOrgInfo([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  64.     $orgDE = GetExchOrgDE -forest $forest
  65.     $orgInfo = New-Object System.Object
  66.     $orgInfo | Add-Member -Name "Name" -MemberType NoteProperty -Value $orgDE.Properties["cn"][0]
  67.     $orgInfo | Add-Member -Name "MixedMode" -MemberType NoteProperty -Value $orgDE.Properties["msexchmixedmode"][0]
  68.     $orgInfo | Add-Member -Name "SchemaVer" -MemberType NoteProperty -Value (GetExchOrgVersion -forest $forest)
  69.     $orgInfo | Add-Member -Name "ObjVer" -MemberType NoteProperty -Value $orgDE.Properties["objectVersion"][0]
  70.     $orgInfo | Add-Member -Name "Forest" -MemberType NoteProperty -Value $forest.ToString()
  71.     [string[]]$admins = @()
  72.     foreach ($adm in $orgDE.Properties["msexchadmins"]){
  73.         $admins += $adm
  74.     }
  75.     $orgInfo | Add-Member -Name "Admins" -MemberType NoteProperty -Value $admins
  76.     $script:a_org += $orgInfo
  77. }
  78.  
  79. function GetAdmGroupInfo([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  80.     $orgDE = GetExchOrgDE -forest $forest
  81.     $results = GetObjects2 -root $orgDE -filter "(objectclass=msExchAdminGroup)" -attrs @("cn","msexchadmins")
  82.     foreach($result in $results){
  83.         $AdmGroupInfo = New-Object System.Object
  84.         $AdmGroupInfo | Add-Member -Name "Name" -MemberType NoteProperty -Value $result.Properties["cn"][0]
  85.         [string[]]$admins = @()
  86.         foreach ($adm in $result.Properties["msexchadmins"]){
  87.             $admins += $adm
  88.         }
  89.         $AdmGroupInfo | Add-Member -Name "Admins" -MemberType NoteProperty -Value $admins
  90.         $AdmGroupInfo | Add-Member -Name "OrgName" -MemberType NoteProperty -Value $orgDE.Properties["cn"][0]
  91.         $AdmGroupInfo | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.ToString()
  92.         $script:a_admgroups += $AdmGroupInfo
  93.     }
  94. }
  95.  
  96. function GetRoutingGroupInfo([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  97.     $orgDE = GetExchOrgDE -forest $forest
  98.     $results = GetObjects2 -root $orgDE -filter "(objectclass=msExchRoutingGroup)" -attrs @("cn")
  99.     foreach($result in $results){
  100.         $RoutingGroupInfo = New-Object System.Object
  101.         $RoutingGroupInfo | Add-Member -Name "Name" -MemberType NoteProperty -Value $result.Properties["cn"][0]
  102.         $RoutingGroupInfo | Add-Member -Name "AdmGroup" -MemberType NoteProperty -Value $result.GetDirectoryEntry().PSBase.Parent.PSBase.Parent.Properties["cn"][0]
  103.         $RoutingGroupInfo | Add-Member -Name "OrgName" -MemberType NoteProperty -Value $orgDE.Properties["cn"][0]
  104.         $RoutingGroupInfo | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.ToString()
  105.         $script:a_rgs += $RoutingGroupInfo
  106.     }
  107. }
  108.  
  109. function GetExchServerInfo([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  110.     $orgDE = GetExchOrgDE -forest $forest
  111.     $results = GetObjects2 -root $orgDE -filter "(objectclass=msExchExchangeServer)" -attrs @("cn")
  112.     foreach($result in $results){
  113.         $ExchServer = New-Object System.Object
  114.         $ServerDE = $result.GetDirectoryEntry()
  115.         $ExchServer | Add-Member -Name "Name" -MemberType NoteProperty -Value $ServerDE.Properties["cn"][0]
  116.         $ExchServer | Add-Member -Name "LegacyDN" -MemberType NoteProperty -Value $ServerDE.Properties["legacyexchangedn"][0]
  117.         $ExchServer | Add-Member -Name "MessTrackEnabled" -MemberType NoteProperty -Value $ServerDE.Properties["messagetrackingenabled"][0]
  118.         $ExchServer | Add-Member -Name "ExchDataPath" -MemberType NoteProperty -Value $ServerDE.Properties["msexchdatapath"][0]
  119.         $ExchServer | Add-Member -Name "ExchInstallPath" -MemberType NoteProperty -Value $ServerDE.Properties["msexchinstallpath"][0]
  120.         $ExchServer | Add-Member -Name "Version" -MemberType NoteProperty -Value $ServerDE.Properties["serialnumber"][0]
  121.         $ExchServer | Add-Member -Name "ServerRole" -MemberType NoteProperty -Value $ServerDE.Properties["serverrole"][0]
  122.         $routingGroup = [adsi]$("LDAP://"+$ServerDE.Properties["msexchhomeroutinggroup"][0])
  123.         $ExchServer | Add-Member -Name "RG" -MemberType NoteProperty -Value $routingGroup.Properties["cn"][0]
  124.         $ExchServer | Add-Member -Name "AdmGroup" -MemberType NoteProperty -Value $ServerDE.PSBase.Parent.PSBase.Parent.PSBase.Properties["cn"][0]
  125.         $script:a_servers += $ExchServer
  126.     }
  127. }
  128.  
  129. function GetRoutingGroupConnectorsInfo([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  130.     $orgDE = GetExchOrgDE -forest $forest
  131.     $results = GetObjects2 -root $orgDE -filter "(objectclass=msExchRoutingGroupConnector)" -attrs @("cn")
  132.     foreach($result in $results){
  133.         $RGConDE = $result.GetDirectoryEntry()
  134.         $RGConObj = New-Object System.Object
  135.         $RGConObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $RGConDE.Properties["cn"][0]
  136.         $RGConObj | Add-Member -Name "SourceRG" -MemberType NoteProperty -Value $RGConDE.PsBase.Parent.PsBase.Parent.PSBase.Properties["cn"][0]
  137.         [string[]]$sourceServersDN = @()
  138.         [string[]]$sourceServersNames = @()
  139.         if ($RGConDE.Properties["msExchSourceBridgeheadServersDN"]){
  140.             foreach($serverDN in $RGConDE.Properties["msExchSourceBridgeheadServersDN"]){
  141.                 $smtpvsDE = [adsi]"LDAP://$serverDN"
  142.                 $sourceServersDN += $serverDN
  143.                 $sourceServersNames += $smtpvsDE.Properties["msExchSmtpFullyQualifiedDomainName"][0]
  144.             }
  145.         }
  146.         else {
  147.             $sourceServersDN = "All"
  148.             $sourceServersNames = "All"
  149.         }
  150.         $RGConObj | Add-Member -Name "SourceBHDNs" -MemberType NoteProperty -Value $sourceServersDN
  151.         $RGConObj | Add-Member -Name "SourceBHNames" -MemberType NoteProperty -Value $sourceServersNames
  152.         $DestRGDE = [adsi]("LDAP://"+$RGConDE.Properties["msExchDestinationRGDN"][0])
  153.         $RGConObj | Add-Member -Name "DestRG" -MemberType NoteProperty -Value $DestRGDE.Properties["cn"][0]
  154.         [string[]]$DestServersDN = @()
  155.         [string[]]$DestServersNames = @()
  156.         if ($RGConDE.Properties["msExchTargetBridgeheadServersDN"]){
  157.             foreach($serverDN in $RGConDE.Properties["msExchTargetBridgeheadServersDN"]){
  158.                 $smtpvsDE = [adsi]"LDAP://$serverDN"
  159.                 $DestServersDN += $serverDN
  160.                 $DestServersNames += $smtpvsDE.Properties["msExchSmtpFullyQualifiedDomainName"][0]
  161.             }
  162.         }
  163.         $RGConObj | Add-Member -Name "TargetBHDNs" -MemberType NoteProperty -Value $DestServersDN
  164.         $RGConObj | Add-Member -Name "TargetBHNames" -MemberType NoteProperty -Value $DestServersNames
  165.         $RGConObj | Add-Member -Name "Cost" -MemberType NoteProperty -Value $RGConDE.Properties["cost"][0]
  166.         $RGConObj | Add-Member -Name "dlMemDefault" -MemberType NoteProperty -Value $RGConDE.Properties["dlMemDefault"][0]
  167.         [string[]]$authorigin = @()
  168.         foreach($authuser in $RGConDE.Properties["authorigin"]){
  169.             $authorigin += $authuser
  170.         }
  171.         $RGConObj | Add-Member -Name "authOrigin" -MemberType NoteProperty -Value $authorigin
  172.         [string[]]$unauthorigin = @()
  173.         foreach($unauthuser in $RGConDE.Properties["unauthorigin"]){
  174.             $unauthorigin += $unauthuser
  175.         }
  176.         $RGConObj | Add-Member -Name "unauthOrigin" -MemberType NoteProperty -Value $unauthorigin
  177.         $RGConObj | Add-Member -Name "delivContLength" -MemberType NoteProperty -Value $RGConDE.Properties["delivContLength"][0]
  178.         $RGConObj | Add-Member -Name "heuristics" -MemberType NoteProperty -Value $RGConDE.Properties["heuristics"][0]
  179.         $RGConObj | Add-Member -Name "DisallowPriority" -MemberType NoteProperty -Value $RGConDE.Properties["msExchRoutingDisallowPriority"][0]
  180.         $RGConObj | Add-Member -Name "NoPFConnection" -MemberType NoteProperty -Value $RGConDE.Properties["msExchNoPFConnection"][0]
  181.         $RGConObj | Add-Member -Name "OrgName" -MemberType NoteProperty -Value $orgDE.Properties["cn"][0]
  182.         $RGConObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.ToString()
  183.         $script:a_rgcons += $RGConObj
  184.     }
  185. }
  186.  
  187. function GetSMTPConnectorsInfo([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  188.     $orgDE = GetExchOrgDE -forest $forest
  189.     $results = GetObjects2 -root $orgDE -filter "(objectclass=msExchRoutingSMTPConnector)" -attrs @("cn")
  190.     foreach($result in $results){
  191.         $SMTPConDE = $result.GetDirectoryEntry()
  192.         $SMTPConObj = New-Object System.Object
  193.         $SMTPConObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $SMTPConDE.Properties["cn"][0]
  194.         $SMTPConObj | Add-Member -Name "SourceRG" -MemberType NoteProperty -Value $SMTPConDE.PsBase.Parent.PsBase.Parent.PSBase.Properties["cn"][0]
  195.         [string[]]$sourceServersDN = @()
  196.         [string[]]$sourceServersNames = @()
  197.         if ($SMTPConDE.Properties["msExchSourceBridgeheadServersDN"]){
  198.             foreach($serverDN in $SMTPConDE.Properties["msExchSourceBridgeheadServersDN"]){
  199.                 $smtpvsDE = [adsi]"LDAP://$serverDN"
  200.                 $sourceServersDN += $serverDN
  201.                 $sourceServersNames += $smtpvsDE.Properties["msExchSmtpFullyQualifiedDomainName"][0]
  202.             }
  203.         }
  204.         else {
  205.             $sourceServersDN = "All"
  206.             $sourceServersNames = "All"
  207.         }
  208.         $SMTPConObj | Add-Member -Name "SourceBHDNs" -MemberType NoteProperty -Value $sourceServersDN
  209.         $SMTPConObj | Add-Member -Name "SourceBHNames" -MemberType NoteProperty -Value $sourceServersNames
  210.         [string[]]$routinglist = @()
  211.         foreach($route in $SMTPConDE.Properties["routingList"]){
  212.             $routinglist += $route
  213.         }
  214.         $SMTPConObj | Add-Member -Name "RoutingList" -MemberType NoteProperty -Value $routinglist
  215.         $SMTPConObj | Add-Member -Name "DeliveryTo" -MemberType NoteProperty -Value $SMTPConDE.Properties["msExchSmtpSmarthost"][0]
  216.         $SMTPConObj | Add-Member -Name "dlMemDefault" -MemberType NoteProperty -Value $SMTPConDE.Properties["dlMemDefault"][0]
  217.         [string[]]$authorigin = @()
  218.         foreach($authuser in $SMTPConDE.Properties["authorigin"]){
  219.             $authorigin += $authuser
  220.         }
  221.         $SMTPConObj | Add-Member -Name "authOrigin" -MemberType NoteProperty -Value $authorigin
  222.         [string[]]$unauthorigin = @()
  223.         foreach($unauthuser in $SMTPConDE.Properties["unauthorigin"]){
  224.             $unauthorigin += $unauthuser
  225.         }
  226.         $SMTPConObj | Add-Member -Name "unauthOrigin" -MemberType NoteProperty -Value $unauthorigin
  227.         $SMTPConObj | Add-Member -Name "delivContLength" -MemberType NoteProperty -Value $SMTPConDE.Properties["delivContLength"][0]
  228.         $SMTPConObj | Add-Member -Name "heuristics" -MemberType NoteProperty -Value $SMTPConDE.Properties["heuristics"][0]
  229.         $SMTPConObj | Add-Member -Name "DisallowPriority" -MemberType NoteProperty -Value $SMTPConDE.Properties["msExchRoutingDisallowPriority"][0]
  230.         $SMTPConObj | Add-Member -Name "NoPFConnection" -MemberType NoteProperty -Value $SMTPConDE.Properties["msExchNoPFConnection"][0]
  231.         $SMTPConObj | Add-Member -Name "msEXchSmtpOutboundSecurityFlag" -MemberType NoteProperty -Value $SMTPConDE.Properties["msEXchSmtpOutboundSecurityFlag"][0]
  232.         $SMTPConObj | Add-Member -Name "OrgName" -MemberType NoteProperty -Value $orgDE.Properties["cn"][0]
  233.         $SMTPConObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.ToString()
  234.         $script:a_smtpcons += $SMTPConObj
  235.     }
  236. }
  237.  
  238. function GetLogFilesInfo([string]$dirName, [string]$prefix){
  239.     Write-Host "GetLogFilesInfo $dirname"
  240.     [string[]]$files = [System.IO.Directory]::GetFiles($dirName, $prefix+"*")
  241.     if (-not $files) {
  242.         return 0,$null
  243.     }
  244.     [System.Int64]$sumsize = 0
  245.     $lastCreateDate = [datetime]::Now
  246.     foreach($file in $files){
  247.         $fileInfo = New-Object System.IO.FileInfo($file)
  248.         $sumSize += $fileInfo.Length
  249.         if ($fileInfo.CreationTime -lt $lastCreateDate){
  250.             $lastCreateDate = $fileInfo.CreationTime
  251.         }
  252.     }
  253.     return @($sumsize, $lastCreateDate)
  254. }
  255.  
  256.  
  257. function GetSGInfo([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  258.     $orgDE = GetExchOrgDE -forest $forest
  259.     $results = GetObjects2 -root $orgDE -filter "(objectclass=msExchStorageGroup)" -attrs @("cn")
  260.     foreach($result in $results){
  261.         $SGDE = $result.GetDirectoryEntry()
  262.         $SGObj = New-Object System.Object
  263.         $SGObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $SGDE.Properties["cn"][0]
  264.         $serverName = $SGDE.PsBase.Parent.PsBase.Parent.PSBase.Properties["cn"][0]
  265.         $SGObj | Add-Member -Name "Server" -MemberType NoteProperty -Value $serverName
  266.         $SGObj | Add-Member -Name "CircularLogging" -MemberType NoteProperty -Value $SGDE.Properties["msExchESEParamCircularLog"][0]
  267.         $LogBaseName = $SGDE.Properties["msExchESEParamBaseName"][0]
  268.         $LogFilePath = $SGDE.Properties["msExchESEParamLogFilePath"][0]
  269.         $SGObj | Add-Member -Name "LogBaseName" -MemberType NoteProperty -Value $LogBaseName
  270.         $SGObj | Add-Member -Name "LogFilePath" -MemberType NoteProperty -Value $LogFilePath
  271.         $SGObj | Add-Member -Name "LogSysPath" -MemberType NoteProperty -Value $SGDE.Properties["msExchESEParamSystemPath"][0]
  272.         $remoteDir = "\\" + $serverName + "\" + $LogFilePath.Replace(":","`$")
  273.         $ret = GetLogFilesInfo -dirname $remoteDir -prefix $LogBaseName
  274.         $SGObj | Add-Member -Name "LogSize" -MemberType NoteProperty -Value $ret[0]
  275.         $SGObj | Add-Member -Name "LastLogDate" -MemberType NoteProperty -Value $ret[1]
  276.         $SGObj | Add-Member -Name "OrgName" -MemberType NoteProperty -Value $orgDE.Properties["cn"][0]
  277.         $SGObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.ToString()
  278.         $script:a_sg += $SGObj
  279.     }
  280. }
  281.  
  282. function GetFileSize($filename){
  283.     Write-Host "GetFileSize $filename"
  284.     $fileInfo = New-Object System.IO.FileInfo($filename)
  285.     return $fileInfo.Length
  286. }
  287.  
  288.  
  289. function GetDBInfo([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  290.     $orgDE = GetExchOrgDE -forest $forest
  291.     $results = GetObjects2 -root $orgDE -filter "(objectclass=msExchPrivateMDB)" -attrs @("cn")
  292.     foreach($result in $results){
  293.         $DBDE = $result.GetDirectoryEntry()
  294.         $DBObj = New-Object System.Object
  295.         $DBObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $DBDE.Properties["cn"][0]
  296.         $oab = ([adsi]("LDAP://"+$DBDE.Properties["msExchUseOAB"][0])).Properties["cn"][0]
  297.         $DBObj | Add-Member -Name "OAB" -MemberType NoteProperty -Value $oab
  298.         $edbFile = $DBDE.Properties["msExchEDBFile"][0]
  299.         $stmFile = $DBDE.Properties["msExchSLVFile"][0]
  300.         $DBObj | Add-Member -Name "EDBFile" -MemberType NoteProperty -Value $edbFile
  301.         $DBObj | Add-Member -Name "STMFile" -MemberType NoteProperty -Value $stmFile
  302.         $serverName = ([adsi]("LDAP://" + $DBDE.Properties["msExchOwningServer"][0])).Properties["cn"][0]
  303.         $DBObj | Add-Member -Name "Server" -MemberType NoteProperty -Value $serverName
  304.         $pfDB = ([adsi]("LDAP://" + $DBDE.Properties["msExchHomePublicMDB"][0])).Properties["cn"][0]
  305.         $DBObj | Add-Member -Name "PFDB" -MemberType NoteProperty -Value $pfDB
  306.         $DBObj | Add-Member -Name "KeepMBX" -MemberType NoteProperty -Value $DBDE.Properties["msExchMailboxRetentionPeriod"][0]
  307.         $DBObj | Add-Member -Name "NotStartupMount" -MemberType NoteProperty -Value $DBDE.Properties["msExchEDBOffline"][0]
  308.         $DBObj | Add-Member -Name "NoOverride" -MemberType NoteProperty -Value $DBDE.Properties["msExchPatchMDB"][0]
  309.         $DBObj | Add-Member -Name "NotPermanentlyDelete" -MemberType NoteProperty -Value $DBDE.Properties["deletedItemFlags"][0]
  310.         $DBObj | Add-Member -Name "KeepDelItems" -MemberType NoteProperty -Value $DBDE.Properties["garbageCollPeriod"][0]
  311.         $DBObj | Add-Member -Name "IssueWarning" -MemberType NoteProperty -Value $DBDE.Properties["mDBStorageQuota"][0]
  312.         $DBObj | Add-Member -Name "ProhibitSend" -MemberType NoteProperty -Value $DBDE.Properties["mdbOverQuotaLimit"][0]
  313.         $DBObj | Add-Member -Name "ProhibitSendReceive" -MemberType NoteProperty -Value $DBDE.Properties["mDBOverHardQuotaLimit"][0]
  314.         $DBObj | Add-Member -Name "EDBSize" -MemberType NoteProperty -Value (GetFileSize -filename ("\\$serverName\" + $edbFile.Replace(":","`$")))
  315.         $DBObj | Add-Member -Name "STMSize" -MemberType NoteProperty -Value (GetFileSize -filename ("\\$serverName\" + $stmFile.Replace(":","`$")))
  316.         $DBObj | Add-Member -Name "SGName" -MemberType NoteProperty -Value $DBDE.PSBase.Parent.PSBase.Parent.PSbase.Properties["cn"][0]
  317.         $DBObj | Add-Member -Name "OrgName" -MemberType NoteProperty -Value $orgDE.Properties["cn"][0]
  318.         $DBObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.ToString()
  319.         $script:a_db += $DBObj
  320.     }
  321. }
  322.  
  323. function GetAddrPolicyInfo([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  324.     $orgDE = GetExchOrgDE -forest $forest
  325.     $results = GetObjects2 -root $orgDE -filter "(objectclass=msExchRecipientPolicy)" -attrs @("cn")
  326.     foreach($result in $results){
  327.         $AddrDE = $result.GetDirectoryEntry()
  328.         $AddrObj = New-Object System.Object
  329.         $AddrObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $AddrDE.Properties["cn"][0]
  330.         $AddrObj | Add-Member -Name "Filter" -MemberType NoteProperty -Value $AddrDE.Properties["purportedSearch"][0]
  331.         $AddrObj | Add-Member -Name "PolicyOrder" -MemberType NoteProperty -Value $AddrDE.Properties["msExchPolicyOrder"][0]
  332.         [string[]]$nonAuthDomains = @()
  333.         foreach($domain in $AddrDE.Properties["msExchNonAuthoritativeDomains"]){
  334.             $nonAuthDomains += $domain
  335.         }
  336.         $AddrObj | Add-Member -Name "NonAuthDomain" -MemberType NoteProperty -Value $nonAuthDomains
  337.         [string[]]$gatewayProxy = @()
  338.         foreach($domain in $AddrDE.Properties["gatewayProxy"]){
  339.             $gatewayProxy += $domain
  340.         }
  341.         $AddrObj | Add-Member -Name "Domains" -MemberType NoteProperty -Value $gatewayProxy
  342.         [string[]]$disabledProxy = @()
  343.         foreach($domain in $AddrDE.Properties["disabledGatewayProxy"]){
  344.             $disabledProxy += $domain
  345.         }
  346.         $AddrObj | Add-Member -Name "DisabledDomains" -MemberType NoteProperty -Value $disabledProxy
  347.         $AddrObj | Add-Member -Name "Enable" -MemberType NoteProperty -Value $AddrDE.Properties["msExchPolicyEnabled"][0]
  348.         [string[]]$infoarr = @()
  349.         $gatewayProxy += $disabledProxy
  350.         foreach($domain in $gatewayProxy){
  351.             $dom = $domain
  352.             if ($nonAuthDomains -contains $domain){
  353.                 $dom += "(NonAuth)"
  354.             }
  355.             if ($disabledProxy -contains $domain){
  356.                 $dom += "(Disabled)"
  357.             }
  358.             $infoarr += $dom
  359.         }
  360.         $AddrObj | Add-Member -Name "Info" -MemberType NoteProperty -Value $infoarr
  361.         $AddrObj | Add-Member -Name "OrgName" -MemberType NoteProperty -Value $orgDE.Properties["cn"][0]
  362.         $AddrObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.ToString()
  363.         $script:a_addrpolicy += $AddrObj
  364.     }
  365. }
  366.  
  367. function GetOABInfo([System.DirectoryServices.ActiveDirectory.Forest]$forest){
  368.     $orgDE = GetExchOrgDE -forest $forest
  369.     $results = GetObjects2 -root $orgDE -filter "(objectclass=msExchOAB)" -attrs @("cn")
  370.     foreach($result in $results){
  371.         $OABDE = $result.GetDirectoryEntry()
  372.         $OABObj = New-Object System.Object
  373.         $OABObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $OABDE.Properties["cn"][0]
  374.         $OABObj | Add-Member -Name "OABVersion" -MemberType NoteProperty -Value $OABDE.Properties["doOABVersion"][0]
  375.         $OABObj | Add-Member -Name "isDefault" -MemberType NoteProperty -Value $OABDE.Properties["msExchOABDefault"][0]
  376.         $OABObj | Add-Member -Name "OABServer" -MemberType NoteProperty `
  377.             -Value ([adsi]("LDAP://" + $OABDE.Properties["offLineABServer"][0])).Properties["cn"][0]
  378.         [string[]]$addresslists = @()
  379.         foreach($item in $OABDE.Properties["offLineABContainers"]){
  380.             $addresslists += $item
  381.         }
  382.         $OABObj | Add-Member -Name "AddrList" -MemberType NoteProperty -Value $addresslists
  383.         $script:a_oab += $OABObj
  384.     }
  385. }
  386.  
  387. parse
  388.  
  389. Write-Host "Запуск сбора информации"
  390.  
  391. $forestlist | foreach {
  392.  
  393.     $forest = GetForest -forestName $_
  394.     Write-Host "Лес $_"
  395.     Write-Host "Получаем информацию об организации"
  396.     GetExchOrgInfo -forest $forest
  397.     Write-Host "Получаем информацию об административных группах"
  398.     GetAdmGroupInfo -forest $forest
  399.     Write-Host "Получаем информацию о группах маршрутизации"
  400.     GetRoutingGroupInfo -forest $forest
  401.     Write-Host "Получаем информацию о серверах" 
  402.     GetExchServerInfo -forest $forest
  403.     Write-Host "Получаем информацию о RG-коннекторах"
  404.     GetRoutingGroupConnectorsInfo -forest $forest
  405.     Write-Host "Получаем информацию о SMTP-коннекторах"  
  406.     GetSMTPConnectorsInfo -forest $forest
  407.     Write-Host "Получаем информацию о группах хранения"  
  408.     GetSGInfo -forest $forest
  409.     Write-Host "Получаем информацию о хранилищах почтовых ящиков"
  410.     GetDBInfo -forest $forest
  411.     Write-Host "Получаем информацию об адресных политиках"
  412.     GetAddrPolicyInfo -forest $forest
  413.     Write-Host "Получаем информацию об OAB"
  414.     GetOABInfo -forest $forest
  415. }
  416.  
  417. $report = New-Object System.Object
  418. $report | Add-Member -Name "OrganizationInfo" -MemberType NoteProperty $script:a_org
  419. $report | Add-Member -Name "AdmGroupInfo" -MemberType NoteProperty $script:a_admgroups
  420. $report | Add-Member -Name "RoutingGroupInfo" -MemberType NoteProperty $script:a_rgs
  421. $report | Add-Member -Name "ServerInfo" -MemberType NoteProperty $script:a_servers
  422. $report | Add-Member -Name "RGConnectorInfo" -MemberType NoteProperty $script:a_rgcons
  423. $report | Add-Member -Name "SMTPConnectorInfo" -MemberType NoteProperty $script:a_smtpcons
  424. $report | Add-Member -Name "SGInfo" -MemberType NoteProperty $script:a_sg
  425. $report | Add-Member -Name "DBInfo" -MemberType NoteProperty $script:a_db
  426. $report | Add-Member -Name "AddrPolicyInfo" -MemberType NoteProperty $script:a_addrpolicy
  427. $report | Add-Member -Name "OABInfo" -MemberType NoteProperty $script:a_oab
  428.  
  429. $report | Export-Clixml $resultfile
  430. $xmlstr = Get-Content $resultfile
  431. $xmlstr = "<?xml version=`"1.0`"?>`n`r<?xml-stylesheet type=`"text/xsl`" href=`"$xslfile`"?>`n`r" + $xmlstr
  432. Set-Content -Path $resultfile -Encoding UTF8 -Value $xmlstr
Advertisement
Add Comment
Please, Sign In to add comment