UWFフィルターの有効か無効かだけを抽出してコマンドプロンプトから知る方法


Windows 10 IoT LTSB とかに付いてくる書き込みフィルター、いわゆる書き込み保護のコマンドについて。

統合書き込みフィルター処理 (UWF) 機能 | Microsoft Docs
https://docs.microsoft.com/ja-jp/windows-hardware/customize/enterprise/unified-write-filter

uwfmgr.exe | Microsoft Docs
https://docs.microsoft.com/ja-jp/windows-hardware/customize/enterprise/uwfmgrexe

uwfmgr get-configの表示が長ったらしく、フィルタの有効か無効かだけをコマンドプロンプトから知る方法。
なんと、uwfmgr get-config | find "状態"とかってやると、なんとパイプを通る時に文字化けするという謎仕様。
PowerShellを使って文字コードを変えようにも、そもそもパイプ通る時に「標準出力が文字化け」してる感じなので、「Out-File -Encoding default」とかでも無理でどうしようもない。

解決方法は以下。
PowerShellから、WMIオブジェクトのプロパティを見ればいいらしい。

check_uwf_filter.bat
@echo off
::管理者権限のチェック
openfiles >nul 2>&1
if errorlevel 1 (
    echo "管理者権限で実行してください。"
    pause
    exit
)

::WMIオブジェクトの「UWF_Filter」のプロパティを確認する
powershell $COMPUTER = \"localhost\";^
$NAMESPACE = \"root\standardcimv2\embedded\";^
$objUWFInstance = Get-WmiObject -Namespace $NAMESPACE -Class UWF_Filter;^
if($objUWFInstance.CurrentEnabled) { ^
    $CurrentStatus = \"有効\";^
} else { ^
    $CurrentStatus = \"無効\";^
} ^
if($objUWFInstance.NextEnabled) { ^
    $NextStatus = \"有効\";^
} else { ^
    $NextStatus = \"無効\";^
} ^
echo \"ライトプロテクト状態\";^
echo \" 現在   : $CurrentStatus\";^
echo \" 次回起動時: $NextStatus\";

::表示残すため一時停止
pause

はぁ、めでたしめでたし。しかし糞仕様過ぎないか・・・。

参考サイト

VBSにてUWFの有効状態を確認できない
https://social.technet.microsoft.com/Forums/ie/ja-JP/d4ac515a-c547-4a69-97da-3bbd8042c214/vbsuwf?forum=win10itprogeneralJP