Get-ScsiDisks: Combine PhysicalDisk and LogicalDisk objects
3667
post-template-default,single,single-post,postid-3667,single-format-standard,cookies-not-set,ajax_fade,page_not_loaded,,side_area_uncovered_from_content,qode-theme-ver-15.0,qode-theme-bridge,wpb-js-composer js-comp-ver-5.4.7,vc_responsive
 

Get-ScsiDisks: Combine PhysicalDisk and LogicalDisk objects

Get-ScsiDisks: Combine PhysicalDisk and LogicalDisk objects

Hi there, following function Get-ScsiDisks retrieves disk details for VMWare Guests or any computer with corresponding SCSI disk details like SCSI ID and SCSI Bus. The function concatenates objects consisting of Win32_DiskDrive, Win32_LogicalDisk and Win32_DiskDriveToDiskPartition using WMI. For WinRM you can use Invoke-Command and inject the script.

Function Get-ScsiDisks
{
<#
.SYNOPSIS
    Retrieves disk details for VMWare Guests with corresponding SCSI disk details like SCSI ID
    and SCSI Bus.
 
.DESCRIPTION
    Retrieves a concatenated object consisting of Win32_DiskDrive, Win32_LogicalDisk and 
    Win32_DiskDriveToDiskPartition using WMI. For WinRM you can use Invoke-Command and inject the script.
 
.PARAMETER ComputerName
    A single Computer or an array of computer names. The default is localhost ($env:COMPUTERNAME).
 
.PARAMETER Credentials
    Commit Credentials for a different domain.
 
.PARAMETER Verbose
    Run in Verbose Mode.
 
.EXAMPLE
    PS C:> Get-ScsiDisks
	
    ComputerName    Disk               DriveLetter VolumeName  Size FreeSpace DiskModel           
    ------------    ----               ----------- ----------  ---- --------- ---------           
    SERVER          \.PHYSICALDRIVE1 D:          Data         767       767 VMware Virtual di...
    SERVER          \.PHYSICALDRIVE0 C:          OS            59        39 VMware Virtual di...                    
 
.EXAMPLE
	PS C:> Get-ScsiDisks | Out-GridView

.EXAMPLE
	PS C:> Get-ScsiDisks | ft -a

.EXAMPLE
	PS C:> Get-ScsiDisks -ComputerName (gc 'C:VMs.txt') -Credentials Get-Credential
 
.LINK
    
Home
.NOTES Author: Sebastian Gräf Email: ps@graef.io Date: September 12, 2017 PSVer: 3.0/4.0/5.0 #> [Cmdletbinding()] Param ( [Parameter(ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true)] $ComputerName = $Env:COMPUTERNAME, [Parameter(ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true)] [ValidateNotNull()] [System.Management.Automation.PSCredential][System.Management.Automation.Credential()] $Credentials = [System.Management.Automation.PSCredential]::Empty ) Begin { Write-Verbose " [$($MyInvocation.InvocationName)] :: Start Process" $result=@() $ProgressCounter = 0 } Process { foreach ($Computer in $ComputerName) { $ProgressCounter++ Write-Progress -activity "Running on $Computer" -status "Please wait ..." -PercentComplete (($ProgressCounter / $ComputerName.length) * 100) if (Test-Connection $Computer -Count 1 -Quiet) { Write-Verbose " [$($MyInvocation.InvocationName)] :: Processing $Computer" try { Get-WmiObject -Class Win32_DiskDrive -ComputerName $Computer -Credential $Credentials | % { $disk = $_ $partitions = "ASSOCIATORS OF " + "{Win32_DiskDrive.DeviceID='$($disk.DeviceID)'} " + "WHERE AssocClass = Win32_DiskDriveToDiskPartition" Get-WmiObject -Query $partitions -ComputerName $Computer -Credential $Credentials | % { $partition = $_ $drives = "ASSOCIATORS OF " + "{Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} " + "WHERE AssocClass = Win32_LogicalDiskToPartition" Get-WmiObject -Query $drives -ComputerName $Computer -Credential $Credentials | % { $obj = New-Object -Type PSCustomObject -Property @{ ComputerName = $Computer Disk = $disk.DeviceID DiskSize = [math]::Truncate($disk.Size / 1GB); DiskModel = $disk.Model Partition = $partition.Name DriveLetter = $_.DeviceID VolumeName = $_.VolumeName Size = [math]::Truncate($_.Size / 1GB) FreeSpace = [math]::Truncate($_.FreeSpace / 1GB) SCSIBus = $disk.SCSIBus SCSITargetId = $disk.SCSITargetId } $result += $obj } } } } catch { Write-Verbose " Host [$Computer] Failed with Error: $($Error[0])" } } else { Write-Verbose " Host [$Computer] Failed Connectivity Test" } } $result | select ComputerName,Disk,DriveLetter,VolumeName,Size,FreeSpace,DiskModel,Partition,SCSIBus,SCSITargetId } End { Write-Progress -activity "Running on $Computer" -Status "Completed." -Completed Write-Verbose " [$($MyInvocation.InvocationName)] :: End Process" } }

Output:

No Comments

Sorry, the comment form is closed at this time.

%d bloggers like this: