Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [CmdletBinding()]Param(
- [Parameter( Position = 0,
- Mandatory = $false,
- ValueFromPipeline = $true,
- ValueFromPipelineByPropertyName = $true
- )]
- [String[]]$ComputerName = 'localhost'
- )
- begin{
- $remoteQueue = New-Object System.Collections.ArrayList
- $wmiQueue = New-Object System.Collections.ArrayList
- foreach($computer in $ComputerName){
- try{
- Test-WSMan -ComputerName $computer -ErrorAction STOP | Out-Null
- }
- catch{
- Write-Verbose -Message ('Using WMI: {0}' -f $computer)
- [void]$wmiQueue.Add($computer)
- continue
- }
- Write-Verbose -Message ('Using Remoting: {0}' -f $computer)
- [void]$remoteQueue.Add($computer)
- }
- }
- process{
- if($remoteQueue.count -gt 0){
- $localWMI = {
- $wmiParam = @{
- ComputerName = 'localhost'
- ErrorAction = 'STOP'
- }
- try{
- $wmiSystem = Get-WmiObject -Class Win32_ComputerSystem @wmiParam
- $wmiMemory = Get-WmiObject -Class Win32_PhysicalMemory @wmiParam
- $wmiProcessor = Get-WmiObject -Class Win32_Processor @wmiParam
- $wmiSysInfo = Get-WmiObject -Class MS_SystemInformation -Namespace root\wmi @wmiParam
- $wmiLDisk = Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID='C:'" @wmiParam
- $wmiEnclosure = Get-WmiObject -Class Win32_SystemEnclosure @wmiParam
- $wmiNetwork = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE @wmiParam
- }
- catch{
- Write-Warning -Message ('Unable to collect WMI data for {0}: {1}' -f $env:ComputerName,$_.exception.message)
- return
- }
- $wmiData = New-Object -TypeName PSObject -Property @{
- ComputerName = $wmiSystem.Name
- Manufacturer = $wmiSystem.Manufacturer
- Model = $wmiSystem.Model
- ProductNumber = $wmiSysInfo.SystemSKU
- SerialNumber = $wmiEnclosure.SerialNumber
- Processor = $wmiProcessor | foreach { $_.name }
- Memory = [Math]::Round((($wmiMemory | Measure-Object -Property Capacity -Sum).sum/1gb),2)
- HDD = [Math]::Round((($wmiLDisk | Measure-Object -Property Size -Sum).sum/1gb),2)
- IPAddresses = $wmiNetwork | foreach { $_.IPAddress }
- }
- Write-Output $wmiData
- }
- Invoke-Command -ComputerName $remoteQueue -ScriptBlock $localWMI | Select-Object ComputerName,Manufacturer,Model,ProductNumber,SerialNumber,Processor,Memory,HDD,IPAddresses
- }
- foreach ($computer in $wmiQueue){
- $wmiParam = @{
- ComputerName = $computer
- ErrorAction = 'STOP'
- }
- try{
- $wmiSystem = Get-WmiObject -Class Win32_ComputerSystem @wmiParam
- $wmiMemory = Get-WmiObject -Class Win32_PhysicalMemory @wmiParam
- $wmiProcessor = Get-WmiObject -Class Win32_Processor @wmiParam
- $wmiSysInfo = Get-WmiObject -Class MS_SystemInformation -Namespace root\wmi @wmiParam
- $wmiLDisk = Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID='C:'" @wmiParam
- $wmiEnclosure = Get-WmiObject -Class Win32_SystemEnclosure @wmiParam
- $wmiNetwork = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE @wmiParam
- }
- catch{
- Write-Warning -Message ('Unable to collect WMI data for {0}: {1}' -f $computer,$_.exception.message)
- continue
- }
- $wmiData = New-Object -TypeName PSObject -Property @{
- ComputerName = $wmiSystem.Name
- Manufacturer = $wmiSystem.Manufacturer
- Model = $wmiSystem.Model
- ProductNumber = $wmiSysInfo.SystemSKU
- SerialNumber = $wmiEnclosure.SerialNumber
- Processor = $wmiProcessor | foreach { $_.name }
- Memory = [Math]::Round((($wmiMemory | Measure-Object -Property Capacity -Sum).sum/1gb),2)
- HDD = [Math]::Round((($wmiLDisk | Measure-Object -Property Size -Sum).sum/1gb),2)
- IPAddresses = $wmiNetwork | foreach { $_.IPAddress }
- }
- Write-Output $wmiData | Select-Object ComputerName,Manufacturer,Model,ProductNumber,SerialNumber,Processor,Memory,HDD,IPAddresses
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment