[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 WHY 于 2024-1-26 21:15 编辑
  1. Unregister-Event USBCheck -ea SilentlyContinue;
  2. $query = "select * from __InstanceOperationEvent within 5 where TargetInstance isa 'Win32_LogicalDisk' and TargetInstance.DriveType=2";
  3. Register-WmiEvent -Query $query -SourceIdentifier USBCheck -Action {
  4.     $class = $eventArgs.NewEvent.__CLASS;
  5.     $name  = $eventArgs.NewEvent.TargetInstance.Name;
  6.     Switch ($class) {
  7.         __InstanceCreationEvent {
  8.             Write-Host "USB Drive $name--Inserted."
  9.             #### net share MyShareName="C:\Users"
  10.         }
  11.         __InstanceDeletionEvent {
  12.             Write-Host "USB Drive $name--Removed."
  13.             #### net share MyShareName /Delete
  14.         }
  15.     }
  16. }
复制代码
保存为 D:\Test.ps1,CMD 或 PowerShell 命令行窗口执行:
  1. PowerShell -NoExit -exec Bypass -file "D:\Test.ps1"
复制代码

TOP

Test.ps1,右键 "使用 PowerShell 运行"
  1. Unregister-Event USBCheck -ea SilentlyContinue;
  2. $query = "select * from __InstanceOperationEvent within 5 where TargetInstance isa 'Win32_LogicalDisk' and TargetInstance.DriveType=2";
  3. Register-WmiEvent -Query $query -SourceIdentifier USBCheck;
  4. while ($true) {
  5.     $e = Wait-Event -SourceIdentifier USBCheck;
  6.     $class = $e.SourceArgs.NewEvent.__CLASS;
  7.     $name  = $e.SourceArgs.NewEvent.TargetInstance.Name;
  8.     Switch ($class) {
  9.         __InstanceCreationEvent {
  10.             Write-Host "USB Drive $name --Inserted.";
  11.             #### net share MyShareName="C:\Users"
  12.         }
  13.         __InstanceDeletionEvent {
  14.             Write-Host "USB Drive $name --Removed.";
  15.             #### net share MyShareName /Delete
  16.         }
  17.     }
  18.     Remove-Event -SourceIdentifier USBCheck;
  19. }
复制代码

TOP

第1个用的是 -action 脚本块,订阅的事件不会放到队列中;
第2个将订阅的事件会放到队列中,用 Wait-event 处理事件。

一定要分出个孰优孰劣,我认为第2个更方便,相比第1个在命令行输入 PowerShell 命令运行,用右键要方便一点点;
命令行窗口运行还会多启动一个CMD或者POWERSHELL进程。

个人见解,不一定正确,萝卜白菜,各有所爱吧。

TOP

回复 11# newswan
  1. $query = "select * from __InstanceOperationEvent within 5 where (__CLASS='__InstanceCreationEvent' or __CLASS='__InstanceDeletionEvent') and  TargetInstance isa 'Win32_LogicalDisk' and TargetInstance.DriveType=2";
复制代码
这样写,除了查询语句变长、变复杂,没啥太大意义。
即使这样写,还是需要 Swith 或 If 判断一下,除非插入与拔出时执行的是一样的命令(比如都是设置共享,或者都是删除共享)。
1

评分人数

TOP

返回列表