|
|
게시됨 2017. 1. 17. 오후 5:05:59
|
|
|
|

저는 .net WebClient 객체를 사용해 파일 다운로드를 구현합니다.
그리고 PowerShell을 사용해 DownloadProgressChanged 이벤트를 구독하세요,
다운로드 진행 바를 업데이트했습니다.
구독 이벤트는 PowerShell의 Register-ObjectEvent를 사용하며, 소개 문서는 다음과 같습니다:
초록 Microsoft .NET Framework 객체에서 생성되는 이벤트에 구독합니다.
문법 Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward ] [-MaxTriggerCount<Int32>] [-MessageData <PSObject>] [-지원이벤트 ] [<CommonParameters>]
입력 전혀 없습니다 Register-ObjectEvent .
출력 시스템.관리.자동화.PSEventJob. 이 명령어는 출력을 생성하지 않습니다.
주석 * 이벤트, 이벤트 구독, 이벤트 대기열은 현재 세션에만 존재합니다. 현재 세션을 종료하면 이벤트 대기열이 폐기되고 이벤트 구독이 취소됩니다.
본보기 예시 1: 새로운 프로세스가 시작될 때 이벤트 구독 PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query PS C:\>Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
이 예시는 새로운 프로세스가 시작될 때 생성된 이벤트에 응답합니다.
이 명령어는 ManagementEventWatcher 객체를 사용하여 EventArrived 이벤트를 가져옵니다. 쿼리 객체는 이벤트가 Win32_Process 클래스의 인스턴스 생성 이벤트임을 지정합니다. 예시 2: 이벤트에 대응할 행동을 지정합니다 PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $query PS C:\>$Action = { New-Event "PowerShell.ProcessCreated" -Sender $Sender -EventArguments $EventArgs.NewEvent.TargetInstance } PS C:\>register-objectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action ID 이름 상태 HasMoreData Location 명령어 -- ---- ----- ----------- -------- ------- 2 422cfe5a-65e... 트루 뉴 이벤트 "PowerShe...
이 예시는 이벤트에 대응하기 위한 행동을 명시하는 방법을 보여줍니다. 액션을 지정하면 발생한 이벤트는 이벤트 큐에 추가되지 않습니다. 대신, 행동은 사건에 반응합니다.
이 예시에서, 새로운 프로세스가 시작되었음을 나타내는 인스턴스 생성 이벤트가 발생하면, 새로운 ProcessCreated 이벤트가 발생합니다.
이 액션은 $Sender 및 $EventArgs 자동 변수를 사용하며, 이는 이벤트 액션에만 사용됩니다.
Register-ObjectEvent 명령어는 해당 작업을 나타내는 작업 객체를 반환하며, 이 작업은 백그라운드 작업으로 실행됩니다. Get-Job, Receive-Job 같은 Job cmdlet을 사용해 백그라운드 작업을 관리할 수 있습니다.
자세한 내용은 about_Jobs를 참조하세요. 예시 3: 원격 컴퓨터에서 객체 이벤트 구독 PS C:\>$S = New-PSSession -ComputerName "Server01, Server02" PS C:\> Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1 PS C:\> Invoke-Command -Session $S { get-event }# ProcessCreationEvent.ps1function Enable-ProcessCreationEvent{ $Query = New-Object System.Management.WqlEventQuery "__ 인스턴스생성이벤트", ' (새로운 객체 타임스팬 0,0,1), ' "TargetInstance isa 'Win32_Process'" $ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" Register-ObjectEvent -입력 $ProcessWatcher -EventName "EventArrived" ' -SourceIdentifier $Identifier -MessageData "Test" -forward}EnableProcessCreationEvent
이 예시는 원격 컴퓨터에서 객체 이벤트에 구독하는 방법을 보여줍니다.
첫 번째 명령어는 두 대의 원격 컴퓨터에서 PSSessions를 생성하고 $S 변수에 저장합니다.
두 번째 명령어는 Invoke-Command cmdlet의 FilePath 매개변수를 사용하여 각 PSSessions in $S에서 ProcessCreationEvent.ps1 스크립트를 실행합니다.
스크립트에는 ManagementEventWatcher 객체와 EventArrived를 통해 Win32_Process 객체의 인스턴스 생성 이벤트에 구독하는 Register-ObjectEvent 명령어가 포함되어 있습니다 행사. 예시 4: PSEventJob 객체의 동적 모듈 사용 PS C:\>$Timer = 새로운 객체 타이머.타이머 PS C:\>$Timer.간격 = 500 PS C:\>$Job = Register-ObjectEvent -InputObject $Timer -EventName 경과 -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100} PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob 추신 C:\>$Job | Format-List -Property * 상태: 러닝모듈 : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 상태 메시지 : HasMoreData : 맞아요 위치 : 명령어 : $Random= Get-Random -Min 0 -Max 100 JobStateInfo : 달리기 완료 : System.Threading.ManualResetEvent 인스턴스ID : 88944290-133d-4b44-8752-f901bd8012e2 ID : 1 이름 : 타이머.랜덤 ChildJobs : {}... PS C:\>$Timer.Enabled = $True PS C:\>& $Job.module {$Random}60 PS C:\>& $Job.module {$Random}47
이 예시는 이벤트 등록에 Action을 포함할 때 생성되는 PSEventJob 객체의 동적 모듈을 어떻게 사용하는지 보여줍니다.
첫 번째 명령어는 New-Object cmdlet을 사용하여 타이머 객체를 생성합니다. 두 번째 명령어는 타이머의 간격을 500(밀리초)으로 설정합니다.
세 번째 명령어는 Register-ObjectEvent cmdlet을 사용하여 타이머 객체의 경과 이벤트를 등록합니다. 명령어에는 이벤트를 처리하는 액션이 포함되어 있습니다. 타이머 간격이 지나면 이벤트가 발생하고 액션 내 명령이 실행됩니다. 이 경우 Get-Random cmdlet은 0에서 100 사이의 난수를 생성하여 $Randomvariable에 저장합니다.
Register-ObjectEvent 명령어에서 Action 매개변수를 사용하면 해당 동작을 나타내는 PSEventJob 객체를 반환합니다. 이 명령어는 작업 객체를 $Job 변수에 저장합니다.
Register-ObjectEvent 명령어가 반환하는 PSEventJob 객체는 이벤트 구독자의 Action 속성에서도 사용할 수 있습니다. 자세한 내용은 Get-EventSubscriber를 참조하세요.
네 번째 명령어는 $Job 변수에 PSEventJob 객체가 포함되어 있음을 보여줍니다. 다섯 번째 명령어는 Format-List cmdlet을 사용하여 PSEventJob 객체의 모든 속성을 리스트에 표시합니다.
PSEventJob에는 동작을 구현하는 동적 스크립트 모듈이 포함된 모듈 속성이 있습니다.
여섯 번째 명령어가 타이머를 활성화합니다.
나머지 명령어들은 호출 연산자(&)를 사용하여 모듈에서 명령을 호출하고 $Random 변수의 값을 표시합니다. 호출 연산자를 사용해 모듈 내 모든 명령어를 호출할 수 있으며, 내보내지 않은 명령도 포함됩니다. 이 경우, 명령어는 경과 이벤트가 발생했을 때 생성되는 무작위 수를 보여줍니다.
모듈에 대한 자세한 내용은 about_Modules를 참조하세요.
관련 링크 온라인 버전: http://go.microsoft.com/fwlink/?LinkId=821845 이벤트를 얻어 신규 사건 레지스터-엔진이벤트 Register-WmiEvent 제거 이벤트 이벤트 취소 대기 이벤트 마지막으로 PS 소스 코드를 첨부하세요:
관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다 회답
|
이전의:단일 줄 주석, 다중 줄 주석, 블록 주석에 대한 PowerShell 메서드다음:PowerShell은 WebClient를 이용해 파일을 다운로드합니다
|