Public/Invoke-ReArmLicense.ps1

function Invoke-ReArmLicense {
  [CmdletBinding(DefaultParameterSetName='Rearm')]
  [Alias('ReArm')]
  param(
    [Parameter()]
    [ValidateScript({
          if (-not (Test-Connection -Quiet -Count 1 -ComputerName $_)) {
            throw '{0} - Computer Unavailable' -f $_
          }
          return $true
    })]
    [string[]]$ComputerName = $env:COMPUTERNAME,
    [Parameter(ParameterSetName='Grace')]
    [switch]$GracePeriod,
    [switch]$Restart,
    [switch]$Force
  )
  foreach ($Computer in $ComputerName) {
    $Cim = New-CimSession -ComputerName $Computer
    $SLP = Get-CimInstance -ClassName 'SoftwareLicensingProduct' -CimSession $Cim
    try {
      $GraceLeft = [DateTime]::Now.Add([TimeSpan]::FromMinutes($SLP.GracePeriodRemaining))
    }
    catch {
      Write-Warning -Message 'Grace peroid has ended, evaluation has expired! Using current date.'
      $GraceLeft = Get-Date
    }
    switch ($PSCmdlet.ParameterSetName) {
      'Grace' {
        [pscustomobject] @{
          ComputerName = $Computer
          Date = $GraceLeft.ToShortDateString()
          RemainingReArmCount = $SLP.RemainingSkuReArmCount
        }
        break
      }
      default {
        if (($GraceLeft.AddDays(-7) -le (Get-Date)) -or $Force) {
          $SLS = Get-CimInstance -ClassName 'SoftwareLicensingService' -CimSession $Cim
          if ($SLS.RemainingWindowsReArmCount -gt 0) {
            $SLS | Invoke-CimMethod -MethodName 'ReArmWindows'
            if ($Restart) { Restart-Computer -ComputerName $Computer -Force }
          }
          else {
            throw '{0} - Windows ReArm Count: 0' -f $Computer
          }
        }
        else {
          Write-Output ('{0}: Evaluation License expires: {1}{2}Use -Force to ReArm now' -f $Computer,$GraceLeft.ToShortDateString(),("`n"))
        }
        break
      }
    }
  }
}