Win 7에서 자동 실행 (또는 자동 실행 ??)의 제한으로 인해 연결시 USB 드라이브에서 응용 프로그램을 시작할 수 없다는 논의가있었습니다. 그러나 이벤트 유형 트리거가있는 예약 된 작업을 생성 할 수 있습니다. . 드라이브 또는 USB 장치가 연결될 때 발생하는 이벤트가 있어야합니다.
누구든지 내가 어떤 이벤트 ID를 사용해야하는지 아는 사람이 있습니까? 아니면 적어도 어떤 유형의 이벤트? 이벤트 뷰어에서 이벤트를 어디에서 찾을 수 있습니까?
스레드 작업 스케줄러 : USB 플래시 드라이브를 자동으로 동기화하는 방법은 무엇입니까? 작업 스케줄러와 함께 PowerShell을 사용하는 monotone이라는 사용자의 답변이 있습니다.
저는 여러분과 같은 질문을했고 여기 와 여기에 있는 Scripting Guy 블로그의 기술을 사용하여 powershell (windows 내장 스크립팅)으로 무언가를 해결했습니다 . 스크립트는 백그라운드 프로세스로 계속 실행되며 작업 스케줄러로 시스템 로그온시 시작할 수 있습니다. 새 드라이브를 꽂은 다음 작업을 수행 할 때마다 스크립트에 알림이 전송됩니다 (여기서는 작업이 아닌 스크립트를 구성합니다). 다음에 연결된 드라이브를 기다리는 동안 기본적으로 일시 중지되므로 많은 리소스를 차지하지 않아야합니다. 내가 간다:
1) Powershell ISE를 시작합니다. 시작 메뉴는 Accessories / Windows Powershell 아래에 있습니다. 2) Powershell에 다음을 복사하여 붙여 넣으십시오.
#Requires -version 2.0 Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange write-host (get-date -format s) " Beginning script..." do{ $newEvent = Wait-Event -SourceIdentifier volumeChange $eventType = $newEvent.SourceEventArgs.NewEvent.EventType $eventTypeName = switch($eventType) { 1 {"Configuration changed"} 2 {"Device arrival"} 3 {"Device removal"} 4 {"docking"} } write-host (get-date -format s) " Event detected = " $eventTypeName if ($eventType -eq 2) { $driveLetter = $newEvent.SourceEventArgs.NewEvent.DriveName $driveLabel = ([wmi]"Win32_LogicalDisk='$driveLetter'").VolumeName write-host (get-date -format s) " Drive name = " $driveLetter write-host (get-date -format s) " Drive label = " $driveLabel # Execute process if drive matches specified condition(s) if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror') { write-host (get-date -format s) " Starting task in 3 seconds..." start-sleep -seconds 3 start-process "Z:\sync.bat" } } Remove-Event -SourceIdentifier volumeChange } while (1-eq1) #Loop until next event Unregister-Event -SourceIdentifier volumeChange
3) 위의 스크립트를 수정하여 찾을 드라이브와 실행할 대상을 스크립트에 알려야합니다. 변경할 두 줄은 다음과 같습니다.
if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')
'Mirror'라는 이름의 USB 하드 드라이브가 Z : 드라이브로 설정되어 있습니다.
if ($driveLabel -eq 'MyDiskLabel')
편지에 신경 쓰지 않으면 사용할 수 있습니다.start-process "Z:\sync.bat"
수행하려는 작업의 경로입니다. 제 예에서는 3-4 개의 백업 작업 명령 줄을 시작하는 배치 파일을 USB 드라이브에 만들었습니다.
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"프로세스를 종료 할 수 있습니다.
유일한 단점은 드라이브가 이미 연결된 상태에서 컴퓨터를 부팅 할 때 아무것도 실행되지 않는다는 것입니다. (처음에 첫 번째 검사를 수행하도록 스크립트를 변경할 수 있지만 오늘은 충분했습니다!)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다