質問: この度初めてPowerShellでスクリプトを書くのですが、動かしたい内容が ・USBを挿入されたときに割り当てられたドライブを返す ということです。USBは2つ使うので、入れる順番によってはDになったりEになったりするので、 その時に確認してくれるスクリプトです。 これはやりたい事全体の最初の工程なので外部での解決(人間が挿入時に確認する)等はできません。 また、初めて触るにあたって動画やサイト等見てみましたが目当てのものがなかったのでよろしければサンプルコードも頂ければ幸いです。
回答: `Get-WmiObject`と`CIM_LogicalDisk`で論理ドライブの一覧を取得できます。 一覧のうち`DriveType = 2`のものがリムーバブルディスクです。 DriveTypeはWin32_LogicalDiskのドキュメントを検索して参照してください。 How to display attached USB devices with drive letter using powershell ``` Get-WmiObject CIM_LogicalDisk | Where-Object DriveType -eq 2 | Select-Object DeviceID # 上の記述をエイリアスを使って書き直したもの gwmi cim_logicaldisk | ? drivetype -eq 2 | select deviceid ``` またUSBが挿入された時に任意の処理を実行したい場合には`Register-WmiEvent`を使ってイベントの監視ができます。 Receiving a WMI Event 下記回答を参考にして`-Action`を書き換えることでUSB挿入時に任意のファンクションを実行可能です。 Start PowerShell script when USB drive is inserted **回答のコード抜粋(コメント訳)** ``` # 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; ```