Windows10の指紋認証を解除するスクリプト

# はじめに
今話題の[逮捕にそなえる人生継続計画](https://yashio.hatenablog.com/entry/20220208/1644325200)を読んだのですが，以下の部分が気になりました．

https://yashio.hatenablog.com/entry/20220208/1644325200


>捜索差押
>    捜索差押の現場は動画撮影する。暴言や破壊などの不当な行為がもしあれば証拠になり得る。自分のスマホは差押えられるので家族のスマホやデジカメ等で撮影するのが望ましい。警察には止められるが法的な命令ではない。
>    差押えられたPC等のID・パスワードを教える必要はない。警察からは不利益をちらつかせられたり、それが義務であるかのように言われるが、教える義務はない。
>    生体認証（指紋や虹彩）は、捜索差押と身体検査の令状の組み合わせで解除させられる。
>    起訴前の弁護人には捜索差押の立会権が保障されておらず、警察は出入りを禁止できる。
>   ※上記は平野敬弁護士のレポート（後述）による。

これを受けて投稿された次のツイートは，iPhoneの生体認証をワンタッチで切る方法について紹介しています．これは自衛策として有効そうです．

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">iPhoneの押収に備えてFace ID/Touch ID認証を素早く切る方法を確認した。<br><br>・電源ボタンと音量の+または-(Touch ID端末の場合は電源とホームボタン)を長押しして『スライドで電源オフ』画面を呼び出す。<br><br>これだけで認証セッションが無効化されるので、次回ロック解除にパスコード入力が必要になる。 <a href="https://t.co/bVZkCYbcmP">pic.twitter.com/bVZkCYbcmP</a></p>&mdash; 小野マトペ (@ono_matope) <a href="https://twitter.com/ono_matope/status/1491631757283962881?ref_src=twsrc%5Etfw">February 10, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

これを読んで考えたのは，最近のノートPCは指紋認証や顔認証が付いているけど同じようなことはできないのかな？ということです．そこで，バッチファイルひとつ実行するだけで生体認証をオフにできるスクリプトを書いてみました．これを使えば，コマンド1つで指紋認証を解除することが可能です．

# コード
スクリプトは1行のPowerShellとそれを実行するバッチファイルだけなので簡単です．

```powershell:disable-fingerprint.ps1
# 生体認証デバイスをオフにする
# classがbiometricであるデバイスが複数ある時にどうなるのかは未検証
Get-PnpDevice | ? {$_.class -like "biometric"} | Disable-PnpDevice -Confirm:$false
```

このPowerShellスクリプトを次のバッチファイルで実行します．

```batch:main.bat
PowerShell -ExecutionPolicy RemoteSigned "%~dp0%disable-fingerprint.ps1"
pause
```

実行する際は管理者権限で実行しないとエラーになります．

# 解説
Windowsに接続されているデバイス(モニター，マウス，キーボード，USB，Bluetooth etc..)の多くはプラグアンドプレイ(PnP)に準拠しています．PnPのおかげで，デバイスをPCに差しただけで自動でWindowsが認識してくれるというわけです．
`Get-PnpDevice`はPnPで接続されているデバイスの情報を返すPowerShellのモジュールです．詳しくは[公式ドキュメント](https://docs.microsoft.com/en-us/powershell/module/pnpdevice/get-pnpdevice?view=windowsserver2022-ps)を参照ください．

`GetPnpDevice`で得られた結果には，ステータス，インスタンスID，FrienflyName，クラスの情報が入っており，これらを用いてデバイス一覧をフィルタリングすることができます．

そこで，`Get-PnpDevice | ? {$_.class -like "biometric"} `のようにしてクラスが`biometric`のものだけを取り出します．生体認証デバイスは`biometric`クラスが与えられるみたいです．結果は次のようになりました．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404588/57626ceb-9dfa-5ef6-c13e-17fde9a91561.png)
自分のPCには指紋認証しかなかったので，1つだけが返ってきました．顔認証や虹彩認証のできるカメラがbiometricクラスになるのかは不明です．
**WBDI**(Windows Biometric Driver Interface)は生体認証デバイスのドライバーに含まれているものです([参考](https://docs.microsoft.com/ja-jp/windows-hardware/drivers/biometric/getting-started-with-biometric-drivers))．Friendly Nameから`WBDI`でフィルタリングしてもうまくいくかもしれないです．

あとは，この指紋認証デバイスを`Disable-PnpDevice`で無効化するだけです．`Configure -$false`は確認不要にするオプションです．

実行すると，デバイスマネージャーの指紋認証デバイスがオフになります．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404588/cefeae41-b6be-50e4-205f-aa0e3f065ef9.png)

# まとめ
PowerShellの簡単なスクリプトでデバイスの指紋認証をオフにする方法を紹介しました．本コードはhttps://github.com/seal-git/disable-fingerprint で見ることができます．
~~デバイスマネージャー起動して無効化するのと手間はほぼ変わらないのでは？~~

## 参考
https://docs.microsoft.com/en-us/powershell/module/pnpdevice/get-pnpdevice?view=windowsserver2022-ps

https://docs.microsoft.com/ja-jp/windows-hardware/drivers/biometric/getting-started-with-biometric-drivers

https://pmp-style.hatenablog.com/entry/PowerShell_DeviceManage