是否可以在 Windows 7 上使用任務排程器進行安全的 USB 自動執行?

是否可以在 Windows 7 上使用任務排程器進行安全的 USB 自動執行?

我發現Windows 7 不允許在 USB 隨身碟上自動執行

是否可以透過使用任務計劃程式設定任務(在插入 USB 驅動器時觸發)來規避此問題(以安全的方式)?乍一看,我找不到任何與事件檢視器相關的事件。

答案1

我和你有同樣的問題,並使用腳本專家部落格中的技術透過 powershell(Windows 內建腳本)解決了一些問題這裡這裡。該腳本作為後台進程持續運行,您可以在系統登入時使用任務計劃程序啟動該進程。每當插入新磁碟機時,腳本就會收到通知,然後執行某些操作(此處您配置腳本而不是任務)。由於它在等待下一個插入的驅動器時基本上暫停,因此您不應該發現它佔用太多資源。我來啦:

1) 啟動 Powershell ISE,可以在開始功能表的 Accessories/Windows Powershell 下找到它。

2)將以下內容複製並貼上到Powershell。

#需要-版本2.0
註冊-WmiEvent -類別 win32_VolumeChangeEvent -SourceIdentifier volumeChange
write-host (get-date -format s) “開始腳本...”
做{
  $newEvent = 等待事件 -SourceIdentifier volumeChange
  $eventType = $newEvent.SourceEventArgs.NewEvent.EventType
  $eventTypeName = 開關($eventType)
    {
    1 {“配置已更改”}
    2 {“設備到達”}
    3 {“裝置刪除”}
    4 {“對接”}
    }
  write-host (get-date -format s) " 偵測到事件 = " $eventTypeName
  if ($eventType -eq 2)
  {
    $driveLetter = $newEvent.SourceEventArgs.NewEvent.DriveName
    $driveLabel = ([wmi]"Win32_LogicalDisk='$driveLetter'").VolumeName
    write-host (get-date -format s) " 磁碟機名稱 = " $driveLetter
    write-host (get-date -format s) " 磁碟機標籤 = " $driveLabel
    # 如果磁碟機符合指定條件則執行進程
    if ($driveLetter -eq 'Z:' - 和 $driveLabel -eq 'Mirror')
    {
        write-host (get-date -format s) " 3 秒後開始任務..."
     開始-睡眠-秒 3
        啟動進程“Z:\sync.bat”
    }
  }
  刪除事件-SourceIdentifiervolumeChange
} while (1-eq1) #迴圈直到下一個事件
取消註冊事件-SourceIdentifiervolumeChange

3)您需要修改上面的腳本,告訴腳本要尋找什麼驅動器,以及要執行什麼。要更改的兩行是:

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

    我的名為「Mirror」的 USB 硬碟被設定為 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 安全刪除的另一個區別於類似軟體的功能是,不僅在連接裝置後啟動任何應用程序,而且在刪除裝置之前也啟動任何應用程式。自動運行功能可讓您在斷開可移動硬碟之前設定資料備份、使用隨身碟的內容運行 Total Commander、在斷開 USB 媒體之前自動卸載加密的 TrueCrypt 驅動器等。

替代文字

答案4

我不認為任務調度程序是合適的工具。您需要能夠在每次新增 USB 裝置時做出回應的東西。這需要一個專門的應用程式來偵測新的 USB 設備,從而取代 Windows 自動運行功能。

是的,這樣的應用是可能的。不過,創造起來將會是個挑戰。

使用任務計劃程序意味著您將開始自動運行一遍又一遍一遍一遍一遍一遍遍一遍遍一遍一遍一遍一遍一遍一遍一遍又一遍一遍一遍一遍一遍一遍一遍一遍一遍一遍遍一遍——你明白了)再次。您需要一種機制來防止使用自動運行兩次。並且您需要一種機制來檢測是否有可用的自動運行,否則您最終會收到永久的錯誤訊息。這就像用鐵鎚敲打牆壁,希望中間有釘子。調度程序不知道何時開始、何時停止。

相關內容