Guest User

ex2k7_report.ps1

a guest
Aug 26th, 2013
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #########################################################
  2. ### Exch2k7 Collect Info v.0.1.2
  3. ### Efimov (ge][) Gennady, http://gexeg.blogspot.com/
  4. #########################################################
  5.  
  6. param (
  7.     [string]$forest,
  8.     [string]$resultfile,
  9.     [string]$xslfile = "ex2k7_report.xsl",
  10.     [switch]$help
  11. )
  12.  
  13. . ..\lib\adfunctions.ps1
  14. . ..\lib\FunctionImports.ps1
  15.  
  16. ##------------------------------------------------
  17.  
  18. function help(){
  19.     Write-Host "Efimov (ge][) Gennady, 2012"
  20.     Write-Host "http://gexeg.blogspot.com/`n"
  21.     Write-Host "Usage:`nex2k7_report.ps1 [-forest <array of string>] [-resultfile <String>] [-xslfile <String>] [-help]"
  22. }
  23.  
  24. function parse(){
  25.     if ($help){
  26.         help
  27.         exit
  28.     }
  29.    
  30.     if (-not $forest){
  31.         $forest = @([system.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Name)
  32.         Set-Variable -Name "forest" -Scope 1 -Value $forest
  33.     }
  34.    
  35.     if (-not $resultfile){
  36.         $path = (Get-Item .).FullName
  37.         $resultfile = Join-Path -Path $path -ChildPath ("{0}_{1}.xml" -f "ex2k7_report",[System.DateTime]::Now.ToString("ddMMyyyy-hh.mm.ss"))
  38.         Set-Variable -Name "resultfile" -Scope 1 -Value $resultfile
  39.     }
  40. }
  41. Write-Progress -Activity "Загружаем Microsoft.Exchange.Management.PowerShell.Admin" -Id 1 -Status "Running" -PercentComplete 1
  42.  
  43. if (-not (Get-PSSnapin "Microsoft.Exchange.Management.PowerShell.Admin" -ErrorAction SilentlyContinue)){
  44.     Write-Host "Загружаем Microsoft.Exchange.Management.PowerShell.Admin ..."
  45.     Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
  46. }
  47.  
  48. function GetLogFilesInfo([string]$dirName, [string]$prefix){
  49.     trap {
  50.         Write-Host $_ -ForegroundColor Red
  51.         continue
  52.     }
  53.    
  54.     Write-Host "GetLogFilesInfo $dirname"
  55.     [string[]]$files = [System.IO.Directory]::GetFiles($dirName, $prefix+"*")
  56.     if (-not $files) {
  57.         return 0,$null
  58.     }
  59.     [System.Int64]$sumsize = 0
  60.     $lastCreateDate = [datetime]::Now
  61.     foreach($file in $files){
  62.         $fileInfo = New-Object System.IO.FileInfo($file)
  63.         $sumSize += $fileInfo.Length
  64.         if ($fileInfo.LastWriteTime -lt $lastCreateDate){
  65.             $lastCreateDate = $fileInfo.LastWriteTime
  66.         }
  67.     }
  68.     return @($sumsize, $lastCreateDate)
  69. }
  70.  
  71. function GetFileSize($filename){
  72.     trap {
  73.         Write-Host $_ -ForegroundColor Red
  74.         continue
  75.     }
  76.     Write-Host "GetFileSize $filename"
  77.     $fileInfo = New-Object System.IO.FileInfo($filename)
  78.     return $fileInfo.Length
  79. }
  80.  
  81. parse
  82.  
  83. $forestObj = GetForest -forestname $forest
  84. $forestConfDC = $forestObj.RootDomain.FindDomainController(`
  85.     [System.DirectoryServices.ActiveDirectory.LocatorOptions]::WriteableRequired).Name
  86.  
  87. Write-Host "Лес "$forestObj.Name
  88. Write-Host "Контроллер домена "$forestConfDC
  89.  
  90. $script:i = 25
  91. $inc = {
  92.     $script:i += 2
  93.     $script:i
  94. }
  95.  
  96. Write-Progress -Activity "Получаем информацию об организации Exchange..." -Id 1 -Status "Running" -PercentComplete 25
  97. Write-Host "Получаем информацию об организации Exchange..."
  98. # organization Info
  99. $orgConfig = Get-OrganizationConfig -DomainController $forestConfDC
  100. $ServersCount = (@(Get-ExchangeServer)).Count
  101. $orgConfig | Add-Member -Name "ServerCount" -MemberType NoteProperty -Value $ServersCount
  102. $gcMonicer = GetGCRootNCObj -GCServer $forestObj.FindGlobalCatalog().Name
  103. $mbxs = @(GetObjects2 -root $gcMonicer -filter "(&(objectcategory=user)(mailnickname=*)(homeMDB=*))" -attrs @("cn"))
  104. $orgConfig | Add-Member -Name "MbxCount" -MemberType NoteProperty -Value $mbxs.Count
  105. $orgConfig | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forestObj.name
  106.  
  107. Write-Progress -Activity "Получаем информацию о серверах..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  108. Write-Host "Получаем информацию о серверах..."
  109. #serverInfo
  110. $srvInfo = Get-ExchangeServer -DomainController $forestConfDC | select *, `
  111.     @{Name="MDBCount"; Expression={ (@(Get-MailboxDatabase -Server $_)).Count }}, `
  112.     @{Name="PFDBCount"; Expression={ (@(Get-PublicFolderDatabase -Server $_)).Count }}, `
  113.     @{Name="MbxCount"; Expression={ (@(Get-Mailbox -Server $_ -resultsize unlimited)).Count }},`
  114.     @{Name="DomainName"; Expression={ $_.fqdn.Substring($_.fqdn.IndexOf(".")+1) }}
  115.    
  116. Write-Progress -Activity "Получаем информацию о группах хранения..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  117. Write-Host "Получаем информацию о группах хранения..."
  118. #sgInfo
  119. $sgInfo = Get-StorageGroup -DomainController $forestConfDC | select *, `
  120.     @{Name="MDBCount"; Expression={ (@(Get-MailboxDatabase -StorageGroup $_)).Count }}, `
  121.     @{Name="PFDBCount"; Expression={ (@(Get-PublicFolderDatabase -StorageGroup $_)).Count }}, `
  122.     @{Name="LogSize"; Expression={
  123.         GetLogFilesInfo -dirName ("\\$($_.ServerName)\" + $_.LogFolderPath.ToString().Replace(":","$")) -prefix $_.LogFilePrefix }}
  124.  
  125. Write-Progress -Activity "Получаем информацию о БД почтовых ящиков..." -Id 1 -Status "Running" -PercentComplete (&$inc) 
  126. Write-Host "Получаем информацию о БД почтовых ящиков..."
  127. #mbxInfo
  128. $mbxInfo = Get-MailboxDatabase -DomainController $forestConfDC | select *, `
  129.     @{Name="MbxCount"; Expression={ (@(Get-Mailbox -Database $_ -resultsize unlimited)).Count }},`
  130.     @{Name="DatabaseSize2"; Expression={
  131.         GetFileSize -filename ("\\$($_.ServerName)\" + $_.EdbFilePath.ToString().Replace(":","$"))}}
  132.  
  133. Write-Progress -Activity "Получаем информацию о БД общих ящиков..." -Id 1 -Status "Running" -PercentComplete (&$inc)   
  134. Write-Host "Получаем информацию о БД общих ящиков..."
  135. #pfDBInfo
  136. $pfDBInfo = Get-PublicFolderDatabase -DomainController $forestConfDC | select *, `
  137.     @{Name="PFCount"; Expression={ (@(Get-PublicFolder -Identity "\" -Server $_.ServerName -Recurse -resultsize unlimited)).Count }}, `
  138.     @{Name="DatabaseSize2"; Expression={
  139.         GetFileSize -filename ("\\$($_.ServerName)\" + $_.EdbFilePath.ToString().Replace(":","$"))}}
  140.  
  141. Write-Progress -Activity "Получаем информацию о Accepted domains..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  142. Write-Host "Получаем информацию о Accepted domains..."
  143. $recptDomain = Get-AcceptedDomain -DomainController $forestConfDC
  144. Write-Progress -Activity "Получаем информацию о Remote domains..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  145. Write-Host "Получаем информацию о Remote domains..."
  146. $RemoteDomain = Get-RemoteDomain -DomainController $forestConfDC
  147. Write-Progress -Activity "Получаем информацию о Send Connectors..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  148. Write-Host "Получаем информацию о Send Connectors..."
  149. $sendCons = Get-SendConnector -DomainController $forestConfDC
  150. Write-Progress -Activity "Получаем информацию о Receive Connectors..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  151. Write-Host "Получаем информацию о Receive Connectors..."
  152. $recvCons = Get-ReceiveConnector -DomainController $forestConfDC
  153. Write-Progress -Activity "Получаем информацию о Transport Servers..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  154. Write-Host "Получаем информацию о Transport Servers..."
  155. $transportServers = Get-TransportServer -DomainController $forestConfDC
  156. Write-Progress -Activity "Получаем информацию о Edge Subscription..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  157. Write-Host "Получаем информацию о Edge Subscription..."
  158. $edgeSubscr = Get-EdgeSubscription -DomainController $forestConfDC
  159. Write-Progress -Activity "Получаем информацию о OWA Virt Dir..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  160. Write-Host "Получаем информацию о OWA Virt Dir..."
  161. $owaDir = Get-OwaVirtualDirectory -DomainController $forestConfDC
  162. Write-Progress -Activity "Получаем информацию о OutlookAnywhere..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  163. Write-Host "Получаем информацию о OutlookAnywhere..."
  164. $anywhere = Get-OutlookAnywhere -DomainController $forestConfDC
  165. Write-Progress -Activity "Получаем информацию о ActiveSync VirDir..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  166. Write-Host "Получаем информацию о ActiveSync VirDir..."
  167. $activeSync = Get-ActiveSyncVirtualDirectory -DomainController $forestConfDC
  168. Write-Progress -Activity "Получаем информацию о Autodiscover VirDir..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  169. Write-Host "Получаем информацию о Autodiscover VirDir..."
  170. $autodiscvr = Get-AutodiscoverVirtualDirectory -DomainController $forestConfDC
  171. Write-Progress -Activity "Получаем информацию о OAB VirDir..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  172. Write-Host "Получаем информацию о OAB VirDir..."
  173. $offlinedir = Get-OabVirtualDirectory -DomainController $forestConfDC
  174. Write-Progress -Activity "Получаем информацию о OAB..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  175. Write-Host "Получаем информацию о OAB..."
  176. $oab = Get-OfflineAddressBook -DomainController $forestConfDC
  177. Write-Progress -Activity "Получаем информацию о Availability Configuration..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  178. Write-Host "Получаем информацию о Availability Configuration..."
  179. $AvalConfig = Get-AvailabilityConfig -DomainController $forestConfDC
  180. Write-Progress -Activity "Получаем информацию о Availability Address Space..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  181. Write-Host "Получаем информацию о Availability Address Space..."
  182. $AvalNamespace = Get-AvailabilityAddressSpace -DomainController $forestConfDC
  183. Write-Progress -Activity "Получаем информацию о EWS..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  184. Write-Host "Получаем информацию о EWS..."
  185. $ewsDir = Get-WebServicesVirtualDirectory -DomainController $forestConfDC
  186. Write-Progress -Activity "Получаем информацию о Address List..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  187. Write-Host "Получаем информацию о Address List..."
  188. $addrlst = Get-AddressList -DomainController $forestConfDC
  189. Write-Progress -Activity "Получаем информацию о GAL..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  190. Write-Host "Получаем информацию о GAL..."
  191. $gal = Get-GlobalAddressList -DomainController $forestConfDC
  192. Write-Progress -Activity "Получаем информацию о серверах CAS..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  193. Write-Host "Получаем информацию о серверах CAS..."
  194. $cas = Get-ClientAccessServer -DomainController $forestConfDC
  195. Write-Progress -Activity "Получаем информацию о серверах Mailbox..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  196. Write-Host "Получаем информацию о серверах Mailbox..."
  197. $mbxSrv = Get-MailboxServer -DomainController $forestConfDC
  198. Write-Progress -Activity "Получаем информацию о серверах транспортных правилах..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  199. Write-Host "Получаем информацию о серверах транспортных правилах..."
  200. $transportRules = Get-TransportRule -DomainController $forestConfDC
  201. Write-Progress -Activity "Получаем информацию о конфигурации POP3..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  202. Write-Host "Получаем информацию о конфигурации POP3..."
  203. $popSettings = Get-PopSettings -DomainController $forestConfDC | select *, `
  204.     @{Name="ServiceStatus"; Expression =
  205.         { (Get-Service -name "MSExchangePop3" -ComputerName $_.Identity.ToString().SubString(0, $_.Identity.ToString().IndexOf("\")) -ErrorAction SilentlyContinue).Status }
  206.     }
  207. Write-Progress -Activity "Получаем информацию о конфигурации IMAP4..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  208. Write-Host "Получаем информацию о конфигурации IMAP4..."
  209. $imapSettings = Get-ImapSettings -DomainController $forestConfDC | select *, `
  210.     @{Name="ServiceStatus"; Expression =
  211.         { (Get-Service -name "MSExchangeImap4" -ComputerName $_.Identity.ToString().SubString(0, $_.Identity.ToString().IndexOf("\")) -ErrorAction SilentlyContinue).Status }
  212.     }
  213. Write-Progress -Activity "Получаем информацию о RG-коннеторах..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  214. Write-Host "Получаем информацию о RG-коннеторах..."
  215. $rgCon = Get-RoutingGroupConnector -DomainController $forestConfDC
  216. Write-Progress -Activity "Получаем информацию о Email Address Policies..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  217. Write-Host "Получаем информацию о Email Address Policies..."
  218. $AddrPol = Get-EmailAddressPolicy -DomainController $forestConfDC
  219.  
  220. Write-Progress -Activity "Сохраняем отчет..." -Id 1 -Status "Running" -PercentComplete (&$inc)
  221. Write-Host "Сохраняем отчет..."
  222. $report = New-Object System.Object
  223. $report | Add-Member -Name "OrgInfo" -MemberType NoteProperty -Value $orgConfig
  224. $report | Add-Member -Name "ServersInfo" -MemberType NoteProperty -Value $srvInfo
  225. $report | Add-Member -Name "SGInfo" -MemberType NoteProperty -Value $sgInfo
  226. $report | Add-Member -Name "MDBInfo" -MemberType NoteProperty -Value $mbxInfo
  227. $report | Add-Member -Name "PFDBInfo" -MemberType NoteProperty -Value $pfDBInfo
  228. $report | Add-Member -Name "RcptDomain" -MemberType NoteProperty -Value $recptDomain
  229. $report | Add-Member -Name "RemoteDomain" -MemberType NoteProperty -Value $RemoteDomain
  230. $report | Add-Member -Name "SendCon" -MemberType NoteProperty -Value $sendCons
  231. $report | Add-Member -Name "RecvCon" -MemberType NoteProperty -Value $recvCons
  232. $report | Add-Member -Name "HubSrv" -MemberType NoteProperty -Value $transportServers
  233. $report | Add-Member -Name "EdgeSubscr" -MemberType NoteProperty -Value $edgeSubscr
  234. $report | Add-Member -Name "owaDir" -MemberType NoteProperty -Value $owaDir
  235. $report | Add-Member -Name "Anywhere" -MemberType NoteProperty -Value $anywhere
  236. $report | Add-Member -Name "ActiveSync" -MemberType NoteProperty -Value $activeSync
  237. $report | Add-Member -Name "AutoDiscvr" -MemberType NoteProperty -Value $autodiscvr
  238. $report | Add-Member -Name "OABDir" -MemberType NoteProperty -Value $offlinedir
  239. $report | Add-Member -Name "OAB" -MemberType NoteProperty -Value $oab
  240. $report | Add-Member -Name "AvalConfig" -MemberType NoteProperty -Value $AvalConfig
  241. $report | Add-Member -Name "AvalSpace" -MemberType NoteProperty -Value $AvalNamespace
  242. $report | Add-Member -Name "EWS" -MemberType NoteProperty -Value $ewsDir
  243. $report | Add-Member -Name "AddrList" -MemberType NoteProperty -Value $addrlst
  244. $report | Add-Member -Name "GAL" -MemberType NoteProperty -Value $gal
  245. $report | Add-Member -Name "CASSrv" -MemberType NoteProperty -Value $cas
  246. $report | Add-Member -Name "MbxSrv" -MemberType NoteProperty -Value $mbxSrv
  247. $report | Add-Member -Name "TransportRules" -MemberType NoteProperty -Value $transportRules
  248. $report | Add-Member -Name "Pop3Set" -MemberType NoteProperty -Value $popSettings
  249. $report | Add-Member -Name "Imap4Set" -MemberType NoteProperty -Value $imapSettings
  250. $report | Add-Member -Name "RGCons" -MemberType NoteProperty -Value $rgCon
  251. $report | Add-Member -Name "AddressPolicies" -MemberType NoteProperty -Value $AddrPol
  252.  
  253. Write-Progress -Activity "Сохраняем отчет..." -Id 1 -Status "Running" -PercentComplete 99
  254. $report | Export-Clixml $resultfile
  255. $xmlstr = Get-Content $resultfile
  256. $xmlstr = "<?xml version=`"1.0`"?>`n`r<?xml-stylesheet type=`"text/xsl`" href=`"$xslfile`"?>`n`r" + $xmlstr
  257. Set-Content -Path $resultfile -Encoding UTF8 -Value $xmlstr
  258. Write-Progress -Activity "Сохраняем отчет..." -Id 1 -Status "Running" -PercentComplete 100 -Completed
Advertisement
Add Comment
Please, Sign In to add comment