YeOldScallywag

Get-Report

Apr 7th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Function Get-Report{
  2.     <#
  3.     .SYNOPSIS
  4.     Pulls Reports for Various things.
  5.  
  6.     .DESCRIPTION
  7.     This module collects various information, specified by the argument, into CSV reports.
  8.  
  9.     v1.1 Changes:
  10.     Added ability to specify one server.
  11.  
  12.     Created By YeOldScallywag
  13.  
  14.     UpTime:
  15.         This will generate a report for the last time the server was rebooted.
  16.     QFE:
  17.         This will generate a report of all patches and hotfixes installed based on a given number of days.  
  18.     ShutdownLog:
  19.         This will generate a report of users that have initiated a shutdown on a server based on a given number of days.
  20.     Service:
  21.         This will generate a report of services that installed on the server.  
  22.     Server:
  23.         This parameter must be used in conjunction with one or more of the above listed parameters.
  24.         This is used to specify a specific server. For usage syntax see Examples section.
  25.        
  26.     REQUIREMENTS
  27.     - Powershell window must be ran as Elevated/ A User.    
  28.        
  29.     .EXAMPLE
  30.     This is the basic example of the syntax
  31.     C:\PS> Get-Report
  32.     This will run all the above listed reports on the given list of servers.
  33.  
  34.     C:\PS> Get-Report -QFE
  35.         This will generate a report of all patches and hotfixes installed based on a given number of days.
  36.  
  37.     C:\PS> Get-Report -ShutdownLog
  38.         This will generate a report of users that have initiated a shutdown on a server based on a given number of days.
  39.  
  40.     C:\PS> Get-Report -UpTime
  41.         This will generate a report for the last time the server was rebooted.
  42.  
  43.     C:\PS> Get-Report -Service
  44.         This will generate a report of services that installed on the server.
  45.  
  46.     C:\PS> Get-Report -Server <Server Name>
  47.         This parameter allows you to specify a specific server instead of the module prompting you for a list. This can be used with any of the parameters above.
  48.  
  49.  
  50.     .LINK
  51.     http://bloggintechie.blogspot.com/
  52.     https://chromebookparadise.wordpress.com/
  53.     https://www.reddit.com/u/YeOldScallywag
  54.     #>
  55.     Param([switch]$Hardware,[switch]$UpTime,[switch]$QFE,[switch]$ShutdownLog,[switch]$Service,[string]$Server,[switch]$QFEDaily)
  56.     Function Get-ServerList{  
  57.         [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
  58.         $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
  59.         $OpenFileDialog.initialDirectory = $initialDirectory
  60.         $OpenFileDialog.filter = "All files (*.*)| *.*"
  61.         $OpenFileDialog.Title = "Please Specify Serverlist File:"
  62.         $Show = $OpenFileDialog.ShowDialog()
  63.         If ($Show -eq "OK"){
  64.             Return $OpenFileDialog.filename
  65.             }Else{
  66.                 Write-Error "Operation cancelled by user."
  67.                 Pause
  68.                 exit
  69.                 }
  70.        
  71.     }
  72.     Function Get-ReportPath{
  73.         param([string]$Description="Select Folder for Report",[string]$RootFolder="Desktop")
  74.         [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
  75.         $objForm = New-Object System.Windows.Forms.FolderBrowserDialog
  76.         $objForm.Rootfolder = $RootFolder
  77.         $objForm.Description = $Description
  78.         $Show = $objForm.ShowDialog()
  79.         If ($Show -eq "OK"){
  80.             Return $objForm.SelectedPath
  81.             }Else{
  82.                 Write-Error "Operation cancelled by user."
  83.                 Pause
  84.                 exit
  85.                 }
  86.     }
  87.     if(!$server){
  88.         $ServerListPath = Get-ServerList
  89.         $serverList = Get-Content $ServerListPath
  90.         $ReportPath = Get-ReportPath
  91.         $file_now = Get-Date -format MM-dd-yy.hhmmtt
  92.         $now = Get-Date
  93.         }
  94.         else{
  95.             $serverList = $Server
  96.             $ReportPath = Get-ReportPath
  97.             $file_now = Get-Date -format MM-dd-yy.hhmmtt
  98.             $now = Get-Date
  99.             }
  100.     Function Get-UpTimeReport{
  101.         write-host `n`rStarting UpTime Report Generation.... -ForegroundColor Yellow `n`r
  102.         $ErrorActionPreference = "SilentlyContinue"
  103.         $URD = "Uptime-Reports"
  104.         New-Item -path $ReportPath -name $URD -ItemType directory -ErrorAction SilentlyContinue | out-null
  105.         $TRD = "$file_now"
  106.         New-Item -path $ReportPath\$URD -name $TRD -ItemType directory -ErrorAction SilentlyContinue | out-null
  107.         ForEach($server in $serverlist){
  108.             $TC = Test-Connection $Server -ErrorAction Stop -Quiet -Count 2
  109.             if($TC){
  110.                 $UR = gwmi Win32_OperatingSystem -ComputerName $server -ErrorAction SilentlyContinue -ErrorVariable E1V | select @{LABEL='Server Name';E={$_.csname}},@{L=' ';E={''}},@{LABEL='LastBoot';EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}},@{L='Error';E={''}}
  111.                 if((!$UR)-and(!$E1V)){
  112.                     $EE = '"Server Name"," ","LastBoot","Error"'
  113.                     $EE | select @{LABEL='Server Name';E={$server}},@{L=' ';E={''}},@{LABEL='LastBoot';EXPRESSION={''}},@{L='Error';E={'No WMI boot records found'}} | Export-Csv "$ReportPath\$URD\$file_now\Uptime Report.csv" -Append -NoTypeInformation
  114.                     write-host No WMI boot records found on $server.... -ForegroundColor DarkRed -BackgroundColor Green `n`r
  115.                     }elseif((!$UR)-and($E1V)){
  116.                         Write-Host An error has occured when attempting to find boot records on $server -ForegroundColor Red -BackgroundColor White `n`r
  117.                         $ER = '"Server Name"," ","LastBoot","Error"'
  118.                         $ER | select @{LABEL='Server Name';E={$Server}},@{L=' ';E={''}},@{LABEL='LastBoot';EXPRESSION={''}},@{LABEL='Error';E={$E1V}} | Export-Csv "$ReportPath\$URD\$file_now\Uptime Report.csv" -Append -NoTypeInformation                    
  119.                         }else{
  120.                             $UR | Export-Csv "$ReportPath\$URD\$file_now\Uptime Report.csv" -Append -NoTypeInformation
  121.                             write-host Uptime Report gathered for $server.... `n`r
  122.                             }
  123.                 }else{
  124.                     $EE = '"Server Name"," ","LastBoot","Error"'
  125.                     $EE | select @{LABEL='Server Name';E={$Server}},@{L=' ';E={''}},@{LABEL='LastBoot';EXPRESSION={''}},@{LABEL='Error';E={'Failed to Connect'}} | Export-Csv "$ReportPath\$URD\$file_now\Uptime Report.csv" -Append -NoTypeInformation
  126.                     write-host Failed to connect to $server.... -ForegroundColor Red -BackgroundColor Yellow `n`r
  127.                     }  
  128.         }
  129.         Write-Host `n`rUPTime Report generation completed... -ForegroundColor Yellow `n`r
  130.         Pause
  131.     }
  132.     Function Get-QFEReport{
  133.         write-host `n`rStarting Quick Fix Engineering Report Generation.... -ForegroundColor Yellow `n`r
  134.         [void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
  135.         $qfe_days = [Microsoft.VisualBasic.Interaction]::InputBox("How many days would you like the Quick Fix Engineering Report for?", "QFE Report", "2")
  136.         $qfe_days = $qfe_days.trim();
  137.         $ErrorActionPreference = "SilentlyContinue"
  138.         $QRD = "QFE-Reports"
  139.         New-Item -path $ReportPath -name $QRD -ItemType directory -ErrorAction SilentlyContinue | out-null
  140.         $TRD = "$file_now"
  141.         New-Item -path $ReportPath\$QRD -name $TRD -ItemType directory -ErrorAction SilentlyContinue | out-null
  142.         foreach ($Server in $Serverlist){
  143.             $TC = Test-Connection $Server -ErrorAction Stop -Quiet -Count 2
  144.             if($TC){
  145.                 $QFE = gwmi Win32_Quickfixengineering -ComputerName $Server -ErrorAction SilentlyContinue -ErrorVariable E2V | ? {$_.InstalledOn -ge $now.AddDays(-$qfe_days)} | select @{N="Server Name";E={$server}},Description,HotFixID,InstalledON,Error
  146.                 if((!$QFE)-and(!$E2V)){
  147.                     $QFE = '"Server Name","Description","HotFixID","InstalledOn","Error"'
  148.                     $QFE | select @{N="Server Name";E={$Server}},@{N="Description";E={"No updates found for specified number of days($qfe_days)"}},HotFixID,InstalledON,Error | Export-Csv "$ReportPath\$QRD\$file_now\QFE Reports.csv" -Append -NoTypeInformation
  149.                     Write-Host "No updates found for $Server for specified number of days($qfe_days)" -ForegroundColor DarkRed -BackgroundColor Green `n`r
  150.                     }elseif((!$QFE)-and($E2V)){
  151.                         Write-Host An error has occured when attempting to find QFE records on $server for $qfe_days days.... -ForegroundColor Red -BackgroundColor White `n`r
  152.                         $ER = '"Server Name","Description","HotFixID","InstalledOn","Error"'
  153.                         $ER | select @{N="Server Name";E={$server}},@{L='Description';E={'An error has occured'}},HotFixID,InstalledON,@{LABEL='Error';E={$E2V}} | Export-Csv "$ReportPath\$QRD\$file_now\QFE Reports.csv" -Append -NoTypeInformation                    
  154.                         }else{
  155.                            $QFE | Export-Csv "$ReportPath\$QRD\$file_now\QFE Reports.csv" -Append -NoTypeInformation
  156.                            Write-Host QFE Report successfully generated for $Server `n`r
  157.                             }                
  158.             }else{  
  159.                 $EE = '"Server Name"'
  160.                 $EE | select @{LABEL='Server Name';E={$Server}},@{L='Description';E={'Failed to Connect'}},HotFixID,InstalledON,Error | Export-Csv "$ReportPath\$QRD\$file_now\QFE Reports.csv" -Append -NoTypeInformation
  161.                 write-host Failed to connect to $server.... -ForegroundColor Red -BackgroundColor Yellow `n`r
  162.             }
  163.         }
  164.         write-host `n`rQFE Report generation completed... -ForegroundColor Yellow `n`r
  165.         Pause
  166.     }
  167.     Function Get-DailyQFEReport{
  168.         write-host `n`rStarting Daily Quick Fix Engineering Report Generation.... -ForegroundColor Yellow `n`r
  169.         [void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
  170.         $qfe_days = 60
  171.         $ErrorActionPreference = "SilentlyContinue"
  172.         $QRD = "QFE-Daily-Reports"
  173.         New-Item -path $ReportPath -name $QRD -ItemType directory -ErrorAction SilentlyContinue | out-null
  174.         $TRD = "$file_now"
  175.         New-Item -path $ReportPath\$QRD -name $TRD -ItemType directory -ErrorAction SilentlyContinue | out-null
  176.         foreach ($Server in $Serverlist){
  177.             $TC = Test-Connection $Server -ErrorAction Stop -Quiet -Count 2
  178.             if($TC){
  179.                 $QFE = Get-HotFix -ComputerName $Server -ErrorAction SilentlyContinue -ErrorVariable E2V | ? {$_.InstalledOn -ge $now.AddDays(-$qfe_days)} | select @{N="Server Name";E={$server}},Description,HotFixID,InstalledON,Error
  180.                 if((!$QFE)-and(!$E2V)){
  181.                     $QFE = '"Server Name","Error"'
  182.                     $QFE | select @{L="Server Name";E={$Server}},@{L='Error';E={''}} | Export-Csv "$ReportPath\$QRD\$file_now\QFE Daily Reports.csv" -Append -NoTypeInformation
  183.                     Write-Host "No updates found for $Server" -ForegroundColor DarkRed -BackgroundColor Green `n`r
  184.                     }elseif((!$QFE)-and($E2V)){
  185.                         Write-Host An error has occured when attempting to find QFE records on $server -ForegroundColor Red -BackgroundColor White `n`r
  186.                         $ER = '"Server Name","Error"'
  187.                         $ER | select @{N="Server Name";E={$server}},@{LABEL='Error';E={$E2V}} | Export-Csv "$ReportPath\$QRD\$file_now\QFE Daily Reports.csv" -Append -NoTypeInformation                    
  188.                         }else{
  189.                            Write-Host Patches found for QFE Report on $Server moving on `n`r -BackgroundColor Magenta
  190.                             }                
  191.             }else{  
  192.                 $EE = '"Server Name","Error"'
  193.                 $EE | select @{LABEL='Server Name';E={$Server}},@{L='Error';E={'Failed to Connect'}} | Export-Csv "$ReportPath\$QRD\$file_now\QFE Daily Reports.csv" -Append -NoTypeInformation
  194.                 write-host Failed to connect to $server.... -ForegroundColor Red -BackgroundColor Yellow `n`r
  195.             }
  196.         }
  197.         write-host `n`rQFE Daily Report generation completed... -ForegroundColor Yellow `n`r
  198.         Pause
  199.     }
  200.     Function Get-ShutdownLogReport{
  201.         write-host `n`rStarting Shutdown Log Report Generation....`n`r -ForegroundColor Yellow
  202.         [void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
  203.         $NOE = [Microsoft.VisualBasic.Interaction]::InputBox("From Newest to Oldest, how many Shutdown events would you like to go back?", "Shutdown Events", "10")
  204.         $NOE =  $NOE.Trim();
  205.         $ErrorActionPreference = "SilentlyContinue"
  206.         $SLD = "ShutdownLog-Reports"
  207.         New-Item -path $ReportPath -name $SLD -ItemType directory -ErrorAction SilentlyContinue | out-null
  208.         $TRD = "$file_now"
  209.         New-Item -path $ReportPath\$SLD -name $TRD -ItemType directory -ErrorAction SilentlyContinue | out-null
  210.         $EN = '"MachineName","Message","TimeWritten","UserName","PSComputerName","RunspaceId","PSShowComputerName","Error"'
  211.         $EN | select @{L='MachineName';E={''}},@{L='Message';E={''}},@{L='TimeWritten';E={''}},@{L='UserName';E={''}},@{L='PSComputerName';E={''}},@{L='RunspaceId';E={''}},@{L='PSShowComputerName';E={''}},@{L='Error';E={''}} | Export-Csv "$ReportPath\$SLD\$file_now\ShutdownLog Report.csv" -Append -NoTypeInformation
  212.         Foreach($Server in $ServerList){
  213.             $TC = Test-Connection $Server -ErrorAction Stop -Quiet -Count 2
  214.             if($TC){
  215.                 $SB = [scriptblock]::Create("Get-EventLog -ComputerName $Server -LogName System -Newest $NOE -InstanceId 2147484722 -ErrorAction SilentlyContinue | select MachineName,Message,TimeWritten,UserName")
  216.                 $EL = Start-Job -ScriptBlock $SB
  217.                 Wait-Job $EL -Timeout 60
  218.                 Stop-Job $EL
  219.                 $EL = Receive-Job $EL -ErrorVariable E3V
  220.                 if((!$EL)-and(!$E3v)){
  221.                     $EN = '"MachineName","Message","TimeWritten","UserName","PSComputerName","RunspaceId","PSShowComputerName","Error"'
  222.                     $EN | select @{L='MachineName';E={$server}},@{L='Message';E={''}},@{L='TimeWritten';E={''}},@{L='UserName';E={''}},@{L='PSComputerName';E={''}},@{L='RunspaceId';E={''}},@{L='PSShowComputerName';E={''}},@{L='Error';E={'No Logs Found'}} | Export-Csv "$ReportPath\$SLD\$file_now\ShutdownLog Report.csv" -Append -NoTypeInformation
  223.                     Write-Host "No logs found for $server for specified number of logs($NOE)" -ForegroundColor Red -BackgroundColor white `n`r
  224.                     }elseif((!$EL)-and($E3V)){
  225.                         Write-Host An error has occured when attempting to find Shutdown Log records on $server -ForegroundColor Red -BackgroundColor White `n`r
  226.                         $ER = '"MachineName","Message","TimeWritten","UserName","PSComputerName","RunspaceId","PSShowComputerName","Error"'
  227.                         $ER | select @{L='MachineName';E={$Server}},@{L='Message';E={''}},@{L='TimeWritten';E={''}},@{L='UserName';E={''}},@{L='PSComputerName';E={''}},@{L='RunspaceId';E={''}},@{L='PSShowComputerName';E={''}},@{L='Error';E={$E3V}} | Export-Csv "$ReportPath\$SLD\$file_now\ShutdownLog Report.csv" -Append -NoTypeInformation                    
  228.                         }else{
  229.                             $EL | select MachineName,Message,TimeWritten,UserName,PSComputerName,RunspaceId,PSShowComputerName,@{L='Error';E={''}} | Export-Csv "$ReportPath\$SLD\$file_now\ShutdownLog Report.csv" -Append -NoTypeInformation
  230.                             Write-Host Shutdown Log was successfully pulled for $Server...`n`r
  231.                             }
  232.             }Else{
  233.                 $EE = '"MachineName","Message","TimeWritten","UserName","PSComputerName","RunspaceId","PSShowComputerName","Error"'
  234.                 $EE | select @{L='MachineName';E={$Server}},@{L='Message';E={''}},@{L='TimeWritten';E={''}},@{L='UserName';E={''}},@{L='PSComputerName';E={''}},@{L='RunspaceId';E={''}},@{L='PSShowComputerName';E={''}},@{L='Error';E={'Failed to Connect'}} | Export-Csv "$ReportPath\$SLD\$file_now\ShutdownLog Report.csv" -Append -NoTypeInformation
  235.                 write-host Failed to connect to $server.... -ForegroundColor Red -BackgroundColor Yellow `n`r
  236.             }
  237.         }
  238.         Write-Host `n`rShutdown Log Report generation has completed... -ForegroundColor Yellow `n`r
  239.         Pause
  240.     }
  241.     Function Get-InsServiceReport{
  242.         write-host `n`rStarting Service Report Generation.... -ForegroundColor Yellow `n`r
  243.         $ErrorActionPreference = "SilentlyContinue"
  244.         $SRD = "Service-Reports"
  245.         New-Item -path $ReportPath -name $SRD -ItemType directory -ErrorAction SilentlyContinue | out-null
  246.         $TRD = "$file_now"
  247.         New-Item -path $ReportPath\$SRD -name $TRD -ItemType directory -ErrorAction SilentlyContinue | out-null
  248.         foreach ($server in $serverlist){
  249.             $TC = Test-Connection $Server -ErrorAction Stop -Quiet -Count 2
  250.             if($TC){
  251.                 $srvfqdn = [System.Net.Dns]::GetHostByName("$server")
  252.                 $srvfqdn = $srvfqdn.HostName
  253.                 $SR = gwmi win32_service -ComputerName $srvfqdn -ErrorAction SilentlyContinue -ErrorVariable E4V
  254.                 if((!$SR)-and(!$E4V)){
  255.                     $EE = '"Server Name"'
  256.                     $EE | select @{LABEL='Server Name';E={$Server}} | Export-Csv "$ReportPath\$SRD\$file_now\Failed Service Report.csv" -Append -NoTypeInformation
  257.                     write-host Service Report failed for $server -ForegroundColor Red -BackgroundColor White `n`r
  258.                     }elseif((!$EL)-and($E4V)){
  259.                         Write-Host An error has occured when attempting to gather Services on $server -ForegroundColor Red -BackgroundColor White `n`r
  260.                         $ER = '"Server Name","Error"'
  261.                         $ER | select @{LABEL='Server Name';E={$Server}},@{LABEL='Error';E={$E4V}} | Export-Csv "$ReportPath\$SRD\$file_now\ShutdownLog Report Error.csv" -Append -NoTypeInformation
  262.                         }else{
  263.                             $SR | export-csv "$ReportPath\$SRD\$file_now\$Server Service Report.csv" -NoTypeInformation
  264.                             write-host Service Report for $server has been Generated`n`r
  265.                             }
  266.                 }
  267.                 elseif($TC -eq $false){
  268.                     $EE = '"Server Name"'
  269.                     $EE | select @{LABEL='Server Name';E={$Server}} | Export-Csv "$ReportPath\$SRD\$file_now\Failed to Connect.csv" -Append -NoTypeInformation
  270.                     write-host Failed to connect to $server.... -ForegroundColor Red -BackgroundColor Yellow `n`r
  271.                 }
  272.         }
  273.         write-host `n`rService Report Generation Completed... -ForegroundColor Yellow `n`r
  274.         Pause
  275.     }
  276.     Function Get-InsHardwareReport{
  277.         write-host `n`rStarting Hardware Report Generation.... -ForegroundColor Yellow `n`r
  278.         $ErrorActionPreference = "SilentlyContinue"
  279.         $HRD = "Hardware-Reports"
  280.         New-Item -path $ReportPath -name $HRD -ItemType directory -ErrorAction SilentlyContinue | out-null
  281.         $TRD = "$file_now"
  282.         New-Item -path $ReportPath\$HRD -name $TRD -ItemType directory -ErrorAction SilentlyContinue | out-null
  283.         $EN = '"Server Name","CPU","Mem","HDD 1 Letter","HDD 1 Freespace","HDD 1 Size","HDD 1 Provider Name","HDD 2 Letter","HDD 2 Freespace","HDD 2 Size","HDD 2 Provider Name","HDD 3 Letter","HDD 3 Freespace","HDD 3 Size","HDD 3 Provider Name","HDD 4 Letter","HDD 4 Freespace","HDD 4 Size","HDD 4 Provider Name","HDD 5 Letter","HDD 5 Freespace","HDD 5 Size","HDD 5 Provider Name","HDD 6 Letter","HDD 6 Freespace","HDD 6 Size","HDD 6 Provider Name","HDD 7 Letter","HDD 7 Freespace","HDD 7 Size","HDD 7 Provider Name","HDD 8 Letter","HDD 8 Freespace","HDD 8 Size","HDD 8 Provider Name","HDD 9 Letter","HDD 9 Freespace","HDD 9 Size","HDD 9 Provider Name","HDD 10 Letter","HDD 10 Freespace","HDD 10 Size","HDD 10 Provider Name","Error"'
  284.         $EN | select @{L='Server Name';E={$Server}},
  285.                 @{L='CPU';E={''}},
  286.                 @{L='Mem';E={''}},
  287.                 @{L='HDD 1 Letter';E={''}},
  288.                 @{L='HDD 1 Freespace';E={''}},
  289.                 @{L='HDD 1 Size';E={''}},
  290.                 @{L='HDD 1 Provider Name';E={''}},
  291.                 @{L='HDD 2 Letter';E={''}},
  292.                 @{L='HDD 2 Freespace';E={''}},
  293.                 @{L='HDD 2 Size';E={''}},
  294.                 @{L='HDD 2 Provider Name';E={''}},
  295.                 @{L='HDD 3 Letter';E={''}},
  296.                 @{L='HDD 3 Freespace';E={''}},
  297.                 @{L='HDD 3 Size';E={''}},
  298.                 @{L='HDD 3 Provider Name';E={''}},
  299.                 @{L='HDD 4 Letter';E={''}},
  300.                 @{L='HDD 4 Freespace';E={''}},
  301.                 @{L='HDD 4 Size';E={''}},
  302.                 @{L='HDD 4 Provider Name';E={''}},
  303.                 @{L='HDD 5 Letter';E={''}},
  304.                 @{L='HDD 5 Freespace';E={''}},
  305.                 @{L='HDD 5 Size';E={''}},
  306.                 @{L='HDD 5 Provider Name';E={''}},
  307.                 @{L='HDD 6 Letter';E={''}},
  308.                 @{L='HDD 6 Freespace';E={''}},
  309.                 @{L='HDD 6 Size';E={''}},
  310.                 @{L='HDD 6 Provider Name';E={''}},
  311.                 @{L='HDD 7 Letter';E={''}},
  312.                 @{L='HDD 7 Freespace';E={''}},
  313.                 @{L='HDD 7 Size';E={''}},
  314.                 @{L='HDD 7 Provider Name';E={''}},
  315.                 @{L='HDD 8 Letter';E={''}},
  316.                 @{L='HDD 8 Freespace';E={''}},
  317.                 @{L='HDD 8 Size';E={''}},
  318.                 @{L='HDD 8 Provider Name';E={''}},
  319.                 @{L='HDD 9 Letter';E={''}},
  320.                 @{L='HDD 9 Freespace';E={''}},
  321.                 @{L='HDD 9 Size';E={''}},
  322.                 @{L='HDD 9 Provider Name';E={''}},
  323.                 @{L='HDD 10 Letter';E={''}},
  324.                 @{L='HDD 10 Freespace';E={''}},
  325.                 @{L='HDD 10 Size';E={''}},
  326.                 @{L='HDD 10 Provider Name';E={''}},
  327.                 @{L='Error';E={''}} | Export-Csv "$ReportPath\$HRD\$TRD\Hardware Report.csv" -Append -NoTypeInformation
  328.         ForEach($server in $serverlist){
  329.             $TC = Test-Connection $Server -ErrorAction Stop -Quiet -Count 2
  330.             if($TC){
  331.                 $PR = gwmi win32_Processor -ComputerName $server -ErrorAction SilentlyContinue -ErrorVariable E1V
  332.                 $RR = gwmi win32_physicalmemory -ComputerName $server -ErrorAction SilentlyContinue -ErrorVariable E2V | ForEach-Object {$_.Capacity / 1GB}
  333.                 $HR = gwmi win32_logicaldisk -ComputerName $server -ErrorAction SilentlyContinue -ErrorVariable E3V
  334.                 $A = 0
  335.                 $B = ($HR.DeviceID.Count - 1)  
  336.                 do{      
  337.                     Set-Variable -Value $HR.DeviceId[$A] -Name HDID$A
  338.                     Set-Variable -Value $HR.ProviderName[$A] -Name HDPN$A
  339.                     Set-Variable -Value $HR.Size[$A] -Name HDSZ$A
  340.                     Set-Variable -Value $HR.FreeSpace[$A] -Name HDFS$A
  341.                     $A++
  342.                     }while($A -le $B)
  343.                 if((!$PR)-and(!$RR)-and(!$HR)){
  344.                     Write-Host An error has occured when attempting to collect hardware information on $server -ForegroundColor Red -BackgroundColor White `n`r
  345.                     $ER = '"Server Name","CPU","Mem","HDD 1 Letter","HDD 1 Freespace","HDD 1 Size","HDD 1 Provider Name","HDD 2 Letter","HDD 2 Freespace","HDD 2 Size","HDD 2 Provider Name","HDD 3 Letter","HDD 3 Freespace","HDD 3 Size","HDD 3 Provider Name","HDD 4 Letter","HDD 4 Freespace","HDD 4 Size","HDD 4 Provider Name","HDD 5 Letter","HDD 5 Freespace","HDD 5 Size","HDD 5 Provider Name","HDD 6 Letter","HDD 6 Freespace","HDD 6 Size","HDD 6 Provider Name","HDD 7 Letter","HDD 7 Freespace","HDD 7 Size","HDD 7 Provider Name","HDD 8 Letter","HDD 8 Freespace","HDD 8 Size","HDD 8 Provider Name","HDD 9 Letter","HDD 9 Freespace","HDD 9 Size","HDD 9 Provider Name","HDD 10 Letter","HDD 10 Freespace","HDD 10 Size","HDD 10 Provider Name","Error"'
  346.                     $ER | select @{L='Server Name';E={$Server}},
  347.                             @{L='CPU';E={''}},
  348.                             @{L='Mem';E={''}},
  349.                             @{L='HDD 1 Letter';E={''}},
  350.                             @{L='HDD 1 Freespace';E={''}},
  351.                             @{L='HDD 1 Size';E={''}},
  352.                             @{L='HDD 1 Provider Name';E={''}},
  353.                             @{L='HDD 2 Letter';E={''}},
  354.                             @{L='HDD 2 Freespace';E={''}},
  355.                             @{L='HDD 2 Size';E={''}},
  356.                             @{L='HDD 2 Provider Name';E={''}},
  357.                             @{L='HDD 3 Letter';E={''}},
  358.                             @{L='HDD 3 Freespace';E={''}},
  359.                             @{L='HDD 3 Size';E={''}},
  360.                             @{L='HDD 3 Provider Name';E={''}},
  361.                             @{L='HDD 4 Letter';E={''}},
  362.                             @{L='HDD 4 Freespace';E={''}},
  363.                             @{L='HDD 4 Size';E={''}},
  364.                             @{L='HDD 4 Provider Name';E={''}},
  365.                             @{L='HDD 5 Letter';E={''}},
  366.                             @{L='HDD 5 Freespace';E={''}},
  367.                             @{L='HDD 5 Size';E={''}},
  368.                             @{L='HDD 5 Provider Name';E={''}},
  369.                             @{L='HDD 6 Letter';E={''}},
  370.                             @{L='HDD 6 Freespace';E={''}},
  371.                             @{L='HDD 6 Size';E={''}},
  372.                             @{L='HDD 6 Provider Name';E={''}},
  373.                             @{L='HDD 7 Letter';E={''}},
  374.                             @{L='HDD 7 Freespace';E={''}},
  375.                             @{L='HDD 7 Size';E={''}},
  376.                             @{L='HDD 7 Provider Name';E={''}},
  377.                             @{L='HDD 8 Letter';E={''}},
  378.                             @{L='HDD 8 Freespace';E={''}},
  379.                             @{L='HDD 8 Size';E={''}},
  380.                             @{L='HDD 8 Provider Name';E={''}},
  381.                             @{L='HDD 9 Letter';E={''}},
  382.                             @{L='HDD 9 Freespace';E={''}},
  383.                             @{L='HDD 9 Size';E={''}},
  384.                             @{L='HDD 9 Provider Name';E={''}},
  385.                             @{L='HDD 10 Letter';E={''}},
  386.                             @{L='HDD 10 Freespace';E={''}},
  387.                             @{L='HDD 10 Size';E={''}},
  388.                             @{L='HDD 10 Provider Name';E={''}},
  389.                             @{L='Error';E={"$E1V $E2V $E3V"}} | Export-Csv "$ReportPath\$HRD\$TRD\Hardware Report.csv" -Append -NoTypeInformation
  390.                     }else{
  391.                         $ER = '"Server Name","CPU","Mem","HDD 1 Letter","HDD 1 Freespace","HDD 1 Size","HDD 1 Provider Name","HDD 2 Letter","HDD 2 Freespace","HDD 2 Size","HDD 2 Provider Name","HDD 3 Letter","HDD 3 Freespace","HDD 3 Size","HDD 3 Provider Name","HDD 4 Letter","HDD 4 Freespace","HDD 4 Size","HDD 4 Provider Name","HDD 5 Letter","HDD 5 Freespace","HDD 5 Size","HDD 5 Provider Name","HDD 6 Letter","HDD 6 Freespace","HDD 6 Size","HDD 6 Provider Name","HDD 7 Letter","HDD 7 Freespace","HDD 7 Size","HDD 7 Provider Name","HDD 8 Letter","HDD 8 Freespace","HDD 8 Size","HDD 8 Provider Name","HDD 9 Letter","HDD 9 Freespace","HDD 9 Size","HDD 9 Provider Name","HDD 10 Letter","HDD 10 Freespace","HDD 10 Size","HDD 10 Provider Name","Error"'
  392.                         $ER | select @{L='Server Name';E={$Server}},
  393.                             @{L='CPU';E={($PR.Name).count; "CPUs"}},
  394.                             @{L='Mem';E={($RR | Measure-Object -Sum).Sum; "GB"}},
  395.                             @{L='HDD 1 Letter';E={$HDID0}},
  396.                             @{L='HDD 1 Freespace';E={[math]::round($HDFS0 / 1GB);"GB"}},
  397.                             @{L='HDD 1 Size';E={[math]::round($HDSZ0 / 1GB);"GB"}},
  398.                             @{L='HDD 1 Provider Name';E={$HDPN0}},
  399.                             @{L='HDD 2 Letter';E={$HDID1}},
  400.                             @{L='HDD 2 Freespace';E={[math]::round($HDFS1 / 1GB);"GB"}},
  401.                             @{L='HDD 2 Size';E={[math]::round($HDSZ1 / 1GB);"GB"}},
  402.                             @{L='HDD 2 Provider Name';E={$HDPN1}},
  403.                             @{L='HDD 3 Letter';E={$HDID2}},
  404.                             @{L='HDD 3 Freespace';E={[math]::round($HDFS2 / 1GB);"GB"}},
  405.                             @{L='HDD 3 Size';E={[math]::round($HDSZ2 / 1GB);"GB"}},
  406.                             @{L='HDD 3 Provider Name';E={$HDPN2}},
  407.                             @{L='HDD 4 Letter';E={$HDID3}},
  408.                             @{L='HDD 4 Freespace';E={[math]::round($HDFS3 / 1GB);"GB"}},
  409.                             @{L='HDD 4 Size';E={[math]::round($HDSZ3 / 1GB);"GB"}},
  410.                             @{L='HDD 4 Provider Name';E={$HDPN3}},
  411.                             @{L='HDD 5 Letter';E={$HDID4}},
  412.                             @{L='HDD 5 Freespace';E={[math]::round($HDFS4 / 1GB);"GB"}},
  413.                             @{L='HDD 5 Size';E={[math]::round($HDSZ4 / 1GB);"GB"}},
  414.                             @{L='HDD 5 Provider Name';E={$HDPN4}},
  415.                             @{L='HDD 6 Letter';E={$HDID5}},
  416.                             @{L='HDD 6 Freespace';E={[math]::round($HDFS5 / 1GB);"GB"}},
  417.                             @{L='HDD 6 Size';E={[math]::round($HDSZ5 / 1GB);"GB"}},
  418.                             @{L='HDD 6 Provider Name';E={$HDPN5}},
  419.                             @{L='HDD 7 Letter';E={$HDID6}},
  420.                             @{L='HDD 7 Freespace';E={[math]::round($HDFS6 / 1GB);"GB"}},
  421.                             @{L='HDD 7 Size';E={[math]::round($HDSZ6 / 1GB);"GB"}},
  422.                             @{L='HDD 7 Provider Name';E={$HDPN6}},
  423.                             @{L='HDD 8 Letter';E={$HDID7}},
  424.                             @{L='HDD 8 Freespace';E={[math]::round($HDFS7 / 1GB);"GB"}},
  425.                             @{L='HDD 8 Size';E={[math]::round($HDSZ7 / 1GB);"GB"}},
  426.                             @{L='HDD 8 Provider Name';E={$HDPN7}},
  427.                             @{L='HDD 9 Letter';E={$HDID8}},
  428.                             @{L='HDD 9 Freespace';E={[math]::round($HDFS8 / 1GB);"GB"}},
  429.                             @{L='HDD 9 Size';E={[math]::round($HDSZ8 / 1GB);"GB"}},
  430.                             @{L='HDD 9 Provider Name';E={$HDPN8}},
  431.                             @{L='HDD 10 Letter';E={$HDID9}},
  432.                             @{L='HDD 10 Freespace';E={[math]::round($HDFS9 / 1GB);"GB"}},
  433.                             @{L='HDD 10 Size';E={[math]::round($HDSZ9 / 1GB);"GB"}},
  434.                             @{L='HDD 10 Provider Name';E={$HDPN9}},
  435.                             @{L='Error';E={"$E1V $E2V $E3V"}} | Export-Csv "$ReportPath\$HRD\$TRD\Hardware Report.csv" -Append -NoTypeInformation
  436.  
  437.                         write-host Hardware Report gathered for $server.... `n`r
  438.                         }
  439.                 }else{
  440.                     $EE = '"Server Name","CPU","Mem","HDD 1 Letter","HDD 1 Freespace","HDD 1 Size","HDD 1 Provider Name","HDD 2 Letter","HDD 2 Freespace","HDD 2 Size","HDD 2 Provider Name","HDD 3 Letter","HDD 3 Freespace","HDD 3 Size","HDD 3 Provider Name","HDD 4 Letter","HDD 4 Freespace","HDD 4 Size","HDD 4 Provider Name","HDD 5 Letter","HDD 5 Freespace","HDD 5 Size","HDD 5 Provider Name","HDD 6 Letter","HDD 6 Freespace","HDD 6 Size","HDD 6 Provider Name","HDD 7 Letter","HDD 7 Freespace","HDD 7 Size","HDD 7 Provider Name","HDD 8 Letter","HDD 8 Freespace","HDD 8 Size","HDD 8 Provider Name","HDD 9 Letter","HDD 9 Freespace","HDD 9 Size","HDD 9 Provider Name","HDD 10 Letter","HDD 10 Freespace","HDD 10 Size","HDD 10 Provider Name","Error"'
  441.                     $EE | select @{L='Server Name';E={$Server}},
  442.                             @{L='CPU';E={''}},
  443.                             @{L='Mem';E={''}},
  444.                             @{L='HDD 1 Letter';E={''}},
  445.                             @{L='HDD 1 Freespace';E={''}},
  446.                             @{L='HDD 1 Size';E={''}},
  447.                             @{L='HDD 1 Provider Name';E={''}},
  448.                             @{L='HDD 2 Letter';E={''}},
  449.                             @{L='HDD 2 Freespace';E={''}},
  450.                             @{L='HDD 2 Size';E={''}},
  451.                             @{L='HDD 2 Provider Name';E={''}},
  452.                             @{L='HDD 3 Letter';E={''}},
  453.                             @{L='HDD 3 Freespace';E={''}},
  454.                             @{L='HDD 3 Size';E={''}},
  455.                             @{L='HDD 3 Provider Name';E={''}},
  456.                             @{L='HDD 4 Letter';E={''}},
  457.                             @{L='HDD 4 Freespace';E={''}},
  458.                             @{L='HDD 4 Size';E={''}},
  459.                             @{L='HDD 4 Provider Name';E={''}},
  460.                             @{L='HDD 5 Letter';E={''}},
  461.                             @{L='HDD 5 Freespace';E={''}},
  462.                             @{L='HDD 5 Size';E={''}},
  463.                             @{L='HDD 5 Provider Name';E={''}},
  464.                             @{L='HDD 6 Letter';E={''}},
  465.                             @{L='HDD 6 Freespace';E={''}},
  466.                             @{L='HDD 6 Size';E={''}},
  467.                             @{L='HDD 6 Provider Name';E={''}},
  468.                             @{L='HDD 7 Letter';E={''}},
  469.                             @{L='HDD 7 Freespace';E={''}},
  470.                             @{L='HDD 7 Size';E={''}},
  471.                             @{L='HDD 7 Provider Name';E={''}},
  472.                             @{L='HDD 8 Letter';E={''}},
  473.                             @{L='HDD 8 Freespace';E={''}},
  474.                             @{L='HDD 8 Size';E={''}},
  475.                             @{L='HDD 8 Provider Name';E={''}},
  476.                             @{L='HDD 9 Letter';E={''}},
  477.                             @{L='HDD 9 Freespace';E={''}},
  478.                             @{L='HDD 9 Size';E={''}},
  479.                             @{L='HDD 9 Provider Name';E={''}},
  480.                             @{L='HDD 10 Letter';E={''}},
  481.                             @{L='HDD 10 Freespace';E={''}},
  482.                             @{L='HDD 10 Size';E={''}},
  483.                             @{L='HDD 10 Provider Name';E={''}},
  484.                             @{L='Error';E={"Failed to Connect"}} | Export-Csv "$ReportPath\$HRD\$TRD\Hardware Report.csv" -Append -NoTypeInformation
  485.                     write-host Failed to connect to $server.... -ForegroundColor Red -BackgroundColor Yellow `n`r
  486.                     }  
  487.         }
  488.         Write-Host `n`rHardware Report generation completed... -ForegroundColor Yellow `n`r
  489.     }
  490.     if($Hardware){
  491.         Get-InsHardwareReport
  492.         }
  493.     if($UpTime){
  494.         Get-UpTimeReport
  495.         }
  496.     if($QFE){
  497.         Get-QFEReport
  498.             }
  499.     if($ShutdownLog){
  500.         Get-ShutdownLogReport
  501.         }
  502.     if($Service){
  503.         Get-ServiceReport
  504.         }
  505.     if($QFEDaily){
  506.         Get-DailyQFEReport
  507.         }
  508.     if((!$Service)-and(!$ShutdownLog)-and(!$QFE)-and(!$UpTime)-and(!$Hardware)){
  509.         Get-UpTimeReport
  510.         Get-QFEReport
  511.         Get-ShutdownLogReport
  512.         Get-ServiceReport
  513.         Get-HardwareReport
  514.         }
  515.    
  516. }
Add Comment
Please, Sign In to add comment