A Server inventory script that generates a HTML Output
The current script contains only the following items.
- Shares
- Administrators
- Network info
- CPU Info
More comming soon…
############################################################################################## # PowerShell Script. ############################################################################################## # Name : ServerInventory.ps1 # Version : 1.0.0 # Author : Wessel van Sandwijk # Usage : # ServerInventory.ps1 -Path "c:\Scripts" -Servers <Server1>,<Server2> -logfile <Logname>.log ############################################################################################## # # Lists all enabled network adapters and their settings for defined list of machines. # Lists all Administators of defined list of machines # Lists all Shares and there Descriptions for defined list of machines # Outputs all to CSV, HTML and Combined HTML file # Prepared by Wessel van Sandwijk. September 2013. # ############################################################################################### # Versions : # 1.0.0 25-Sep-2013 Initial Version ############################################################################################### Param( [string]$path, [array]$servers, [string]$Logfile, [string]$inputfile ) if (!$servers){ write-host "Provide Servers to Check (-servers <server1>,<server2>,...)" logwrite "Provided Manual Server : $Servers" } #if (!$servers){ Write-host "Servers is empty", Exit} #if (!$path) { Write-Host "Path is empty", exit} ############################################ # HTML Contents (Head and Body) ############################################ $htmlhead = "<style>" $htmlhead = $htmlhead + "BODY{background-color:green;}" $htmlhead = $htmlhead + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}" $htmlhead = $htmlhead + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}" $htmlhead = $htmlhead + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:palegoldenrod}" $htmlhead = $htmlhead + "</style>" $body = @" <p><a href="http://www.useful-it.nl" target=_blank> <img src="http://www.useful-it.nl/wp-content/uploads/2013/08/cropped-Useful-IT-trans2.png" alt="Useful-it.nl Website" title="Visit site : http://www.useful-it.nl" width=200 style="float: right;"></a></p> <br> "@ ############################################ # Functions ############################################ Function LogWrite { param([string]$logstring) Add-Content $path\$Logfile -Value $logstring } function Get-Networking { $totalNetwork = @() foreach ($comp in $servers){ $NIC = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName $comp -Filter "IPEnabled='TRUE'" | select DNSHostName, Description, MACAddress, DHCPenabled, IPAddress, IPSubnet, DefaultIPGateway, DNSServerSearchOrder $obj=New-Object PSObject $obj | Add-Member -MemberType NoteProperty -Name "ServerName" -Value $comp $obj | Add-Member -MemberType NoteProperty -Name "Description" -Value $NIC.Description $obj | Add-Member -MemberType NoteProperty -Name "MACAddress" -Value $NIC.MACAddress $obj | Add-Member -MemberType NoteProperty -Name "DHCPenabled" -Value $NIC.DHCPenabled $obj | Add-Member -MemberType NoteProperty -Name "IPAddress" -Value ([string]::Join(', ',$NIC.IPAddress)) $obj | Add-Member -MemberType NoteProperty -Name "IPSubnet" -Value ([string]$NIC.IPSubnet) $obj | Add-Member -MemberType NoteProperty -Name "DefaultIPGateway" -Value ([string]$NIC.DefaultIPGateway) $obj | Add-Member -MemberType NoteProperty -Name "DNSServerSearchOrder" -Value ([string]::Join(', ',$NIC.DNSServerSearchOrder)) $totalNetwork += $obj } $totalNetwork Logwrite "Get-Network Run" } function Get-Shares { $totalShares = @() foreach ($comp in $servers){ $objshares = Get-WmiObject -Class Win32_Share -ComputerName $comp foreach ($objshare in $objshares){ $obj=$null $obj=New-Object PSObject $obj | Add-Member -MemberType NoteProperty -Name "ServerName" -Value $comp $obj | Add-Member -MemberType NoteProperty -Name "ShareName" -Value $objshare.Name $obj | Add-Member -MemberType NoteProperty -Name "SharePath" -Value $objshare.Path $obj | Add-Member -MemberType NoteProperty -Name "Description" -Value $objshare.Description $totalShares += $obj } } $totalShares logwrite "Get-Shares Run" } Function Get-CPUInfo { $cpuinfo = @() Foreach ($Comp in $servers) { $objcpu = Get-WmiObject -class "Win32_Processor" -namespace "root/CIMV2" -computername $Comp foreach ($objItem in $objcpu) { $obj=New-Object PSObject $obj | Add-Member -MemberType NoteProperty -Name "Computer" -Value $objItem.PSComputerName $obj | Add-Member -MemberType NoteProperty -Name "CPU ID" -Value $objItem.DeviceID $obj | Add-Member -MemberType NoteProperty -Name "CPU Model" -Value $objItem.Name $obj | Add-Member -MemberType NoteProperty -Name "CPU Cores" -Value $objItem.NumberOfCores $obj | Add-Member -MemberType NoteProperty -Name "CPU Max Speed" -Value $objItem.MaxClockSpeed $obj | Add-Member -MemberType NoteProperty -Name "CPU Status" -Value $objItem.Status $CPUInfo += $obj } } $CPUInfo Logwrite "Get-CPUInfo run" } function Get-Admins { Foreach ($Comp in $Servers){ $TotalAdmins = @() $Online = Test-Connection -ComputerName $Comp -Quiet if ($Online -eq "True"){ $GroupName = Get-WmiObject win32_group -ComputerName $Comp | ? {$_.SID -eq 'S-1-5-32-544'} | select name -ExpandProperty name $LocalGroup =[ADSI]"WinNT://$Comp/$GroupName" $GroupMembers = @($LocalGroup.psbase.Invoke("Members")) $Members = $GroupMembers | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)} foreach ($Member in $Members){ $obj = New-Object System.Object $obj | Add-Member -MemberType NoteProperty -Name "Computer" -Value $Comp $obj | Add-Member -MemberType NoteProperty -Name "AdminGroup" -Value $GroupName $obj | Add-Member -MemberType NoteProperty -Name "AdminGroupMembers" -Value $Member $totalAdmins +=$obj } } $TotalAdmins Logwrite "Get-Admins run" } } ############################################ # Script Start ############################################ $Network = Get-Networking $Shares = Get-Shares $Admins = Get-Admins $Cpu = Get-CPUInfo ############################################ #Export to CSV ############################################ $Shares | Export-Csv -NoTypeInformation -Encoding 'Unicode' -Path "$path\Shares.csv" $Network | Export-Csv -NoTypeInformation -Encoding 'Unicode' -Path "$path\Network.csv" $Admins | Export-Csv -NoTypeInformation -Encoding 'Unicode' -Path "$path\Admins.csv" $CPU | Export-Csv -NoTypeInformation -Encoding 'Unicode' -Path "$path\CpuInfo.csv" logwrite "Export to CSV Run" ############################################ #Export to HTML (individual) ############################################ $Network | ConvertTo-HTML -Head $htmlhead -Body "$body <center><h1>Networking</h1></center>" -title "Networking" | Out-File $path\Networking.htm $Shares | ConvertTo-HTML -Head $htmlhead -Body "$body <h1>Shares</h1>" -title "Shares" | Out-File $path\Shares.htm $Admins | ConvertTo-HTML -Head $htmlhead -Body "$body <h1>Admins</h1>" -title "Admins" | Out-File $path\Admins.htm $CPU | ConvertTo-HTML -Head $htmlhead -Body "$body <h1>CPUInfo</h1>" -title "CPU Info" | Out-File $path\CPUInfo.htm Logwrite "Export to HTML (Individual)" ############################################ #Export to HTML (Combined) ############################################ $null | ConvertTo-Html -Head $htmlhead -body $body -title "Servers Overview" | Out-File $path\Combined.htm $Network | ConvertTo-HTML -Body "<center><h1>Networking</h1></center>" | Out-File -Append $path\Combined.htm $Shares | ConvertTo-HTML -Body "<h1>Shares</h1>" | Out-File -Append $path\Combined.htm $Admins | ConvertTo-HTML -Body "<h1>Admins</h1>" | Out-File -Append $path\Combined.htm $CPU | ConvertTo-HTML -Body "<h1>CPUInfo</h1>" | Out-File -Append $path\Combined.htm LogWrite "Export to HTML (Combined Run)"
Copy the contents into a empty file or click the dowload button : [wpdm_file id=2]
More Stories
Running PowerShell Hyper-V and VMWare Modules
Extend the Evaluation Period on Windows Server
Now using Ansible, Chocolatey, Powershell