Added disk-module; extended enums to fit disk-modules

This commit is contained in:
Crited 2019-07-16 14:47:21 +02:00
parent a46c09869d
commit 2601f9c763
2 changed files with 238 additions and 1 deletions

220
lib/provider/disks.psm1 Normal file
View file

@ -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;
}

View file

@ -65,8 +65,25 @@
63 = 'Reserved for system vendor' 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 = @{ [hashtable]$ProviderEnums = @{
BiosCharacteristics = $BiosCharacteristics BiosCharacteristics = $BiosCharacteristics;
Capabilities = $Capabilities;
} }
Export-ModuleMember -Variable @('ProviderEnums'); Export-ModuleMember -Variable @('ProviderEnums');