

この度初めてPowerShellでスクリプトを書くのですが、動かしたい内容が  
・USBを挿入されたときに割り当てられたドライブを返す  
ということです。USBは2つ使うので、入れる順番によってはDになったりEになったりするので、  
その時に確認してくれるスクリプトです。

これはやりたい事全体の最初の工程なので外部での解決（人間が挿入時に確認する）等はできません。

また、初めて触るにあたって動画やサイト等見てみましたが目当てのものがなかったのでよろしければサンプルコードも頂ければ幸いです。


CC BY-SA 4.0
2021-07-08T07:57:04.577
78049
2021-07-08T12:17:59.243
2021-07-08T12:17:59.243
9820
47223
question
windows-10 powershell
PowerShellでリムーバブルディスクのドライブ割当を確認する方法


[`Get-WmiObject`](https://docs.microsoft.com/en-
us/powershell/module/microsoft.powershell.management/get-
wmiobject)と[`CIM_LogicalDisk`](https://docs.microsoft.com/ja-
jp/windows/win32/cimwin32prov/cim-logicaldisk)で論理ドライブの一覧を取得できます。  
一覧のうち`DriveType = 2`のものがリムーバブルディスクです。

DriveTypeは[Win32_LogicalDisk](https://docs.microsoft.com/ja-
jp/windows/win32/cimwin32prov/win32-logicaldisk)のドキュメントを検索して参照してください。

[How to display attached USB devices with drive letter using
powershell](https://stackoverflow.com/q/36379454)

[code]

    Get-WmiObject CIM_LogicalDisk | Where-Object DriveType -eq 2 | Select-Object DeviceID
    # 上の記述をエイリアスを使って書き直したもの
    gwmi cim_logicaldisk | ? drivetype -eq 2 | select deviceid
    
[/code]

またUSBが挿入された時に任意の処理を実行したい場合には`Register-WmiEvent`を使ってイベントの監視ができます。  
[Receiving a WMI Event](https://docs.microsoft.com/en-
us/windows/win32/wmisdk/receiving-a-wmi-event)

下記回答を参考にして`-Action`を書き換えることでUSB挿入時に任意のファンクションを実行可能です。  
[Start PowerShell script when USB drive is
inserted](https://stackoverflow.com/a/21806420)

**回答のコード抜粋(コメント訳)**

[code]

    # WMIイベントのクエリを定義します。ここではDriveTypeが"2"のWin32_LogicalDiskが追加されるのを検知します。
    # http://msdn.microsoft.com/en-us/library/aa394173(v=vs.85).aspx
    $Query = "select * from __InstanceCreationEvent within 5 where TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 2";
    
    # イベントが起こった時に実行するPowershellスクリプトを定義します。
    $Action = { & C:\test\script.ps1;  };
    
    # イベントを登録します。
    Register-WmiEvent -Query $Query -Action $Action -SourceIdentifier USBFlashDrive;
    
[/code]


CC BY-SA 4.0
2021-07-08T10:41:41.197
78053
2021-07-08T10:41:41.197
9820
78049
answer