检测在Windows PowerShell脚本中安装虚拟(TrueCrypt)卷
我使用以下
windows powershell脚本来检测特定卷的安装时间,以便我可以运行一个脚本,将文件从我的机器移动到设备(我不太了解powershell脚本,我在网上找到了这个).
#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内的真实加密容器.当脚本检测到正确的设备安装为G时,它会休眠5秒钟,以便给出装载F的真实加密时间,然后运行F上找到的脚本.只有在连接/断开物理驱动器时才会生成卷更改事件(至少这是脚本收到事件的唯一时间),因为保持G连接并安装/卸载F不会触发脚本. 我希望能够检测到何时安装truecrypt容器而没有任何其他更改.在某种程度上,这必须是可能的,因为Windows资源管理器在安装或卸载容器时更新其驱动器显示.我读了win32_VolumeChangeEvent,但我无法找到与虚拟驱动器相关的任何内容.谢谢您的帮助. 解决方法
我很惊讶这已经持续了一年而且没有答案!对于访问过的人:
Register_WMIEvent根本不适合我.相反,我采取了不同的方法来监控驱动器事件.不幸的是,脚本不是万无一失的,因为它在添加任何新驱动器时执行操作.随意添加更多条件. 这是允许您执行任何操作的脚本. (提示:可能将TC容器安装在高位字母上并仅限制这些功能,以便在连接一些低位字母驱动器(例如pendrive)时不会触发脚本) $DrivesCount = (gwmi -Query "Select * from Win32_LogicalDisk").Count $Drives = (gwmi -Query "Select * from Win32_LogicalDisk") while(1) { Start-Sleep -Seconds 5 $DrivesCountNew = (gwmi -Query "Select * from Win32_LogicalDisk").Count if ($DrivesCount -ne $DrivesCountNew) { $DrivesNew = (gwmi -Query "Select * from Win32_LogicalDisk") $DriveLetter = Compare-Object -ReferenceObject $Drives -DifferenceObject $DrivesNew | Select -ExpandProperty InputObject | Select -ExpandProperty DeviceId if (!($DriveLetter -eq $null)) { Write-host "New drive mounted $DriveLetter" ##Place for you to do something with your drive } $DrivesCount = (gwmi -Query "Select * from Win32_LogicalDisk").Count } } 至于脚本的快速评论: $DrivesCount获取驱动器列表的初始值,$Drives将所有驱动器列表变为变量.然后,无限循环开始,如果安装了新驱动器,则每5秒钟计数一次($DrivesCountNew).如果未注册任何更改,则不执行任何操作(值相同).但是,如果出现新的驱动器,$DriveLetter变量通过比较差异进行检查并返回驱动器的唯一字母(通过使用ExpandProperty几次. 接下来,对$DriveLetter进行检查,因为如果删除了驱动器,脚本将会触发(我们不希望在这个地方发生任何操作).当然脚本会在之后执行任何脚本块,因此通过添加一些条件来限制执行是明智的(例如:if($DriveLetter -eq“Z:”){}) 好吧,抱歉你没有及时得到答复 – 但我希望有人会发现这个剧本很有用. (至少我学到了更多关于WMI对象的知识). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-7 – 在DOS命令行上使用git要求输入密码 – 但不是
- windows-phone – 如何在Windows Phone 8模拟器中启动市场
- 系统任务栏图标透明且无法打开解决办法 for Windows
- .NET for Universal Windows Program是.NET Core的一个子集
- Windows VBScript – 使用Eval执行代码
- POCO,DTO,DLL和贫血域模型
- windows-server-2003 – 在不丢失共享配置的情况下禁用Wind
- Payload 实现后门分离免杀
- 完美解决win10家庭版本系统无法远程连接问题(转)
- windows – 发生错误时跳过
- windows – 当提供的缓冲区太小时返回哪个HRESUL
- api – Windows 7中的Cards.dll
- windows-services – 使用pscp.exe时跳过主机检查
- windows-ce – 如何下载适用于Windows CE 5.0的P
- 文件服务器 – 具有存储空间直接的横向扩展文件服
- Debian将系统时区更改为Windows等效
- winforms – ScrollBar不会在Select()上滚动
- windows – 匿名,身份验证,模拟和委托有什么区别
- regedit系统注册表,msconfig系统配置
- 在 Windows 上搭建基于Android Studio 3.2 的 Fl