目次:


シリーズの前の記事を必ず読んでください:
- PowerShellでWindowsを自動化する方法を学ぶ
- PowerShellでコマンドレットを使用する方法の学習
- PowerShellでオブジェクトを使用する方法を学習する
- PowerShellでの書式設定、フィルタリング、および比較の学習
- PowerShellでRemotingを使用する方法を学ぶ
- PowerShellを使用してコンピュータ情報を取得する
- PowerShellでコレクションを操作する
そして、一週間中、残りのシリーズのために調整しておいてください。
バックグラウンドジョブ
今まで私がPowerShellの中で示してきたことはすべて同期していました。つまり、シェルに何かを入力して、コマンドが実行を終了するまでは実際にはあまりできません。これはバックグラウンドジョブが入ってくる場所です。バックグラウンドを開始するには、スクリプトブロックをStart-Jobコマンドレットに渡します。
Start-Job –Name GetFileList –Scriptblock {Get-ChildItem C: –Recurse}



Get-Job –Name GetFileList | Stop-Job

Get-Job –Name GetFileList | Receive-Job –Keep

Get-Job –Name GetFileList | Remove-Job
これにより、Get-Jobによって返されるジョブの一覧から削除されます。

リモートジョブ
いくつかのレッスン前に、Invoke-Commandを使用してリモートマシンでリモート処理を使用してPowerShellコマンドを実行する方法を見てきましたが、Invoke-Commandを使用してバックグラウンドでリモートジョブを開始できることも知っていましたか?これを行うには、単にコマンドの最後に-AsJobパラメータを追加します。
Invoke-Command -ComputerName Flash,Viper -Credential administrator -ScriptBlock {gci} –AsJob




Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper

Get-Job -Id 3 –IncludeChildJob

Get-Job -Id 5 | Receive-Job –Keep

WMIジョブ
WMIジョブは、リモートジョブとほぼ同じです。このため、-AsJobパラメータのみをGet-WmiObjectコマンドレットに追加する必要があります。


スケジュールされたジョブ
最後に見た3種類のジョブは永続的なものではなく、現在のセッションでのみ使用可能です。基本的には、ジョブを開始して別のPowerShellコンソールを開いてGet-Jobを実行すると、ジョブは表示されません。しかし、あなたが仕事を蹴ったコンソールに戻ってくると、そのステータスを見ることができます。これは、スケジュールされたジョブとは対照的です。 永続的です 。基本的には、スケジュールされたジョブはスケジュールで実行されるスクリプトブロックです。過去には、Windowsタスクスケジューラを使用して同じ効果が達成されていた可能性があります。これは実際にボンネットの下で起こっていることです。新しいスケジュールされたジョブを作成するために、以下を実行します。
Register-ScheduledJob -Name GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
そのコマンドにはかなり多くのことがありますので、それを分解しましょう。
- まず、Scheduled JobにGetEventLogsという名前を付けます。
- その後トリガされると、指定されたスクリプトブロックの内容を実行し、基本的にセキュリティイベントログの最新の100エントリを取得するようにします。
- 次に、トリガーを指定します。トリガ・パラメータはトリガ・オブジェクトを入力として使用するため、括弧内のコマンドを使用して毎日午後5時にトリガするトリガを生成します。
- イベントログを扱っているので、新しいScheduledJobOptionオブジェクトを作成し、それをScheduledJobOptionパラメータに渡すことで指定できる管理者として実行する必要があります。

Get-ScheduledJob

それがすべてです。