From 2601f9c7638543454dea1e6c73ce5bf5aa5a49c8 Mon Sep 17 00:00:00 2001 From: Crited Date: Tue, 16 Jul 2019 14:47:21 +0200 Subject: [PATCH] Added disk-module; extended enums to fit disk-modules --- lib/provider/disks.psm1 | 220 ++++++++++++++++++++++++++++++++++++++++ lib/provider/enums.psm1 | 19 +++- 2 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 lib/provider/disks.psm1 diff --git a/lib/provider/disks.psm1 b/lib/provider/disks.psm1 new file mode 100644 index 0000000..8035065 --- /dev/null +++ b/lib/provider/disks.psm1 @@ -0,0 +1,220 @@ +function Show-IcingaDiskFullData { + + $DisksInformations = Get-CimInstance Win32_DiskDrive; + + [hashtable]$PhysicalDiskData = @{}; + + foreach ($disk_properties in $DisksInformations) { + $disk_datails = @{}; + foreach($disk in $disk_properties.CimInstanceProperties) { + $disk_datails.Add($disk.Name, $disk.Value); + } + $disk_datails.Add('DriveReference', @()); + $PhysicalDiskData.Add($disk_datails.DeviceID, $disk_datails); + } + + $DiskPartitionInfo = Get-WmiObject Win32_DiskDriveToDiskPartition; + + [hashtable]$MapDiskPartitionToLogicalDisk = @{}; + + foreach ($item in $DiskPartitionInfo) { + [string]$diskPartition = $item.Dependent.SubString( + $item.Dependent.LastIndexOf('=') + 1, + $item.Dependent.Length - $item.Dependent.LastIndexOf('=') - 1 + ); + $diskPartition = $diskPartition.Replace('"', ''); + + [string]$physicalDrive = $item.Antecedent.SubString( + $item.Antecedent.LastIndexOf('\') + 1, + $item.Antecedent.Length - $item.Antecedent.LastIndexOf('\') - 1 + ) + $physicalDrive = $physicalDrive.Replace('"', ''); + + $MapDiskPartitionToLogicalDisk.Add($diskPartition, $physicalDrive); + } + + $LogicalDiskInfo = Get-WmiObject Win32_LogicalDiskToPartition; + + foreach ($item in $LogicalDiskInfo) { + [string]$driveLetter = $item.Dependent.SubString( + $item.Dependent.LastIndexOf('=') + 1, + $item.Dependent.Length - $item.Dependent.LastIndexOf('=') - 1 + ); + $driveLetter = $driveLetter.Replace('"', ''); + + [string]$diskPartition = $item.Antecedent.SubString( + $item.Antecedent.LastIndexOf('=') + 1, + $item.Antecedent.Length - $item.Antecedent.LastIndexOf('=') - 1 + ) + $diskPartition = $diskPartition.Replace('"', ''); + + if ($MapDiskPartitionToLogicalDisk.ContainsKey($diskPartition)) { + foreach ($disk in $PhysicalDiskData.Keys) { + [string]$DiskId = $disk.SubString( + $disk.LastIndexOf('\') + 1, + $disk.Length - $disk.LastIndexOf('\') - 1 + ); + + if ($DiskId.ToLower() -eq $MapDiskPartitionToLogicalDisk[$diskPartition].ToLower()) { + $PhysicalDiskData[$disk]['DriveReference'] += $driveLetter; + } + } + } + } + + return $PhysicalDiskData; + +} + +function Show-IcingaDiskPhysical() +{ + $DisksInformations = Get-CimInstance Win32_DiskDrive; + + [hashtable]$PhysicalDiskData = @{}; + + foreach ($disk_properties in $DisksInformations) { + $disk_datails = @{}; + foreach($disk in $disk_properties.CimInstanceProperties) { + $disk_datails.Add($disk.Name, $disk.Value); + } + $disk_datails.Add('DriveReference', @()); + $PhysicalDiskData.Add($disk_datails.DeviceID, $disk_datails); + } + + return $PhysicalDiskData; +} + +function Get-IcingaDiskInformation() +{ + param( + # The value to fetch from Win32_DiskDrive + [string]$Parameter + ); + $DiskInformation = Get-CimInstance Win32_DiskDrive; + [hashtable]$DiskData = @{}; + + foreach ($id in $DiskInformation.DeviceID) { + $id = $id.trimstart(".\PHYSICALDRVE"); + $DiskData.Add($id.trim(), $DiskInformation.$Parameter); + } + + return $DiskData; +} +function Get-IcingaDiskPartitions() +{ + $LogicalDiskInfo = Get-WmiObject Win32_LogicalDiskToPartition; + [hashtable]$PartitionDiskByDriveLetter = @{}; + + foreach ($item in $LogicalDiskInfo) { + [string]$driveLetter = $item.Dependent.SubString( + $item.Dependent.LastIndexOf('=') + 1, + $item.Dependent.Length - $item.Dependent.LastIndexOf('=') - 1 + ); + $driveLetter = $driveLetter.Replace('"', '').trim(':'); + + [string]$diskPartition = $item.Antecedent.SubString( + $item.Antecedent.LastIndexOf('=') + 1, + $item.Antecedent.Length - $item.Antecedent.LastIndexOf('=') - 1 + ) + $diskPartition = $diskPartition.Replace('"', ''); + $diskDisk,$diskPartition = $diskPartition.split(','); + + $diskPartition = $diskPartition.trim("Partition #"); + $diskDisk = $diskDisk.trim("Disk #"); + $diskPartitionSize = Get-Partition -DriveLetter $driveLetter; + $PartitionDiskByDriveLetter.Add( + $driveLetter, + @{ + 'Disk' = $diskDisk; + 'Partition' = $diskPartition; + 'Size' = $diskPartitionSize.Size; + } + ); + } + return $PartitionDiskByDriveLetter; +} + +#Code-Snippen that still exists for LordHepipud's amusement +function Get-IcingaDiskPartitionSize() +{ + param([switch]$sorted); + + [hashtable]$PartitionSizeByDriveLetter = @{}; + + # Should be dependent on the driveLetters returned in: "Show-IcingaDiskFullData" + for ($test = 0; $test -lt 26; $test++) + { + $DiskDriveLetter = ([char](65 + $test)) + $PartitionSize = (Get-Partition -DriveLetter $DiskDriveLetter -ErrorAction 'silentlycontinue').Size; + if ($null -eq $PartitionSize) + { + $PartitionSize = "0"; + } + $PartitionSizeByDriveLetter.Add("$DiskDriveLetter", $PartitionSize); + } + + $output = $PartitionSizeByDriveLetter; + + if ($sorted) { + $output = $PartitionSizeByDriveLetter.GetEnumerator() | Sort-Object name; + } + + return @{'value' = $output; 'name' = 'Size'}; +} +function Get-IcingaDiskCapabilities +{ + $DiskInformation = Get-CimInstance Win32_DiskDrive; + [hashtable]$DiskCapabilities = @{}; + + foreach ($id in $DiskInformation.Capabilities) { + $DiskCapabilities.Add([int]$id, $ProviderEnums.Capabilities.([int]$id)); + } + return @{'value' = $DiskCapabilities; 'name' = 'Capabilities'}; + +} +function Get-IcingaDiskSize +{ + $DiskSize = Get-IcingaDiskInformation -Parameter Size; + + return @{'value' = $DiskSize; 'name' = 'Size'}; +} + +function Get-IcingaDiskCaption +{ + $DiskCaption = Get-IcingaDiskInformation -Parameter Caption; + + return @{'value' = $DiskCaption; 'name' = 'Caption'}; +} + +function Get-IcingaDiskModel +{ + $DiskModel = Get-IcingaDiskInformation -Parameter Model; + return @{'value' = $DiskModel; 'name' = 'Model'}; +} + +function Get-IcingaDisk { + + $DiskInformation = Get-CimInstance Win32_DiskDrive; + $diskPartitionInformation = Get-IcingaDiskPartitions; + [hashtable]$DiskData = @{}; + + foreach ($id in $DiskInformation.DeviceID) { + [int]$id = $id.trimstart(".\PHYSICALDRVE"); + + $DiskData.Add( + $id, @{ + 'metadata' = @{ + 'Size' = $DiskInformation.Size; + 'Model' = $DiskInformation.Model; + 'Name' = $DiskInformation.Name.trim('.\'); + 'Manufacturer' = $DiskInformation.Manufacturer; + 'Cylinder' = $DiskInformation.TotalCylinders; + 'Sectors' = $DiskInformation.TotalSectors + }; + 'partitions' = $diskPartitionInformation + } + ); + } + + return $DiskData; +} \ No newline at end of file diff --git a/lib/provider/enums.psm1 b/lib/provider/enums.psm1 index a5425fd..b175397 100644 --- a/lib/provider/enums.psm1 +++ b/lib/provider/enums.psm1 @@ -65,8 +65,25 @@ 63 = 'Reserved for system vendor' } +[hashtable]$Capabilities = @{ + 0 = 'Unknown'; + 1 = 'Other'; + 2 = 'Sequential Access'; + 3 = 'Random Access'; + 4 = 'Supports Writing'; + 5 = 'Encryption'; + 6 = 'Compression'; + 7 = 'Supports Removeable Media'; + 8 = 'Manual Cleaning'; + 9 = 'Automatic Cleaning'; + 10 = 'SMART Notification'; + 11 = 'Supports Dual Sided Media'; + 12 = 'Predismount Eject Not Required' +} + [hashtable]$ProviderEnums = @{ - BiosCharacteristics = $BiosCharacteristics + BiosCharacteristics = $BiosCharacteristics; + Capabilities = $Capabilities; } Export-ModuleMember -Variable @('ProviderEnums'); \ No newline at end of file