Guest User

ad_report.ps1

a guest
Aug 26th, 2013
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #########################################################
  2. ### AD Collect Info v.1.1.4
  3. ### Efimov (ge][) Gennady, http://gexeg.blogspot.com/
  4. #########################################################
  5.  
  6. param(
  7.     [string[]]$forestlist,
  8.     [string]$resultfile,
  9.     [string]$xslfile = "ad_report.xsl",
  10.     [switch]$help
  11.    
  12. )
  13.  
  14. . ..\lib\adfunctions.ps1
  15. . ..\lib\FunctionImports.ps1
  16.  
  17. ##------------------------------------------------
  18. [object[]]$script:a_forests = @()
  19. [object[]]$script:a_domains = @()
  20. [object[]]$script:a_subnets = @()
  21. [object[]]$script:a_sites = @()
  22. [object[]]$script:a_sitelinks = @()
  23. [object[]]$script:a_sitebridges = @()
  24. [object[]]$script:a_site_sitelinks = @()
  25. [object[]]$script:a_sitelinks_bridges = @()
  26. [object[]]$script:a_dcs = @()
  27. [object[]]$script:a_fsmo_forest = @()
  28. [object[]]$script:a_fsmo_domain = @()
  29. [object[]]$script:a_gcs = @()
  30. [object[]]$script:a_sysvol = @()
  31. [object[]]$script:a_appsnc = @()
  32. [object[]]$script:a_trusts = @()
  33. ##------------------------------------------------
  34.  
  35. function help(){
  36.     Write-Host "Efimov (ge][) Gennady, 2011"
  37.     Write-Host "http://gexeg.blogspot.com/`n"
  38.     Write-Host "Usage:`nad_audit.ps1 [-forestlist <array of string>] [-resultfile <String>] [-xslfile <String>] [-help]"
  39. }
  40.  
  41. function parse(){
  42.     if ($help){
  43.         help
  44.         exit
  45.     }
  46.    
  47.     if (-not $forestList){
  48.         $forestlist = @([system.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Name)
  49.         Set-Variable -Name "forestlist" -Scope 1 -Value $forestlist
  50.     }
  51.    
  52.     if (-not $resultfile){
  53.         $path = (Get-Item .).FullName
  54.         $resultfile = Join-Path -Path $path -ChildPath ("{0}_{1}.xml" -f "ad_report",[System.DateTime]::Now.ToString("ddMMyyyy-hh.mm.ss"))
  55.         Set-Variable -Name "resultfile" -Scope 1 -Value $resultfile
  56.     }
  57. }
  58.  
  59. function GetForestInfo($forest){
  60.     $forestObj = New-Object System.Object
  61.     $forestObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $forest.RootDomain.Name
  62.     $forestObj | Add-Member -Name "ForestMode" -MemberType NoteProperty -Value $forest.ForestMode.ToString()
  63.     $forestObj | Add-Member -Name "SchemaVersion" -MemberType NoteProperty -Value $forest.Schema.GetDirectoryEntry().PSBase.Properties.Item("ObjectVersion").ToString()
  64.     $script:a_forests += $forestObj
  65. }
  66.  
  67. function GetForestFSMO($forest){
  68.     $forestFSMOObj = New-Object System.Object
  69.     $forestFSMOObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  70.     $forestFSMOObj | Add-Member -Name "DNMaster" -MemberType NoteProperty -Value $forest.NamingRoleOwner.Name
  71.     $forestFSMOObj | Add-Member -Name "SchemaMaster" -MemberType NoteProperty -Value $forest.SchemaRoleOwner.Name
  72.     $script:a_fsmo_forest += $forestFSMOObj
  73. }
  74.  
  75. function GetDomainInfo($forest){
  76.     $forest.Domains | foreach {
  77.         $domain = $_
  78.         $domainObj = New-Object System.Object
  79.         $domainObj | Add-Member -Name "DnsName" -MemberType NoteProperty -Value $domain.Name
  80.         $dcNC = $domain.GetDirectoryEntry().distinguishedName
  81.         $configNC = GetConfigNC -BindName ($forest.RootDomain.FindDomainController().Name)
  82.         $NCObj = GetObjects2 -root "LDAP://CN=Partitions,$configNC" -filter "(&(objectClass=crossRef)(nCName=$dcNC)(nETBIOSName=*))" -attrs "nETBIOSName"
  83.         $compsObj = GetObjects2 -root "LDAP://$dcNC" -filter "(&(objectClass=computer)(sAMAccountName=*))" -attrs ""
  84.         $userObj = GetObjects2 -root "LDAP://$dcNC" -filter "(&(objectClass=user)(objectCategory=user)(sAMAccountName=*))" -attrs ""
  85.         $domainObj | Add-Member -Name "NetBIOSName" -MemberType NoteProperty -Value ($NCObj.Properties["netbiosname"][0])
  86.         $domainObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $domain.Forest.Name
  87.         $domainObj | Add-Member -Name "DomainMode" -MemberType NoteProperty -Value $domain.DomainMode.ToString()
  88.         $domainObj | Add-Member -Name "ComputerNum" -MemberType NoteProperty -Value $compsObj.Count
  89.         $domainObj | Add-Member -Name "UserNum" -MemberType NoteProperty -Value $userObj.Count
  90.         $domainObj | Add-Member -Name "DBSize" -MemberType NoteProperty -Value 0
  91.         $script:a_domains += $domainObj
  92.     }
  93. }
  94.  
  95. function GetDomainFSMO($forest){
  96.     foreach($domain in $forest.Domains){
  97.         $domainFSMOObj = New-Object System.Object
  98.         $domainFSMOObj | Add-Member -Name "DomainName" -MemberType NoteProperty -Value $domain.Name
  99.         $domainFSMOObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  100.         $domainFSMOObj | Add-Member -Name "PDCMaster" -MemberType NoteProperty -Value $domain.PdcRoleOwner.Name
  101.         $domainFSMOObj | Add-Member -Name "RIDMaster" -MemberType NoteProperty -Value $domain.RidRoleOwner.Name
  102.         $domainFSMOObj | Add-Member -Name "InfrMaster" -MemberType NoteProperty -Value $domain.InfrastructureRoleOwner.Name
  103.         $script:a_fsmo_domain += $domainFSMOObj
  104.     }
  105. }
  106.  
  107. function GetSubnetInfo($forest){
  108.     $forest.Sites | foreach {
  109.         foreach ($subnet in $_.Subnets){
  110.             $subnetObj = New-Object System.Object
  111.             $subnetObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $subnet.Name
  112.             $subnetObj | Add-Member -Name "Description" -MemberType NoteProperty -Value $subnet.Location
  113.             $subnetObj | Add-Member -Name "SiteName" -MemberType NoteProperty -Value $subnet.Site.Name
  114.             $subnetObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  115.             $script:a_subnets += $subnetObj
  116.         }
  117.     }
  118. }
  119.  
  120. function GetSiteInfo($forest){
  121.     foreach ($site in $forest.Sites){
  122.         if ($site.IntraSiteReplicationSchedule){
  123.             $schStr = ScheduleToString -timespan_arr (GetScheduleInfo -schedule $site.IntraSiteReplicationSchedule)
  124.         }
  125.         else {
  126.             $schStr = "N/A"
  127.         }
  128.         $siteObj = New-Object System.Object
  129.         $siteObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $site.Name
  130.         $siteObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  131.         $siteObj | Add-Member -Name "Schedule" -MemberType NoteProperty -Value $schStr
  132.         $siteObj | Add-Member -Name "ISTG" -MemberType NoteProperty -Value $site.InterSiteTopologyGenerator.Name
  133.         $siteObj | Add-Member -Name "Options" -MemberType NoteProperty `
  134.             -Value ("0x" + ([int]$site.Options).ToString("X") + " (" + (GetSiteOptionInfo -siteOption $site.Options) + ")")
  135.         $siteObj | Add-Member -Name "UGMC" -MemberType NoteProperty `
  136.             -Value (($site.Options -band [System.DirectoryServices.ActiveDirectory.ActiveDirectorySiteOptions]::GroupMembershipCachingEnabled) -eq `
  137.             [System.DirectoryServices.ActiveDirectory.ActiveDirectorySiteOptions]::GroupMembershipCachingEnabled)
  138.         $ugmc_site = GetUGMCSite -site $site.GetDirectoryEntry()
  139.         if ($ugmc_site) {
  140.             $ugmc_siteStr = $ugmc_site.distinguishedName.ToString()
  141.         } else {
  142.             $ugmc_siteStr = "<Default>"
  143.         }
  144.         $siteObj | Add-Member -Name "UGMC_GC" -MemberType NoteProperty -Value $ugmc_siteStr
  145.         $script:a_sites += $siteObj
  146.     }
  147. }
  148.  
  149. function GetSiteLinksInfo($forest){
  150.     $DCName = $forest.RootDomain.FindDomainController().Name
  151.     $configNC = GetConfigNC -BindName $DCName
  152.    
  153.     foreach($transport in @("IP","SMTP")){
  154.         $sitelinks_list = GetObjects2 -root "LDAP://CN=$transport,CN=Inter-Site Transports,CN=Sites,$configNC" `
  155.             -filter "(objectClass=siteLink)" -attrs "name"
  156.         $transportType = $null
  157.         if (-not $sitelinks_list) {continue}
  158.         foreach($search in $sitelinks_list){
  159.             if ($transport -eq "IP"){
  160.                 $transportType = [System.DirectoryServices.ActiveDirectory.ActiveDirectoryTransportType]::Rpc
  161.             }
  162.             else{
  163.                 $transportType = [System.DirectoryServices.ActiveDirectory.ActiveDirectoryTransportType]::Smtp
  164.             }
  165.        
  166.             $siteLink = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySiteLink]::FindByName(`
  167.                 (GetForestContext -forestName $forest.Name), $search.Properties["name"][0], $transportType)
  168.             if ($siteLink.InterSiteReplicationSchedule) {
  169.                 $schStr = ScheduleToString -timespan_arr (GetScheduleInfo -schedule $siteLink.InterSiteReplicationSchedule)
  170.             }
  171.             else {
  172.                 $schStr = "N/A"
  173.             }
  174.             $siteLinkObj = New-Object System.Object
  175.             $siteLinkObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $siteLink.Name
  176.             $siteLinkObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  177.             $siteLinkObj | Add-Member -Name "Transport" -MemberType NoteProperty -Value $transport
  178.             $siteLinkObj | Add-Member -Name "Cost" -MemberType NoteProperty -Value $siteLink.Cost
  179.             $siteLinkObj | Add-Member -Name "Schedule" -MemberType NoteProperty -Value $schStr
  180.             $siteLinkObj | Add-Member -Name "Options" -MemberType NoteProperty -Value (GetSiteLinkOptions -sitelink $siteLink)
  181.             $siteLinkObj | Add-Member -Name "ReplicationInterval" -MemberType NoteProperty -Value $siteLink.ReplicationInterval.ToString()
  182.             $script:a_sitelinks += $siteLinkObj
  183.        
  184.             foreach($site in $siteLink.Sites){
  185.                 $siteSiteLinkObj = New-Object System.Object
  186.                 $siteSiteLinkObj | Add-Member -Name "Site" -MemberType NoteProperty -Value $site.Name
  187.                 $siteSiteLinkObj | Add-Member -Name "SiteLink" -MemberType NoteProperty -Value $siteLink.Name
  188.                 $siteSiteLinkObj | Add-Member -Name "Transport" -MemberType NoteProperty -Value $transport
  189.                 $siteSiteLinkObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  190.                 $script:a_site_sitelinks += $siteSiteLinkObj
  191.             }
  192.         }
  193.     }
  194. }
  195.  
  196. function GetBridgeInfo($forest){
  197.     $DCName = $forest.RootDomain.FindDomainController().Name
  198.     $configNC = GetConfigNC -BindName $DCName
  199.  
  200.     foreach($transport in @("IP","SMTP")){
  201.         $bridgelinks_list = GetObjects2 -root "LDAP://CN=$transport,CN=Inter-Site Transports,CN=Sites,$configNC" `
  202.             -filter "(objectClass=siteLinkBridge)" -attrs "name"
  203.         $transportType = $null
  204.         if (-not $bridgelinks_list){ continue }
  205.         foreach($search in $bridgelinks_list){
  206.             if ($transport -eq "IP"){
  207.                 $transportType = [System.DirectoryServices.ActiveDirectory.ActiveDirectoryTransportType]::Rpc
  208.             }
  209.             else{
  210.                 $transportType = [System.DirectoryServices.ActiveDirectory.ActiveDirectoryTransportType]::Smtp
  211.             }
  212.            
  213.             $bridgeLink = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySiteLinkBridge]::FindByName(`
  214.                 (GetForestContext -forestName $forest.Name), $search.Properties["name"][0], $transportType)
  215.             $bridgeLinkObj = New-Object System.Object
  216.             $bridgeLinkObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $bridgeLink.Name
  217.             $bridgeLinkObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  218.             $bridgeLinkObj | Add-Member -Name "Transport" -MemberType NoteProperty -Value $transport
  219.             $script:a_sitebridges += $bridgeLinkObj
  220.        
  221.             foreach($sitelink in $bridgeLink.SiteLinks){
  222.                 $bridgeSiteLinkObj = New-Object System.Object
  223.                 $bridgeSiteLinkObj | Add-Member -Name "Bridge" -MemberType NoteProperty -Value $bridgeLink.Name
  224.                 $bridgeSiteLinkObj | Add-Member -Name "SiteLink" -MemberType NoteProperty -Value $sitelink.Name
  225.                 $bridgeSiteLinkObj | Add-Member -Name "Transport" -MemberType NoteProperty -Value $transport
  226.                 $bridgeSiteLinkObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  227.                 $script:a_sitelinks_bridges += $bridgeSiteLinkObj
  228.             }
  229.         }
  230.     }
  231. }
  232.  
  233. function GetDCType($dcDE){
  234.     $ntdsObj = $dcDE.PSBase.Children.PSBase.Find("CN=NTDS Settings","nTDSDSA")
  235.     if ($ntdsObj -and $ntdsObj.PSBase.Properties.Item("objectCategory")){
  236.         if ($ntdsObj.PSBase.Properties.Item("objectCategory").Value.ToString() -like "CN=NTDS-DSA,CN=Schema,CN=Configuration,DC=*"){
  237.             return "RwDC"
  238.         }
  239.         elseif ($ntdsObj.PSBase.Properties.Item("objectCategory").Value.ToString() -eq "CN=NTDS-DSA-RO,CN=Schema,CN=Configuration,DC=*"){
  240.             return "RoDC"
  241.         }
  242.     }
  243.     return "-"
  244. }
  245.  
  246. function GetDcNTDSDBPath($DCName){
  247.     $key = GetRemoteRegistryKey -machine $DCName -hive LocalMachine `
  248.         -subPath "SYSTEM\CurrentControlSet\Services\NTDS\Parameters"
  249.     if ($key){
  250.         $value = GetKeyValue -regKey $key -valueName "DSA Database file"
  251.         return $value
  252.     }
  253.     return "-"
  254. }
  255.  
  256. function GetDcNTDSDBSize($DCName, $path){
  257.     $file = new-object System.IO.FileInfo("\\{0}\{1}" -f $DCName,$path.Replace(":","`$"))
  258.     return [System.Math]::Round($file.Length/1MB, 1)
  259. }
  260.  
  261. function GetDcNTDSLogPath($DCName){
  262.     $key = GetRemoteRegistryKey -machine $DCName -hive LocalMachine `
  263.         -subPath "SYSTEM\CurrentControlSet\Services\NTDS\Parameters"
  264.     if ($key){
  265.         $value = GetKeyValue -regKey $key -valueName "Database log files path"
  266.         return $value
  267.     }
  268.     return "-"
  269. }
  270.  
  271. function GetSysVolSize($DCName, $sysvolPath){
  272.     trap{
  273.         Out-Host $_.ToString()
  274.         continue
  275.     }
  276.     $dir = New-Object System.IO.DirectoryInfo("\\{0}\{1}" -f $DCName,$sysvolPath.Replace(":","`$"))
  277.     $DirSize = 0
  278.     foreach($file in [system.IO.Directory]::GetFiles($dir.FullName, "*.*", [System.IO.SearchOption]::AllDirectories)){
  279.         $fileInfo = New-Object SYstem.IO.FileInfo($file)
  280.     $DirSize += $fileInfo.Length
  281.     }
  282.     return $DirSize
  283. }
  284.  
  285. function GetDcSysvolPath($DCDe){
  286.     $compObj = [adsi]"LDAP://$($DCDe.serverReference)"
  287.     $sysvolObj = [adsi]"LDAP://CN=Domain System Volume (SYSVOL share),CN=NTFRS Subscriptions,$($compObj.distinguishedName)"
  288.    
  289.     #$compObj.PSBase.Children.PSBase.Find("CN=NTFRS Subscriptions","nTFRSSubscriptions").PSBase.Children.PSBase.Find("CN=Domain System Volume (SYSVOL share)","nTFRSSubscriber")
  290.     if ($sysvolObj -and $sysvolObj.PSBase.Properties.Item("fRSRootPath")){
  291.         return $sysvolObj.PSBase.Properties.Item("fRSRootPath").Value.ToString()
  292.     }
  293.    
  294.     $sysvolObj = [adsi]"LDAP://CN=SYSVOL Subscription,CN=Domain System Volume,CN=DFSR-LocalSettings,$($compObj.distinguishedName)"
  295.     if ($sysvolObj -and $sysvolObj.PSBase.Properties.Item("msDFSR-RootPath")){
  296.         return $sysvolObj.PSBase.Properties.Item("msDFSR-RootPath").Value.ToString()
  297.     }
  298.    
  299.     return "-"
  300. }
  301.  
  302. function GetDCInfo($forest){
  303.     foreach($domain in $forest.Domains){
  304.         foreach ($DC in $domain.DomainControllers){
  305.             $dcObj = New-Object System.Object
  306.             $dcObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $DC.Name
  307.             $dcObj | Add-Member -Name "DomainName" -MemberType NoteProperty -Value $domain.Name
  308.             $dcObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  309.             $dcObj | Add-Member -Name "SiteName" -MemberType NoteProperty -Value $DC.Sitename
  310.             $sysvolPath = GetDcSysvolPath -DCDe $DC.GetDirectoryEntry()
  311.             if ($sysvolPath.StartsWith("\\?\")) {
  312.                 $dcObj | Add-Member -Name "SysvolType" -MemberType NoteProperty -Value "DFSR"
  313.                 $sysvolPath = $sysvolPath.Replace("\\?\","")
  314.             }
  315.             else{
  316.                 $dcObj | Add-Member -Name "SysvolType" -MemberType NoteProperty -Value "FRS"
  317.             }
  318.            
  319.             $dcObj | Add-Member -Name "SysVolPath" -MemberType NoteProperty -Value $sysvolPath
  320.             $dcObj | Add-Member -Name "Type" -MemberType NoteProperty -Value (GetDCType -dcDE $DC.GetDirectoryEntry())
  321.             if (-not $?){
  322.                 $script:a_dcs += $dcObj
  323.                 continue
  324.             }
  325.            
  326.             $dbpath = GetDcNTDSDBPath -dcName $DC.name
  327.             $dcObj | Add-Member -Name "DBPath" -MemberType NoteProperty -Value $dbpath
  328.             $dcObj | Add-Member -Name "DBSize" -MemberType NoteProperty -Value ((GetDcNTDSDBSize -DCName $DC.name -path $dbpath).ToString() + "MB")
  329.             $dcObj | Add-Member -Name "LogPath" -MemberType NoteProperty -Value (GetDcNTDSLogPath -DCName $DC.Name)
  330.             $sysvolSize = GetSysVolSize -DCName $DC.name -sysvolPath $sysvolPath
  331.             $dcObj | Add-Member -Name "SysVolSize" -MemberType NoteProperty -Value (([system.Math]::Round($sysvolSize/1MB,1)).ToString()+"MB")
  332.             $script:a_dcs += $dcObj
  333.         }
  334.     }
  335. }
  336.  
  337. function GetGCInfo($forest){
  338.     foreach($gc in $forest.GlobalCatalogs){
  339.         $gcObj = New-Object System.Object
  340.         $gcObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $gc.Name
  341.         $gcObj | Add-Member -Name "DomainName" -MemberType NoteProperty -Value $gc.Domain.Name
  342.         $gcObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $gc.Forest.Name
  343.         $gcObj | Add-Member -Name "SiteName" -MemberType NoteProperty -Value $gc.SiteName
  344.         $script:a_gcs += $gcObj
  345.     }
  346. }
  347.  
  348. function GetAppsNCInfo($forest){
  349.     foreach($appNC in $forest.ApplicationPartitions){
  350.         foreach($dc in $appNC.DirectoryServers){
  351.             $appObj = New-Object System.Object
  352.             $appObj | Add-Member -Name "Name" -MemberType NoteProperty -Value $appNC.Name
  353.             $appObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  354.             $appObj | Add-Member -Name "DC" -MemberType NoteProperty -Value $dc.Name
  355.             $script:a_appsnc += $appObj
  356.         }
  357.     }
  358. }
  359.  
  360. function GetTrustsInfo($forest){
  361.     foreach($trust in $forest.GetAllTrustRelationships()){
  362.         $trustObj = New-Object System.Object
  363.         $trustObj | Add-Member -Name "SourceName" -MemberType NoteProperty -Value $trust.SourceName
  364.         $trustObj | Add-Member -Name "TargetName" -MemberType NoteProperty -Value $trust.TargetName
  365.         $trustObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  366.         $trustObj | Add-Member -Name "Direction" -MemberType NoteProperty -Value $trust.TrustDirection.ToString()
  367.         $trustObj | Add-Member -Name "Type" -MemberType NoteProperty -Value $trust.TrustType.ToString()
  368.         $trustObj | Add-Member -Name "Options" -MemberType NoteProperty -Value (GetTrustOptions -trust $trust)
  369.         $trustObj | Add-Member -Name "SelectAuth" -MemberType NoteProperty -Value $forest.GetSelectiveAuthenticationStatus($trust.TargetName).ToString()
  370.         $trustObj | Add-Member -Name "SidFiltering" -MemberType NoteProperty -Value $forest.GetSidFilteringStatus($trust.TargetName).ToString()
  371.         #$ForestTrust = $forest.GetTrustRelationship($trust.TargetName)
  372.         #$trustObj | Add-Member -Name "ExclTopNames" -MemberType NoteProperty -Value ([System.String]::Join(",",$ForestTrust.ExcludedTopLevelNames))
  373.         #$trustObj | Add-Member -Name "TopNames" -MemberType NoteProperty -Value ([System.String]::Join(",",$ForestTrust.TopLevelNames))
  374.         $script:a_trusts += $trustObj
  375.     }
  376.     foreach($domain in $forest.Domains){
  377.         foreach($trust in $domain.GetAllTrustRelationships()){
  378.             $trustObj = New-Object System.Object
  379.             $trustObj | Add-Member -Name "SourceName" -MemberType NoteProperty -Value $trust.SourceName
  380.             $trustObj | Add-Member -Name "TargetName" -MemberType NoteProperty -Value $trust.TargetName
  381.             $trustObj | Add-Member -Name "ForestName" -MemberType NoteProperty -Value $forest.Name
  382.             $trustObj | Add-Member -Name "Direction" -MemberType NoteProperty -Value $trust.TrustDirection.ToString()
  383.             $trustObj | Add-Member -Name "Type" -MemberType NoteProperty -Value $trust.TrustType.ToString()
  384.             $trustObj | Add-Member -Name "Options" -MemberType NoteProperty -Value (GetTrustOptions -trust $trust)
  385.             $trustObj | Add-Member -Name "SelectAuth" -MemberType NoteProperty -Value $domain.GetSelectiveAuthenticationStatus($trust.TargetName).ToString()
  386.             $trustObj | Add-Member -Name "SidFiltering" -MemberType NoteProperty -Value $domain.GetSidFilteringStatus($trust.TargetName).ToString()
  387.             $script:a_trusts += $trustObj
  388.         }
  389.     }
  390. }
  391.  
  392. parse
  393.  
  394. Write-Host "Запуск сбора информации"
  395.  
  396. $forestList | foreach {
  397.     $forest = GetForest -forestname $_
  398.     Write-Host "Лес $forest :"
  399.     Write-Host "Собираем сведения о лесе"
  400.     GetForestInfo -forest $forest
  401.     Write-Host "Собираем сведения о доменах"
  402.     GetDomainInfo -forest $forest
  403.     Write-Host "Собираем сведения о подсетях"
  404.     GetSubnetInfo -forest $forest
  405.     Write-Host "Собираем сведения о сайтах"
  406.     GetSiteInfo -forest $forest
  407.     Write-Host "Собираем сведения о связях сайтов"
  408.     GetSiteLinksInfo -forest $forest
  409.     Write-Host "Собираем сведения о мостах связей сайтов"
  410.     GetBridgeInfo -forest $forest
  411.     Write-Host "Собираем сведения о контроллерах доменов"
  412.     GetDCInfo -forest $forest
  413.     Write-Host "Собираем сведения о FSMO ролях"
  414.     GetForestFSMO -forest $forest
  415.     GetDomainFSMO -forest $forest
  416.     Write-Host "Собираем сведения о серверах глобального каталога"
  417.     GetGCInfo -forest $forest
  418.     Write-Host "Собираем сведения о разделах приложений"
  419.     GetAppsNCInfo -forest $forest
  420.     Write-Host "Собираем сведения о доверительных отношениях"
  421.     GetTrustsInfo -forest $forest
  422.     Write-Host "--------------------------------------------"
  423. }
  424.  
  425. $report = New-Object System.Object
  426. $report | Add-Member -Name "Forests" -MemberType NoteProperty -Value $script:a_forests
  427. $report | Add-Member -Name "Domains" -MemberType NoteProperty -Value $script:a_domains
  428. $report | Add-Member -Name "Sites" -MemberType NoteProperty -Value $script:a_sites
  429. $report | Add-Member -Name "Subnets" -MemberType NoteProperty -Value $script:a_subnets
  430. $report | Add-Member -Name "SiteLinks" -MemberType NoteProperty -Value $script:a_sitelinks
  431. $report | Add-Member -Name "SiteSitelinks" -MemberType NoteProperty -Value $script:a_site_sitelinks
  432. $report | Add-Member -Name "SiteBridges" -MemberType NoteProperty -Value $script:a_sitebridges
  433. $report | Add-Member -Name "LinkBridges" -MemberType NoteProperty -Value $script:a_sitelinks_bridges
  434. $report | Add-Member -Name "DCs" -MemberType NoteProperty -Value $script:a_dcs
  435. $report | Add-Member -Name "ForestFSMOs" -MemberType NoteProperty -Value $script:a_fsmo_forest
  436. $report | Add-Member -Name "DomainFSMOs" -MemberType NoteProperty -Value $script:a_fsmo_domain
  437. $report | Add-Member -Name "GCs" -MemberType NoteProperty -Value $script:a_gcs
  438. $report | Add-Member -Name "Apps" -MemberType NoteProperty -Value $script:a_appsnc
  439. $report | Add-Member -Name "Trusts" -MemberType NoteProperty -Value $script:a_trusts
  440.  
  441. $report | Export-Clixml $resultfile
  442. $xmlstr = Get-Content $resultfile
  443. $xmlstr = "<?xml version=`"1.0`"?>`n`r<?xml-stylesheet type=`"text/xsl`" href=`"$xslfile`"?>`n`r" + $xmlstr
  444. Set-Content -Path $resultfile -Encoding UTF8 -Value $xmlstr
Advertisement
Add Comment
Please, Sign In to add comment