Guest User

cm2012_report.ps1

a guest
Aug 27th, 2013
319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #########################################################
  2. ### SCCM 2012 Collect Info v.0.1.1
  3. ### Efimov (ge][) Gennady, http://gexeg.blogspot.com/
  4. #########################################################
  5.  
  6. param (
  7.     [string]$SQLServer = ".",
  8.     [string]$CMDatabase,
  9.     [string]$resultfile,
  10.     [string]$xslfile = "cm2012_report.xsl",
  11.     [switch]$help
  12.     )
  13.  
  14. function help(){
  15.     Write-Host "Efimov (ge][) Gennady"
  16.     Write-Host "http://gexeg.blogspot.com/`n"
  17.     Write-Host "Usage:`ncm2012_report.ps1 [-Server <string>] [-CMDatabase <CM Database>] [-resultfile <String>] [-xslfile <String>] [-help]"
  18. }
  19.            
  20. function parse(){
  21.     if ($help){
  22.         help
  23.         exit
  24.     }
  25.     if (-not $resultfile){
  26.         $path = (Get-Item .).FullName
  27.         $resultfile = Join-Path -Path $path -ChildPath ("{0}_{1}.xml" -f "cm2012_report",[System.DateTime]::Now.ToString("ddMMyyyy-hh.mm.ss"))
  28.         Set-Variable -Name "resultfile" -Scope 1 -Value $resultfile
  29.     }
  30. }
  31.  
  32. function CreateSQLCmd($SQLConnection, $SQLText){
  33.     $cmd = New-Object System.Data.SqlClient.SqlCommand($SQLText,$SQLConnection)
  34.     #$cmd = $SQLConnection.CreateCommand()
  35.     $cmd.CommandType = "Text"
  36.     #$cmd.CommandText = $SQLText
  37.     return $cmd
  38. }
  39.  
  40. function GetCMDatabase($SQLConnection){
  41.     if ($SQLConnection.State -eq "Open"){
  42.         $result = CreateSQLCmd $SQLConnection "select name from sys.databases where name like 'CM[_][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]'"
  43.         return $result.ExecuteScalar()
  44.     }
  45.     else {
  46.         Write-Error "Соединение с сервером закрыто"
  47.     }
  48.     return $DatabaseName
  49. }
  50.  
  51. function ReturnSQLResult($SQLConnection,$SQLText){
  52.     $cmd = CreateSQLCmd $SQLConnection $SQLText
  53.     $datareader = $cmd.ExecuteReader()
  54.     $dataTable = New-Object System.Data.DataTable
  55.     $dataTable.load($datareader)
  56.     ,$dataTable
  57. }
  58.  
  59.  
  60. $inc = {
  61.     $script:i += 1
  62.     $script:i
  63. }
  64.        
  65. parse
  66.  
  67. try {
  68.     $conBldr = new-object  System.Data.SqlClient.SqlConnectionStringBuilder
  69.     $conBldr.Server = $SQLServer
  70.     $conBldr.Database = "master"
  71.     $conBldr["Integrated Security"] = $true
  72.     $sqlConnection = new-object System.Data.SqlClient.SQLConnection($conBldr.ConnectionString)
  73.     Write-Progress -Activity "Подключение к серверу..." -Id 1 -Status "Running" -PercentComplete 1
  74.     Write-Host "Open Connection"
  75.     $sqlConnection.Open()
  76.     if (-not $CMDatabase){
  77.         $CMDatabase = GetCMDatabase $sqlConnection
  78.         if (-not $CMDatabase) {
  79.             Write-Error "Не удается определить сайт. Попробуйте указать в параметрах скрипта"
  80.             return
  81.         }
  82.     }
  83.     write-host "Сайт SCCM: $CMDatabase"
  84.    
  85.     $SqlConnection.ChangeDatabase($CMDatabase)
  86.    
  87.     Write-Progress -Activity "Сбор данных..." -Id 1 -Status "Running" -PercentComplete 25
  88.     Write-Host "Сбор данных..."
  89.  
  90.    
  91.     $boundary = ReturnSQLResult $SQLConnection "select * from BoundaryEx"
  92.     $boundaryGroup = ReturnSQLResult $SQLConnection "select * from BoundaryGroup"
  93.     $boundaryGroupMem = ReturnSQLResult $SQLConnection "select bgm.*, bg.Name, b.Value from [dbo].[BoundaryGroupMembers] bgm
  94.        join dbo.BoundaryGroup bg on bgm.GroupID = bg.GroupID
  95.        join dbo.BoundaryEx b on bgm.BoundaryID = b.BoundaryID"
  96.     $boundaryGroupSys = ReturnSQLResult $SQLConnection "select * from BoundaryGroupSiteSystem"
  97.     $sites = ReturnSQLResult $SQLConnection "select * from vSites"
  98.     $subSites = ReturnSQLResult $SQLConnection "select * from vSiteAndSubsites"
  99.     $srvComp = ReturnSQLResult $SQLConnection "select * from [dbo].[vSMS_SC_Component]"
  100.     $siteDef = ReturnSQLResult $SQLConnection "select * from SC_SiteDefinition"
  101.     $siteDefProp = ReturnSQLResult $SQLConnection "select sd.SiteNumber, sd.SiteCode, sdp.*
  102.        from SC_SiteDefinition sd join vSMS_SC_SiteDefinition_Properties sdp on sd.SiteNumber = sdp.ID"
  103.     $siteDefPropList = ReturnSQLResult $SQLConnection "select sd.SiteNumber, sd.SiteCode, sdp.*
  104.        from SC_SiteDefinition sd join [dbo].[vSMS_SC_SiteDefinition_PropertyLists] sdp on sd.SiteNumber = sdp.ID"
  105.     $CompProp = ReturnSQLResult $SQLConnection "select c.ComponentName, cp.*
  106.        from [dbo].[vSMS_SC_Component_SDK] c join [dbo].[vSMS_SC_Component_Properties] cp on c.ID = cp.ID"  
  107.     $CompPropList = ReturnSQLResult $SQLConnection "select c.ComponentName, cp.*
  108.        from [dbo].[vSMS_SC_Component_SDK] c join [dbo].[vSMS_SC_Component_PropertyLists] cp on c.ID = cp.ID"  
  109.     $addr = ReturnSQLResult $SQLConnection "select * from [dbo].[vSMS_SC_Address]"
  110.     $addrProp = ReturnSQLResult $SQLConnection "select a.SiteCode, a.DesSiteCode, ap.*
  111.        from [dbo].[vSMS_SC_Address_SDK] a join [dbo].[vSMS_SC_Address_Properties] ap on a.ID = ap.ID"
  112.     $addrPropList = ReturnSQLResult $SQLConnection "select a.SiteCode, a.DesSiteCode, ap.*
  113.        from [dbo].[vSMS_SC_Address_SDK] a join [dbo].[vSMS_SC_Address_PropertyLists] ap on a.ID = ap.ID"      
  114.     $ClientSettings = ReturnSQLResult $SQLConnection "SELECT * FROM vSMS_ClientSettings union all
  115.        select [ID],[UniqueID],[Name],[Description],[Type],[Enabled],[Priority],[Flags],[DateCreated]
  116.        ,[DateModified],[CreatedBy],[LastModifiedBy],[rowversion],[SourceSite],[IsTombstoned],
  117.        NULL,[AssignmentCount]  from vSMS_ClientSettingsDefault"
  118.        
  119.     $ClientSettingsProp = ReturnSQLResult $SQLConnection "select a.Name, cs.Name, conf.*
  120.    from vSMS_ClientAgentConfig_Base conf join ClientAgent a on conf.AgentID = a.ID
  121.        join vSMS_ClientSettings cs on conf.SettingsID = cs.ID"
  122.    
  123.     $sys = ReturnSQLResult $SQLConnection "select * from vSMS_SC_SysResUse"
  124.     $sysProp = ReturnSQLResult $SQLConnection "select s.RoleName, s.ServerName, sp.*
  125.        from [dbo].[vSMS_SC_SysResUse_SDK] s join [dbo].[vSMS_SC_SysResUse_Properties] sp on s.ID = sp.ID"
  126.     $sysPropList = ReturnSQLResult $SQLConnection "select s.RoleName, s.ServerName, sp.*
  127.        from [dbo].[vSMS_SC_SysResUse_SDK] s join [dbo].[vSMS_SC_SysResUse_PropertyLists] sp on s.ID = sp.ID"
  128.        
  129.     $scprop = ReturnSQLResult $SQLConnection "select * from vSMS_SC_Property_SDK"
  130.     $scpropList = ReturnSQLResult $SQLConnection "select * from vSMS_SC_PropertyList_SDK"
  131.    
  132.     $packages = ReturnSQLResult $SQLConnection "select * from v_Package"
  133.     $supckages = ReturnSQLResult $SQLConnection "select * from vSMS_SoftwareUpdatesPackage_List"
  134.     $driverPackages = ReturnSQLResult $SQLConnection "select * from [dbo].[v_DriverPackage]"
  135.     $imagePackages = ReturnSQLResult $SQLConnection "select * from [dbo].[v_ImagePackage]"
  136.     $bootPackages = ReturnSQLResult $SQLConnection "select * from [dbo].[vSMS_BootImagePackage]"
  137.     $osSourcePckg = ReturnSQLResult $SQLConnection "select * from [dbo].[vSMS_OSInstallPackage]"
  138.     $pkgDp = ReturnSQLResult $SQLConnection "select p.Name, dp.* from  [dbo].[v_DistributionPoint] dp join SMSPackages p on dp.PackageID = p.PkgID"
  139.     $adv = ReturnSQLResult $SQLConnection "select * from vSMS_Advertisement_List"
  140.    
  141.    
  142.     $dp = ReturnSQLResult $SQLConnection "select * from [dbo].[v_DistributionPoints]"
  143.     $dpg = ReturnSQLResult $SQLConnection "select * from [dbo].[vSMS_DistributionPointGroup]"
  144.     $dpgCol = ReturnSQLResult $SQLConnection "select * from [dbo].[vSMS_DPGroupCollections]"
  145.     $dpgMem = ReturnSQLResult $SQLConnection "select dp.ServerName, dpg.Name
  146.        from [dbo].[v_DPGroupMembers] dpgm join v_DistributionPoints dp on dpgm.DPNALPath = dp.NALPath
  147.            join vSMS_DistributionPointGroup dpg  on dpgm.GroupID = dpg.GroupID"
  148.    
  149.     $program = ReturnSQLResult $SQLConnection "select * from v_Program"
  150.     $col = ReturnSQLResult $SQLConnection "select * from v_Collection"
  151.     $colDirect = ReturnSQLResult $SQLConnection "select crd.*, c.Name, s.Name0, s.Netbios_Name0, s.Resource_Domain_OR_Workgr0
  152.         from v_CollectionRuleDirect crd join v_Collection c on crd.CollectionID = c.CollectionID join v_R_System s on crd.ResourceID = s.ResourceID"
  153.     $colQuery = ReturnSQLResult $SQLConnection "select crq.*, c.Name from v_CollectionRuleQuery crq join v_Collection c on crq.CollectionID = c.CollectionID"
  154.     $colSettings = ReturnSQLResult $SQLConnection "select * from vSMS_CollectionSettings"
  155.     $svcWindows = ReturnSQLResult $SQLConnection "select c.Name, sw.* from [v_ServiceWindow] sw join v_Collection c on sw.CollectionID = c.CollectionID"
  156.    
  157.     $supSync = ReturnSQLResult $SQLConnection "select * from v_SoftwareUpdateSource"
  158.     $adForest = ReturnSQLResult $SQLConnection "select * from vActiveDirectoryForests"
  159.    
  160.    
  161.     Write-Progress -Activity "Формирование данных..." -Id 1 -Status "Running" -PercentComplete 50
  162.     Write-Host "Формирование данных..."
  163.     $report = New-Object System.Object
  164.     $report | Add-Member -Name "Boundary" -MemberType NoteProperty -Value $boundary
  165.     $report | Add-Member -Name "BoundaryGroup" -MemberType NoteProperty -Value $boundaryGroup
  166.     $report | Add-Member -Name "BoundaryGroupMem" -MemberType NoteProperty -Value $boundaryGroupMem
  167.     $report | Add-Member -Name "BoundarySys" -MemberType NoteProperty -Value $boundaryGroupSys
  168.     $report | Add-Member -Name "Sites" -MemberType NoteProperty -Value $sites
  169.     $report | Add-Member -Name "SubSites" -MemberType NoteProperty -Value $subSites
  170.     $report | Add-Member -Name "SrvComp" -MemberType NoteProperty -Value $srvComp
  171.     $report | Add-Member -Name "SiteDef" -MemberType NoteProperty -Value $siteDef
  172.     $report | Add-Member -Name "SiteDefProp" -MemberType NoteProperty -Value $siteDefProp
  173.     $report | Add-Member -Name "SiteDefPropList" -MemberType NoteProperty -Value $siteDefPropList
  174.     $report | Add-Member -Name "CompProp" -MemberType NoteProperty -Value $CompProp
  175.     $report | Add-Member -Name "CompPropList" -MemberType NoteProperty -Value $CompPropList
  176.     $report | Add-Member -Name "Addr" -MemberType NoteProperty -Value $addr
  177.     $report | Add-Member -Name "AddrProp" -MemberType NoteProperty -Value $addrProp
  178.     $report | Add-Member -Name "AddrPropList" -MemberType NoteProperty -Value $addrPropList
  179.     $report | Add-Member -Name "ClientSettings" -MemberType NoteProperty -Value $ClientSettings
  180.     $report | Add-Member -Name "ClientSettingsProp" -MemberType NoteProperty -Value $ClientSettingsProp
  181.     $report | Add-Member -Name "Sys" -MemberType NoteProperty -Value $sys
  182.     $report | Add-Member -Name "SysProp" -MemberType NoteProperty -Value $sysProp
  183.     $report | Add-Member -Name "SysPropList" -MemberType NoteProperty -Value $sysPropList
  184.     $report | Add-Member -Name "SCProp" -MemberType NoteProperty -Value $scprop
  185.     $report | Add-Member -Name "SCPropList" -MemberType NoteProperty -Value $scpropList
  186.     $report | Add-Member -Name "Packages" -MemberType NoteProperty -Value $packages
  187.     $report | Add-Member -Name "SUPPackages" -MemberType NoteProperty -Value $supckages
  188.     $report | Add-Member -Name "DriverPackages" -MemberType NoteProperty -Value $driverPackages
  189.     $report | Add-Member -Name "ImagePackages" -MemberType NoteProperty -Value $imagePackages
  190.     $report | Add-Member -Name "BootPackages" -MemberType NoteProperty -Value $bootPackages
  191.     $report | Add-Member -Name "OSPackages" -MemberType NoteProperty -Value $osSourcePckg
  192.     $report | Add-Member -Name "PackageDistribution" -MemberType NoteProperty -Value $pkgDp
  193.     $report | Add-Member -Name "Advert" -MemberType NoteProperty -Value $adv
  194.     $report | Add-Member -Name "DP" -MemberType NoteProperty -Value $dp
  195.     $report | Add-Member -Name "DPG" -MemberType NoteProperty -Value $dpg
  196.     $report | Add-Member -Name "DGP2Col" -MemberType NoteProperty -Value $dpgCol
  197.     $report | Add-Member -Name "DPGMembers" -MemberType NoteProperty -Value $dpgMem
  198.     $report | Add-Member -Name "Programs" -MemberType NoteProperty -Value $program
  199.     $report | Add-Member -Name "Collection" -MemberType NoteProperty -Value $col
  200.     $report | Add-Member -Name "CollectionDirectRule" -MemberType NoteProperty -Value $colDirect
  201.     $report | Add-Member -Name "CollectionQueryRule" -MemberType NoteProperty -Value $colQuery
  202.     $report | Add-Member -Name "CollectionSettings" -MemberType NoteProperty -Value $colSettings
  203.     $report | Add-Member -Name "ColSvcWindows" -MemberType NoteProperty -Value $svcWindows
  204.     $report | Add-Member -Name "SUPSync" -MemberType NoteProperty -Value $supSync
  205.     $report | Add-Member -Name "ADForest" -MemberType NoteProperty -Value $adForest
  206.    
  207.     Write-Progress -Activity "Сохраняем данные ..." -Id 1 -Status "Running" -PercentComplete 99
  208.     $report | Export-Clixml $resultfile -Depth 1
  209.     $xmlstr = Get-Content $resultfile
  210.     $xmlstr = "<?xml version=`"1.0`"?>`n`r<?xml-stylesheet type=`"text/xsl`" href=`"$xslfile`"?>`n`r" + $xmlstr
  211.     Set-Content -Path $resultfile -Encoding UTF8 -Value $xmlstr
  212.     Write-Progress -Activity "Завершено..." -Id 1 -Status "Running" -PercentComplete 100 -Completed
  213. }
  214. finally{
  215.     if ($sqlConnection.State -eq "Open"){
  216.         Write-Host "Close Connection"
  217.         $sqlConnection.Close()
  218.     }
  219. }
Advertisement
Add Comment
Please, Sign In to add comment