使用 New-ScheduledTaskTrigger 注册计划任务以触发事件 ID
Register scheduled task with New-ScheduledTaskTrigger to trigger on event ID
在 Windows 事件 ID
上使用 New-ScheduledTaskTrigger 注册计划任务
您好 Stack-overflow 用户。 MSDN 和 Google 都没有结果...
我通过 Powershell 脚本配置了几个计划任务。计划任务在特定时间设置为运行。
这一切都很好。但是我需要配置另一个计划任务,当某个事件 ID 记录在 Windows 事件记录器中时 运行。
我当然可以手动设置它,但我希望它成为我的自动化脚本的一部分。
这是我到目前为止的计划任务代码,我需要替换 $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
我更改了一些目录和文件名以供在线使用。
如果有人能引导我走向正确的方向或提供示例,我将不胜感激。
我宁愿只更改 $Trigger 部分而不是重写整个脚本,但如果不可能的话我会理解。
我使用 Powershell 5.1 版。
步骤 1:
转到eventvwr,然后根据eventid 创建一个新的计划任务。
步骤 2:
打开powershell,然后显示计划任务,看看是怎么写的。
步骤 3:
附加并在你的脚本中测试它。
我创建了一个临时的 Get-ScheduledTask 和 运行 下面一行:您所要做的就是替换订阅以满足您的要求。
$A = (Get-ScheduledTask "Tmp" | select -ExpandProperty Triggers)
这是我最后使用的另一种方法来解决问题:
如果您尝试在 Server 2012 之前的 Windows 服务器上执行此操作,那么您可能没有 Get-ScheduledTask 和 New-ScheduledTaskTrigger 和 Register-ScheduledTask 模块在您的 Windows 系统上。这意味着我原来问题中的脚本和接受的答案将不起作用。
- 解决方法是手动创建所需的计划任务,然后将其导出到 xml 文件。如果你喜欢,你可以编辑这个文件,它是普通的纯文本xml。
- 然后将您的脚本和 xml 文件放在同一目录中。
- 更改您的脚本以与旧版本的 Powershell 兼容以导入 xml 文件。
schtasks /create /tn "Reset-Sessions" /xml "c:\scripts\Reset-Sessions.xml"
您的新计划任务现在应该已注册并处于活动状态。
使用 as a base and some additional help 我能够构建这个脚本
$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
主要的魔法是使用Get-CimClass
得到正确的实例,然后从Get-ScheduledTask "Tmp" | Select -ExpandProperty Triggers
填充Subscription
在 Windows 事件 ID
上使用 New-ScheduledTaskTrigger 注册计划任务您好 Stack-overflow 用户。 MSDN 和 Google 都没有结果...
我通过 Powershell 脚本配置了几个计划任务。计划任务在特定时间设置为运行。
这一切都很好。但是我需要配置另一个计划任务,当某个事件 ID 记录在 Windows 事件记录器中时 运行。
我当然可以手动设置它,但我希望它成为我的自动化脚本的一部分。
这是我到目前为止的计划任务代码,我需要替换 $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
我更改了一些目录和文件名以供在线使用。
如果有人能引导我走向正确的方向或提供示例,我将不胜感激。
我宁愿只更改 $Trigger 部分而不是重写整个脚本,但如果不可能的话我会理解。
我使用 Powershell 5.1 版。
步骤 1: 转到eventvwr,然后根据eventid 创建一个新的计划任务。
步骤 2: 打开powershell,然后显示计划任务,看看是怎么写的。
步骤 3: 附加并在你的脚本中测试它。
我创建了一个临时的 Get-ScheduledTask 和 运行 下面一行:您所要做的就是替换订阅以满足您的要求。
$A = (Get-ScheduledTask "Tmp" | select -ExpandProperty Triggers)
这是我最后使用的另一种方法来解决问题:
如果您尝试在 Server 2012 之前的 Windows 服务器上执行此操作,那么您可能没有 Get-ScheduledTask 和 New-ScheduledTaskTrigger 和 Register-ScheduledTask 模块在您的 Windows 系统上。这意味着我原来问题中的脚本和接受的答案将不起作用。
- 解决方法是手动创建所需的计划任务,然后将其导出到 xml 文件。如果你喜欢,你可以编辑这个文件,它是普通的纯文本xml。
- 然后将您的脚本和 xml 文件放在同一目录中。
- 更改您的脚本以与旧版本的 Powershell 兼容以导入 xml 文件。
schtasks /create /tn "Reset-Sessions" /xml "c:\scripts\Reset-Sessions.xml"
您的新计划任务现在应该已注册并处于活动状态。
使用
$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
主要的魔法是使用Get-CimClass
得到正确的实例,然后从Get-ScheduledTask "Tmp" | Select -ExpandProperty Triggers
Subscription