wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了检测在Windows PowerShell脚本中安装虚拟(TrueCrypt)卷大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我使用以下 windows powersHell脚本来检测特定卷的安装时间,以便我可以运行一个脚本,将文件从我的机器移动到设备(我不太了解powersHell脚本,我在网上找到了这个). #requires -version 2.0 Register-WmiEvent -Class win32_VolumeChangeEvent -sourcEIDentifier volumeChange wri
我使用以下 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根本不适合我.相反,我采取了不同的方法来监控驱动器事件.不幸的是,脚本不是万无一失的,因为它在添加任何新驱动器时执行操作.随意添加更多条件.
我怀疑只有在根据卷管理器条目更改物理驱动器时,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:”){})
然后,在成功执行结束时,它会再次覆盖$DrivesCount变量(以防止脚本重复操作,因为旧变量仍然存在).

好吧,抱歉你没有及时得到答复 – 但我希望有人会发现这个剧本很有用. (至少我学到了更多关于WMI对象的知识).

大佬总结

以上是大佬教程为你收集整理的检测在Windows PowerShell脚本中安装虚拟(TrueCrypt)卷全部内容,希望文章能够帮你解决检测在Windows PowerShell脚本中安装虚拟(TrueCrypt)卷所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。