icinga-powershell-framework/lib/wmi/Test-IcingaWindowsInformation.psm1
Lord Hepipud f9f095e16b Adds support to add/remove/test Wmi permissions
You can now use 'Add-IcingaWmiPermissions' to add permissions for a
specific user and namespace and remove them with
'Remove-IcingaWmiPermissions'
2020-11-18 14:48:31 +01:00

73 lines
2.9 KiB
PowerShell

<#
.SYNOPSIS
Tests if a specific WMI class including the Namespace can be accessed and returns status codes for possible errors/exceptions that might occur.
Returns binary operator values for easier comparison. In case no errors occurred it will return $TestIcingaWindowsInfoEnums.TestIcingaWindowsInfo.Ok
.DESCRIPTION
Tests if a specific WMI class including the Namespace can be accessed and returns status codes for possible errors/exceptions that might occur.
Returns binary operator values for easier comparison. In case no errors occurred it will return $TestIcingaWindowsInfoEnums.TestIcingaWindowsInfo.Ok
.ROLE
### WMI Permissions
No special permissions required as this Cmdlet will validate all input data and reports back the result.
.OUTPUTS
Name Value
---- -----
Ok 1
EmptyClass 2
PermissionError 4
ObjectNotFound 8
InvalidNameSpace 16
UnhandledException 32
NotSpecified 64
CimNotInstalled 128
.LINK
https://github.com/Icinga/icinga-powershell-framework
#>
function Test-IcingaWindowsInformation()
{
param (
[string]$ClassName,
[string]$NameSpace = 'Root\Cimv2'
);
if ([string]::IsNullOrEmpty($ClassName)) {
return $TestIcingaWindowsInfoEnums.TestIcingaWindowsInfo.EmptyClass;
}
# Check with Get-CimClass for the specified WMI class and in the specified namespace default root\cimv2
if ((Test-IcingaFunction 'Get-CimInstance') -eq $FALSE ) {
return $TestIcingaWindowsInfoEnums.TestIcingaWindowsInfo.CimNotInstalled;
}
# We clear all previous errors so that we can catch the last error message from this try/catch in the plugins.
$Error.Clear();
try {
Get-CimInstance -ClassName $ClassName -Namespace $NameSpace -ErrorAction Stop | Out-Null;
} catch {
Write-IcingaConsoleDebug `
-Message "WMIClass: '{0}' : Namespace : {1} {2} {3}" `
-Objects $ClassName, $NameSpace, (New-IcingaNewLine), $_.Exception.Message;
if ($_.CategoryInfo.Category -like 'MetadataError') {
return $TestIcingaWindowsInfoEnums.TestIcingaWindowsInfo.InvalidNameSpace;
}
if ($_.CategoryInfo.Category -like 'ObjectNotFound') {
return $TestIcingaWindowsInfoEnums.TestIcingaWindowsInfo.ObjectNotFound;
}
if ($_.CategoryInfo.Category -like 'NotSpecified') {
return $TestIcingaWindowsInfoEnums.TestIcingaWindowsInfo.NotSpecified;
}
if ($_.CategoryInfo.Category -like 'PermissionDenied') {
return $TestIcingaWindowsInfoEnums.TestIcingaWindowsInfo.PermissionError;
}
return $TestIcingaWindowsInfoEnums.TestIcingaWindowsInfo.UnhandledException;
}
return $TestIcingaWindowsInfoEnums.TestIcingaWindowsInfo.Ok;
}