我们公司正在寻求实施一项政策,以监控运行 Windows 操作系统的公司电脑上 USB 的添加和删除。我们知道,在某些条件下,我们只能通过政策阻止用户使用 USB,但我们更倾向于将这些更改报告给 EventViewer,以便可以按日、周、小时收集和查看它们。
有谁知道有什么工具或选项可以在整个 Windows 平台上实现。我不需要集中收集信息的帮助,只需要在 PC 级别进行可靠的报告。
答案1
您可以使用 PowerShell 执行此操作。
你的脚本看起来应该是这样的:
. .\eventhandler.ps1
function logEvent([string] $message)
{
$evt=new-object System.Diagnostics.EventLog("System")
$evt.Source = "USB Drive Watcher"
$infoevent = [System.Diagnostics.EventLogEntryType]::Information
$evt.WriteEntry($message,$infoevent,70)
}
$handleUSBEvent = {
param ($sender, $args)
$event = $args[1].NewEvent.__CLASS
if ($event -eq "__InstanceCreationEvent")
{
logEvent("USB Drive Inserted")
}
elseif ($event -eq "__InstanceDeletionEvent")
{
logEvent("USB Drive Removed")
}
}
$timespan = new-object System.TimeSpan(0,0,1)
$scope = new-object System.Management.ManagementScope("\\.\root\cimV2")
$query = new-object System.Management.WqlEventQuery("__InstanceOperationEvent",$timespan,"TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType=2")
$watcher = new-object System.Management.ManagementEventWatcher($scope,$query)
$watcher.Start()
add-eventhandler (gv watcher) EventArrived $handleUSBEvent
Do-Events $false
将该文件命名为 USBNotifier.ps1。您需要下载并安装事件处理程序以及其文件 EventHandler.ps1下载区。
由于这是一个未签名的脚本,您需要设置 PowerShell 的执行策略到“RemoteSigned”(然后右键单击“解除阻止”EventHandler.ps1 脚本)。
该脚本写入系统事件日志,因此应以管理员权限运行。
要使该程序隐藏并在后台运行,可以使用以下 VBScript:
Dim objShell
set objShell=CreateObject("WScript.Shell")
strPath = "c:\users\adam\desktop\USBNotification.ps1" 'The path to your script.
strCMD = "powershell -nologo -command " & Chr(34) & "&{" & strPath & "}" & Chr(34)
objShell.Run strCMD, 0
此脚本文件应与您的 USBNotifier.ps1 脚本和 EventHandling.ps1 脚本位于同一文件夹中。然后,您需要做的就是为该 VBScript 设置一个启动项,以便在以管理员身份登录时运行。或者,您可以创建一个调用 USBNotifier 脚本的批处理文件,然后创建用户定义的服务。
如果您想安装 PowerShell 2.0,您可能可以利用其事件处理功能(无需 PSEventing),并且您还可以使用 PS 2.0 的后台作业功能。
答案2
也许你会找到更简单的东西适合你,但是设备锁非常适合此类(及相关)任务