是否可以使用 Windows 7 上的任务计划程序实现安全的 USB 自动运行?

是否可以使用 Windows 7 上的任务计划程序实现安全的 USB 自动运行?

我发现Windows 7 不允许 USB 驱动器自动运行

是否可以通过使用任务计划程序设置任务来(以安全的方式)规避此问题,该任务在插入 USB 驱动器时触发?乍一看,我在事件查看器中找不到任何相关事件。

答案1

我和你有同样的问题,并使用脚本专家博客中的技术,用 powershell (windows 内置脚本) 解决了一些问题这里这里。脚本作为后台进程持续运行,您可以在系统登录时使用任务计划程序启动它。每当插入新驱动器时,脚本都会收到通知,然后执行某些操作(在这里您可以配置脚本而不是任务)。由于它在等待下一个插入驱动器时基本上处于暂停状态,因此您不会发现它占用太多资源。我来看一下:

1)启动 Powershell ISE,可以在开始菜单的附件/Windows Powershell 下找到。

2)将以下内容复制粘贴到 Powershell 中。

#需要版本 2.0
Register-WmiEvent-Class win32_VolumeChangeEvent-SourceIdentifier volumeChange
write-host (get-date -format s) "开始脚本..."
做{
  $newEvent = 等待事件-SourceIdentifier volumeChange
  $eventType = $newEvent.SourceEventArgs.NewEvent.EventType
  $事件类型名称 = 开关($事件类型)
    {
    1 {“配置已更改”}
    2 {“设备到达”}
    3 {“设备移除”}
    4 {“对接”}
    }
  write-host (get-date -format s) " 检测到事件 = " $eventTypeName
  如果 ($eventType -eq 2)
  {
    $驱动器字母 = $新事件.源事件参数.新事件.驱动器名称
    $driveLabel = ([wmi]"Win32_LogicalDisk='$driveLetter'").VolumeName
    write-host (get-date -format s) " 驱动器名称 = " $driveLetter
    写入主机 (获取日期 -格式 s) " 驱动器标签 = " $driveLabel
    # 如果驱动器符合指定条件,则执行进程
    如果 ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')
    {
        write-host (get-date -format s) "3 秒后开始任务..."
     开始睡眠-秒 3
        启动进程“Z:\sync.bat”
    }
  }
  删除事件-SourceIdentifier volumeChange
} while (1-eq1) #循环直到下一个事件
取消注册事件-SourceIdentifier volumeChange

3) 您需要修改上述脚本,告诉脚本要查找哪个驱动器以及要执行什么。需要更改的两行是:

  • if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')

    我的 USB 硬盘驱动器名为“Mirror”,设置为 Z: 驱动器。if ($driveLabel -eq 'MyDiskLabel')如果您不介意字母,则可以直接使用。

  • start-process "Z:\sync.bat"

    您要执行的任何任务的路径。在我的示例中,我在 USB 驱动器上创建了一个批处理文件,该文件启动了 3-4 个备份任务,但它可以是任何任务。

4) 完成后,将脚本保存到某个位置(扩展名为 .ps1),然后在任务计划程序中创建一个任务,让脚本在后台运行。我的脚本如下所示:

  • 触发条件:登录时
  • 操作:启动程序
  • 程序/脚本:powershell
  • 添加参数:-ExecutionPolicy Unrestricted -File“D:\Stuff\Backup script.ps1”

5)瞧!

6)额外内容:如果您希望隐藏脚本窗口,请使用以下参数:

  • 添加参数:-WindowStyle Hidden -ExecutionPolicy Unrestricted -File“D:\Stuff\Backup script.ps1”

如果您想要将脚本消息输出到日志文件(每次脚本启动时,即登录时,该文件都会被覆盖),请使用以下任务操作:

  • 程序/脚本:cmd
  • 添加参数:/c powershell -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1" > "D:\Stuff\script log.txt"

任何时候您想要结束正在运行的隐藏脚本,您都可以在任务管理器中结束“Powershell”进程。

答案2

不可以。您不能使用任务计划程序。

插入 USB 设备时触发的唯一记录事件是启动“便携式设备枚举”服务。但您无法在任务管理器中使用它,因为当任何服务已启动已停止。(此外,如果在插入设备时服务已在运行,则不会触发该事件。)

答案3

USB 安全移除有这样一个功能:当插入USB设备时,它可以启动一个程序。

USB 安全移除功能与类似软件的另一个区别在于,它不仅在连接设备后启动任何应用程序,而且在移除设备前也可以启动。自动运行功能允许您在断开可移动硬盘之前设置数据备份、使用 U 盘内容运行 Total Commander、在断开 USB 介质之前自动卸载加密的 TrueCrypt 驱动器等。

替代文本

答案4

我认为任务调度程序不是合适的工具。您需要一个每次添加新 USB 设备时都会做出响应的工具。这需要一个可以检测新 USB 设备的专用应用程序,因此它将取代 Windows 自动运行功能。

是的,这样的应用是可能的。不过,创建起来会是一个挑战。

使用任务计划程序意味着您将一遍又一遍地启动自动运行(好吧,您明白了)。您需要一种机制来防止自动运行两次。并且您需要一种机制来检测是否有可用的自动运行,否则您将最终收到无休止的错误消息。这就像用锤子敲打墙壁,希望中间有钉子。调度程序不知道何时启动和何时停止。

相关内容