插入USB驱动器时启动PowerShell脚本

有没有什么办法可以在驱动器插入PC的时候启动USB驱动器上的PowerShell脚本? 它必须将所有PDF文件从PC复制到USB驱动器,但这不是问题。 我唯一不知道的是如何在插入USB驱动器后立即启动脚本。

谁能帮忙?

您可以使用Windows Management Instrumentation(WMI)事件来检测USB闪存驱动器何时插入。 您可以使用Register-WmiEvent cmdlet创建临时事件注册。

假设您有一个名为c:\test\script.ps1的脚本文件。 这个脚本将被用来响应发生的事件。

 Add-Content -Path $PSScriptRoot\test.txt -Value 'USB Flash Drive was inserted.'; 

然后,您需要使用Register-WmiEvent cmdlet在单独的脚本中Register-WmiEvent WMI事件。 您至少需要指定-Action-Query参数。 传递给-Action参数的PowerShell ScriptBlock将在事件发生时被调用。 -Query参数包含将用于轮询WMI事件的WMI事件查询。 下面我提供了一个示例。

 # Define a WMI event query, that looks for new instances of Win32_LogicalDisk where DriveType is "2" # http://msdn.microsoft.com/en-us/library/aa394173(v=vs.85).aspx $Query = "select * from __InstanceCreationEvent within 5 where TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 2"; # Define a PowerShell ScriptBlock that will be executed when an event occurs $Action = { & C:\test\script.ps1; }; # Create the event registration Register-WmiEvent -Query $Query -Action $Action -SourceIdentifier USBFlashDrive; 

既然你提到你想在USB驱动器上启动一个PowerShell脚本文件,当这个事件发生时,你可以把-Action ScriptBlock改为:

 $Action = { & ('{0}\ufd.ps1' -f $event.SourceEventArgs.NewEvent.TargetInstance.Name); }; 

上面的代码将动态执行刚刚插入的USB驱动器根目录下的ufd.ps1脚本文件。

那么,我不能测试这个,但我认为你可以使用Windows的自动播放功能,如果没有禁用。

所以,假设您的USB驱动器的根目录上有MyPowerShell.ps1。 你可以创建一个Autorun.ini文件来启动一个可以启动powershell脚本的cmd。 你甚至可以绕过cmd,但正如我所说,我现在不能测试。

Autorun.ini包括:

 [autorun] icon=yourIconFile.ico open=autorun.cmd Action=Click "OK" to copy PDF files! 

那么你的Autorun.cmd将包括以下行

 %Windir%\System32\WindowsPowerShell\v1.0\PowerShell.exe -exec bypass -noprofile -file MyPowerShell.ps1