icon

nazo6.dev

一覧に戻る
2024/8/23 2 min read

ドライブを自動でwslにマウントするスクリプト

wslではdrvfsを用いてWindowsのドライブをマウントできる。これを自動化してマウント時にwslに認識させるためのスクリプトを書いた。


wslでは

mount -t drvfs X: /mnt/X

というコマンドを使うことでドライブをマウントできるが、接続するたびに自動でやってほしかったのでスクリプトを作れないかと思っていたところドンピシャなコードを見つけた。

これを少し改変させてもらって以下のようなスクリプトを作成した。

$query = "select * from __InstanceCreationEvent within 5 where TargetInstance ISA 'Win32_LogicalDisk'"
 
$dt =  Get-Date -Format "yyyy/MM/dd HH:mm:ss"
Set-Content ./log.txt "$dt wsl automount start"
 
Register-WmiEvent -Query $Query -SourceIdentifier USBFlashDriveWSLMount
 
 
While ($True) {
  $event = Wait-Event -SourceIdentifier USBFlashDriveWSLMount
  $drivePath = $event.SourceEventArgs.NewEvent.TargetInstance.Name
  $driveLetter = $drivePath.ToLower()[0]
  $dt =  Get-Date -Format "yyyy/MM/dd HH:mm:ss"
  if (((wsl -l -v) -replace "`0" | Select-String -Pattern Run) -ne $null) {
    Add-Content ./log.txt "$dt wsl mounting: $driveLetter $drivePath"
    echo "$dt wsl mounting: $driveLetter $drivePath"
    wsl -u root -e mount -t drvfs $drivePath /mnt/$driveLetter
  } else {
    Add-Content ./log.txt "$dt wsl mount skipped: $driveLetter $drivePath"
    echo "$dt wsl mount skipped: $driveLetter $drivePath"
  }
  Remove-Event USBFlashDriveWSLMount
}
 
$dt =  Get-Date -Format "yyyy/MM/dd HH:mm:ss"
Add-Content ./log.txt "$dt wsl automount stop"
 

ちなみに、wslコマンドの出力はUTF-16だからそのままだとSelect-Stringできないらしい。

あとはこれをタスクスケジューラで実行するだけだが、このままだとウインドウが出てしまう。 これを回避するにはVBSスクリプトを作るなどの方法があるが、このためのユーティリティを前作ったのを思い出した。

これは実行ファイル名.tomlというファイルに指定されたコマンドを実行するという簡単なプログラムで、今回は

automount-hide-start.toml
cmd = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -File automount.ps1"
wait = true

というtomlファイルを作ってautomount-hide-start.exeをタスクスケジューラに指定した。あと開始ディレクトリの指定も忘れずに。

スクリプト実行後はwslで/mnt/x/にマウントされるようになる。

Share this article:
一覧に戻る

© 2025 nazo6. All rights reserved.