Private/Get-ExpiryInformation.ps1
|
function Get-ExpiryInformation { [OutputType([PSCustomObject])] [CmdletBinding()] param ( [Microsoft.Management.Infrastructure.CimSession]$CimSession, [CimInstance]$Product ) if ($null -eq $Product) { $Product = Get-WindowsLicensingProduct -CimSession $CimSession } $status = [LicenseStatusCode]($Product.LicenseStatus) $graceRemaining = $Product.GracePeriodRemaining $expirationInfo = switch ($Product.LicenseStatus) { 0 { [LicenseStatusCode]::Unlicensed.ToString() } 1 { if ($null -eq $graceRemaining -or $graceRemaining -eq 0) { 'The machine is permanently activated.' } else { $endDate = (Get-Date).AddMinutes($graceRemaining) if ($Product.Description -imatch 'TIMEBASED_') { "Timebased activation will expire $endDate" } elseif ($Product.Description -imatch 'VIRTUAL_MACHINE_ACTIVATION') { "Automatic VM activation will expire $endDate" } else { "Volume activation will expire $endDate" } } } 2 { "Initial grace period ends $((Get-Date).AddMinutes($graceRemaining))" } 3 { "Additional grace period ends $((Get-Date).AddMinutes($graceRemaining))" } 4 { "Non-genuine grace period ends $((Get-Date).AddMinutes($graceRemaining))" } 5 { 'Windows is in Notification mode' } 6 { "Extended grace period ends $((Get-Date).AddMinutes($graceRemaining))" } Default { throw 'Unexpected license status' } } $result = [PSCustomObject]@{ Name = $Product.Name ActivationId = $Product.ID ApplicationId = $Product.ApplicationID LicenseStatus = $status ExpirationInfo = $expirationInfo } return $result } |