impact/Add-ImpactLogonTask.ps1
function Add-ImpactLogonTask { # This function is used for building Scheduled Tasks. At minimum, it requires the filename of the script and the content encoded as base64. param ( [parameter (Mandatory=$true)] [string] $Name, [parameter (Mandatory=$true)] [string] $Command, [parameter (Mandatory=$false)] [string] $Argument, [parameter (Mandatory=$false)] [string] $WorkingDir, [parameter (Mandatory=$false)] [switch] $OnLogon=$True, [parameter (Mandatory=$false)] [switch] $OnUnlock=$False, [parameter (Mandatory=$false)] [switch] $CommandIsImpactPS=$False ) If (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { If (($OnLogon -eq $false) -and ($OnUnlock -eq $false)) { Write-Error "No Triggers Defined" Return } If ($CommandIsImpactPS) { $LatestImpactPSModule = (Get-Module ImpactPartnership-PS -ListAvailable | Where-Object -Property ModuleBase -Like "$env:ProgramFiles\WindowsPowerShell\Modules\ImpactPartnership-PS\*" |Sort-Object -Descending -Property Version | Select -First 1).ModuleBase $PSRun = "$LatestImpactPSModule\lib\PSRun.vbs" $Argument = "`"$PSRun`" `"$Command`"" $Command = "C:\WINDOWS\System32\wscript.exe" $WorkingDir = "$LatestImpactPSModule\lib" } # Build the Task $TaskActionParameters = @{ Execute = "$Command" } If ($Argument -ne "") { $TaskActionParameters += @{ Argument = "$Argument" } } If ($WorkingDir -ne "") { $TaskActionParameters += @{ WorkingDirectory = "$WorkingDir" } } $TaskAction = New-ScheduledTaskAction @TaskActionParameters $TaskTriggers = @() If ($OnLogon) {$TaskTriggers += $(New-ScheduledTaskTrigger -AtLogon)} If ($OnUnlock) { $stateChangeTrigger = Get-CimClass ` -Namespace ROOT\Microsoft\Windows\TaskScheduler ` -ClassName MSFT_TaskSessionStateChangeTrigger $TaskTriggers += $(New-CimInstance ` -CimClass $stateChangeTrigger ` -Property @{ StateChange = 8 # TASK_SESSION_STATE_CHANGE_TYPE.TASK_SESSION_UNLOCK (taskschd.h) } ` -ClientOnly) } $TaskPrincipal = New-ScheduledTaskPrincipal -GroupId S-1-5-32-545 -Id "User" -RunLevel Limited # Register the task Register-ScheduledTask -Action $TaskAction -Trigger $TaskTriggers -Principal $TaskPrincipal -TaskName "$Name" -TaskPath "Impact Tasks" -Force } else { Write-Host "This Impact Partnership command requires elevation." -ForegroundColor Red } } |