mirror of
https://github.com/Icinga/icinga-powershell-framework.git
synced 2026-02-03 12:19:29 -05:00
70 lines
2 KiB
PowerShell
70 lines
2 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Securely reads data from enum providers and returns either a found value
|
|
from the provider or the given value, in case it was not found or does not
|
|
match our index
|
|
.DESCRIPTION
|
|
Securely reads data from enum providers and returns either a found value
|
|
from the provider or the given value, in case it was not found or does not
|
|
match our index
|
|
.FUNCTIONALITY
|
|
Securely reads data from enum providers and returns either a found value
|
|
from the provider or the given value, in case it was not found or does not
|
|
match our index
|
|
.EXAMPLE
|
|
PS> Get-IcingaProviderEnumData -Enum $ProviderEnums -Key 'DiskBusType' -Index 6;
|
|
PS> Fibre Channel
|
|
.PARAMETER Enum
|
|
The Icinga for Windows enum provider variable
|
|
.PARAMETER Key
|
|
The key of the index of our enum we want to access
|
|
.PARAMETER Index
|
|
They index key for your provided enum. Can either the a numeric value or string
|
|
.INPUTS
|
|
System.Object
|
|
.OUTPUTS
|
|
System.String
|
|
.LINK
|
|
https://github.com/Icinga/icinga-powershell-framework
|
|
#>
|
|
|
|
function Get-IcingaProviderEnumData()
|
|
{
|
|
param (
|
|
$Enum = $null,
|
|
$Key = $null,
|
|
$Index = ''
|
|
);
|
|
|
|
if ($null -eq $Enum -Or $null -eq $Key) {
|
|
return $Index;
|
|
}
|
|
|
|
if ($Enum -IsNot [hashtable]) {
|
|
return $Index;
|
|
}
|
|
|
|
if ($Enum.ContainsKey($Key) -eq $FALSE) {
|
|
return $Index;
|
|
}
|
|
|
|
[array]$Keys = $Enum[$Key].Keys;
|
|
|
|
if (Test-Numeric -number $Keys[0]) {
|
|
# Handle Providers with numeric indexes
|
|
if ((Test-Numeric -number $Index)) {
|
|
# Our index is numeric, return the value if it exists
|
|
if ($Enum[$Key].ContainsKey([int]$Index)) {
|
|
return $Enum[$Key][[int]$Index];
|
|
}
|
|
}
|
|
} else {
|
|
# Handle Providers with string indexes
|
|
if ($Enum[$Key].ContainsKey([string]$Index)) {
|
|
return $Enum[$Key][[string]$Index];
|
|
}
|
|
}
|
|
|
|
# If above rules do not apply, simply return the index as it is
|
|
return $Index;
|
|
}
|