使用 New-ScheduledTaskTrigger 注册计划任务以在事件 ID 上触发

Roa*_*oan 3 powershell powershell-5.0

在 Windows 事件 ID 上使用 New-ScheduledTaskTrigger 注册 ScheduledTask

堆栈溢出的用户大家好。MSDN 和 Google 都没有产生结果...
我通过 Powershell 脚本配置了几个计划任务。计划任务设置为在特定时间运行。
这一切都很好。但我需要配置另一个计划任务,该任务在 Windows 事件记录器中记录某个事件 ID 时运行。
我当然可以手动设置它,但我希望它作为我的自动化脚本的一部分。

这是我迄今为止用于计划任务的代码,我需要替换$Trigger= New-ScheduledTaskTrigger -At 4:00am -Daily部分:

        Copy-Item "\\networkDrive\Backups\scripts\Reset-Sessions.ps1" "c:\scripts\Reset-Sessions.ps1"
        $Trigger= New-ScheduledTaskTrigger -At 4:00am -Daily
        $User= 'Nt Authority\System'
        $Action= New-ScheduledTaskAction -Execute "Powershell.exe" -Argument "-executionpolicy bypass -File c:\scripts\Reset-Sessions.ps1"
        Register-ScheduledTask -TaskName "Reset-Sessions" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest -Force
Run Code Online (Sandbox Code Playgroud)

为了在线目的,我更改了一些目录和文件名。

如果有人可以引导我走向正确的方向或帮助举例,我将不胜感激。
我宁愿只更改 $Trigger 部分而不重写整个脚本,但如果不可能的话我会理解。

我使用 Powershell 版本 5.1。

NiK*_*iZe 5

有了这个答案作为基础和一些额外的帮助,我能够构建这个脚本

    $taskname="Reset-Sessions"
    # delete existing task if it exists
    Get-ScheduledTask -TaskName $taskname -ErrorAction SilentlyContinue |  Unregister-ScheduledTask -Confirm:$false
    # get target script based on current script root
    $scriptPath=[System.IO.Path]::Combine($PSScriptRoot, "Reset-Sessions.ps1")
    # create list of triggers, and add logon trigger
    $triggers = @()
    $triggers += New-ScheduledTaskTrigger -AtLogOn

    # create TaskEventTrigger, use your own value in Subscription
    $CIMTriggerClass = Get-CimClass -ClassName MSFT_TaskEventTrigger -Namespace Root/Microsoft/Windows/TaskScheduler:MSFT_TaskEventTrigger
    $trigger = New-CimInstance -CimClass $CIMTriggerClass -ClientOnly
    $trigger.Subscription = 
@"
<QueryList><Query Id="0" Path="Microsoft-Windows-NetworkProfile/Operational"><Select Path="Microsoft-Windows-NetworkProfile/Operational">*[System[(EventID=4004)]]</Select></Query></QueryList>
"@
    $trigger.Enabled = $True 
    $triggers += $trigger

    # create task
    $User='Nt Authority\System'
    $Action=New-ScheduledTaskAction -Execute "Powershell.exe" -Argument "-ExecutionPolicy bypass -File $scriptPath"
    Register-ScheduledTask -TaskName $taskname -Trigger $triggers -User $User -Action $Action -RunLevel Highest -Force
Run Code Online (Sandbox Code Playgroud)

主要的魔力是用来Get-CimClass获取正确的实例,然后SubscriptionGet-ScheduledTask "Tmp" | Select -ExpandProperty Triggers