Private/Wissen/B_Basic/B44_Task.ps1
<#
# (Scheduled) Job's und (Scheduled) Task # 'Langanhaltende' Aufgaben zeigesteuert und paarallel auszulagern. - **Hashtags** Scheduled Task Job Parallel - **Version** 2020.05.22 #> #region Hintergrundaufgabe (Job) # ! Ein Job kann einen Befehl oder Ausdruck im Hintergrund ausführen ohne mit der aktuellen Sitzung zu interagieren zu müssen. # READ Weiterführende und Nachschlage-Informationen: Get-Help -Name 'about_Jobs' -ShowWindow Get-Help -Name 'about_Job_Details' -ShowWindow Get-Command -Noun 'Job' -Module 'Microsoft.PowerShell.Core' # ! Beispiele: Start-Job -Name 'MyJob' -ScriptBlock { Get-Process | ForEach-Object -Process { "Bearbeite $($_.Name) Prozess!" | Write-Warning ; Start-Sleep -Milliseconds 500 } } Get-Job -Name 'MyJob' Receive-Job -Name 'MyJob' Receive-Job -Name 'MyJob' -Keep Stop-Job -Name 'MyJob' Wait-Job -Name 'MyJob' Remove-Job -Name 'MyJob' # TIPP - Eininge Cmdlets bieten eine direkt Unterstützung von Jobs an: Get-Help -Name '*' -Parameter 'AsJob' #endregion #region Zeitgesteuerte Hintergrundaufgaben (PSScheduledJob) # ! Admin-Rechte werden benötigt # READ Weiterführende und Nachschlage-Informationen: Get-Help -Name 'about_Scheduled_Jobs' -ShowWindow Get-Help -Name 'about_Scheduled_Jobs_Advanced' -ShowWindow Get-Help -Name 'about_Scheduled_Jobs_Basics' -ShowWindow Get-Help -Name 'about_Scheduled_Jobs_Troubleshooting' -ShowWindow Get-Command -Module 'PSScheduledJob' Schtasks.exe # ! Einrichten: $trigger = New-JobTrigger -Daily -At '03:00' $options = New-ScheduledJobOption -StartIfOnBattery Register-ScheduledJob -Name 'MyScheduledJob' -ScriptBlock { Get-Process } -Trigger $trigger -ScheduledJobOption $options # ! Überwachen: Get-ScheduledJob Get-JobTrigger -Name 'MyScheduledJob' # ! Verwalten: Get-ScheduledJob -Name 'MyScheduledJob' | Get-ScheduledJobOption | Set-ScheduledJobOption -ContinueIfGoingOnBattery -PassThru # ! Löschen: Unregister-ScheduledJob -Name 'MyScheduledJob' #endregion #region Windows Aufgabenplanung (ScheduledTasks) # READ Weiterführende und Nachschlage-Informationen: Get-Command -Module 'ScheduledTasks' # ! Scheduled-Task einrichten: $action = New-ScheduledTaskAction –Execute 'notepad.exe' $trigger = New-ScheduledTaskTrigger -At '2019-10-10 12:25' -Once $principal = New-ScheduledTaskPrincipal -UserId 'Attila' -LogonType Interactive $settings = New-ScheduledTaskSettingsSet -WakeToRun $task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings $task | Register-ScheduledTask -TaskName '_Test' # ! Status eines scheduled Task abfragen: Get-ScheduledTask -TaskName '_Test' Get-ScheduledTaskInfo -TaskName '_Test' # ! Scheduled Task wieder entfernen: Unregister-ScheduledTask -TaskName '_Test' -Confirm:$false # ! Scheduled Task exportieren bzw. importieren: Export-ScheduledTask -TaskName '_Test' -TaskPath . | Out-File -FilePath 'C:\Temp\_Test.xml' Register-ScheduledTask -Xml (Get-Content 'C:\Temp\_Test.xml' | Out-String) -TaskName '_Test' -TaskPath '\TASK-PATH-TASKSCHEDULER\' -User 'COMPUTER-NAME\USER-NAME' –Force #endregion #region Parallele Verarbeitung # ! Die parallele Verarbeitung mittels ForEach-Object -Parallel ist seit der PowerShell 7 möglich: Get-Help -Name 'ForEach-Object' -ShowWindow # ! Langsam: 1..8 | ForEach-Object -Process { "Verarbeite Schritt $_" | Write-Warning ; Start-Sleep -Seconds 1 } # TIPP Schnell: 1..8 | ForEach-Object -Parallel { "Verarbeite Schritt $_" | Write-Warning ; Start-Sleep -Seconds 1 } -ThrottleLimit 4 #endregion # TODO QUIZ - https://attilakrick.com/schlagwort/powershell-jobs-und-tasks/ <# TODO ÜBUNG 1. Erweitern Sie Ihr Betriebssystem um die PowerShell 7. 2. Stellen Sie über Statusleiste, Visual Studio Code auf PowerShell 7 um. 3. Führen Sie die folgenden Befehlszeilen abwechselnd aus: '127.0.0.1', 'localhost' | ForEach-Object -Process { $_ | Test-Connection | Select-Object -Property 'Destination', 'Status' } '127.0.0.1', 'localhost' | ForEach-Object -Parallel { $_ | Test-Connection | Select-Object -Property 'Destination', 'Status' } und messen Sie die Dauer der Ausführung mittels Measure-Command. 4. Erklären Sie die Messergebnisse. #> |