Home > Windows にまつわる e.t.c.

PowerShell で Windows がアクティベーションされているか否かを確認する


Windows のアクティベーション状態を確認するには、「slmgr /dli」や「slmgr /dlv」を使いますが、確認結果は GUI 表示になります。

 

ローカル環境の確認であれば GUI でも良いのですが、リモート環境の状態を確認したい時は PowerShell で Invoke-Command とかしたいですよね。

 

slmgr は .vbs なので、cscript を明示的に指定すると結果がテキストになります。
こいつをラッピングして、アクティベーション状態を $true / $false で返す関数にしてみました。

############################################################
# アクティベーション確認
############################################################
function IsActivation(){
    # ライセンス状態
    $Status = cscript $env:WinDir\System32\slmgr.vbs /dli

    # 言語環境確認
    $NowLanguage = [System.Globalization.CultureInfo]::CurrentCulture.Name
    
    # 日本語環境
    if( $NowLanguage -eq "ja-JP" ){
        [array]$LicenseStatus = $Status | Select-String "ライセンスの状態"
        if( $LicenseStatus.Length -eq 1 ){
            if( $LicenseStatus[0] -match "ライセンスされています" ){
                # ライセンス済み
                return $true
            }
            else{
                # ライセンスされていない
                return $false
            }
        }
        else{
            # ステータスがおかしい
            return $false
        }
    }
    # 日本語環境以外
    else{
        [array]$LicenseStatus = $Status | Select-String "License Status"
        if( $LicenseStatus.Length -eq 1 ){
            if( $LicenseStatus[0] -match "Licensed" ){
                # ライセンス済み
                return $true
            }
            else{
                # ライセンスされていない
                return $false
            }
        }
        else{
            # ステータスがおかしい
            return $false
        }
    }
}

 

こいつをこんな感じで Invoke-Command すれば、リモートサーバーのアクティベーション状態が確認できますね。 

Invoke-Command -ComputerName hogehoge -ScriptBlock $Function:IsActivation

 

関連情報

リモート コンピューターのバッチ操作(Invoke-Command)
http://www.vwnet.jp/Windows/PowerShell/InvokeCommand.htm

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.