我正在使用以下的Windows PowerShell脚本来检测特定的卷是否已挂载,以便我可以运行一个脚本,将文件从我的计算机移动到设备上(我对PowerShell脚本不太了解,这是我在网上找到的)。
G是一个物理外置硬盘,F是G中的TrueCrypt容器。当脚本检测到正确的设备已经挂载为G时,它会等待5秒钟以便TrueCrypt有足够的时间来挂载F,并且然后运行在F上找到的脚本。似乎只有在连接/断开物理驱动器(至少是脚本接收事件的唯一时间)时才会生成卷更改事件,因为保持G连接并挂载/卸载F不会触发脚本。
我希望能够在没有任何其他更改的情况下检测到TrueCrypt容器何时被挂载。在某种程度上,这一定是可能的,因为Windows资源管理器在容器挂载或卸载时更新其驱动器显示。我阅读了关于win32_VolumeChangeEvent的内容,但是我无法找到与虚拟驱动器相关的任何信息。感谢您的帮助。
#Requires -version 2.0
Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange
write-host (get-date -format s) " Beginning script..."
do{
$newEvent = Wait-Event -SourceIdentifier volumeChange
$eventType = $newEvent.SourceEventArgs.NewEvent.EventType
$eventTypeName = switch($eventType)
{
1 {"Configuration changed"}
2 {"Device arrival"}
3 {"Device removal"}
4 {"docking"}
}
write-host (get-date -format s) " Event detected = " $eventTypeName
if ($eventType -eq 2)
{
$driveLetter = $newEvent.SourceEventArgs.NewEvent.DriveName
$driveLabel = ([wmi]"Win32_LogicalDisk='$driveLetter'").VolumeName
write-host (get-date -format s) " Drive name = " $driveLetter
write-host (get-date -format s) " Drive label = " $driveLabel
# Execute process if drive matches specified condition(s)
if ($driveLetter -eq 'G:' -and $driveLabel -eq 'My Book')
{
write-host (get-date -format s) " Starting task in 5 seconds..."
start-sleep -seconds 5
start-process "F:\copy_backups.bat"
}
}
Remove-Event -SourceIdentifier volumeChange
} while (1-eq1) #Loop until next event
Unregister-Event -SourceIdentifier volumeChange
G是一个物理外置硬盘,F是G中的TrueCrypt容器。当脚本检测到正确的设备已经挂载为G时,它会等待5秒钟以便TrueCrypt有足够的时间来挂载F,并且然后运行在F上找到的脚本。似乎只有在连接/断开物理驱动器(至少是脚本接收事件的唯一时间)时才会生成卷更改事件,因为保持G连接并挂载/卸载F不会触发脚本。
我希望能够在没有任何其他更改的情况下检测到TrueCrypt容器何时被挂载。在某种程度上,这一定是可能的,因为Windows资源管理器在容器挂载或卸载时更新其驱动器显示。我阅读了关于win32_VolumeChangeEvent的内容,但是我无法找到与虚拟驱动器相关的任何信息。感谢您的帮助。