Show-Command
コマンドレットを試し、モジュールの自動読み込みを実行し、簡略化された言語構文を見てセッションファイルを構成し、同時に権限の一部をセッションユーザーに委任しました。
スケジュールされたジョブ
実際、PowerShellタスクは同じWindowsタスクであり、同じ方法でスケジュールに従って実行することも、トリガーが起動されたときに開始したり、他のすべてのタスクと同様に停止または中断したりすることもできます。唯一の違いは、PowerShellから作成され、PowerShellスクリプトを実行するように特別に設計されていることです。
最初にタスクを作成しましょう。たとえば、次のスクリプトの実行で表現しましょう。
(Get-Date).ToString() + " - " | Out-File "C:\logfile.txt" -Append for ($i = 3; $i -lt 100; $i++) { $flag = $true for ($j = 2; $j -lt $i; $j++) { if ($i % $j -eq 0) {$flag = $false} } if ($flag) {$i} } (Get-Date).ToString() + " - " | Out-File "C:\logfile.txt" -Append
はっきりしていない場合、内部のブロックはエラトステネスの古典的なふるいではありません。スクリプトは3..100の範囲の素数を見つけます。 スクリプトのテキストをファイル
C:\ScheduledJob.ps1
慎重に保存します。
そして、計画されたタスクを作成します。
$trigger = New-JobTrigger -Once -at 16:39 $job = Register-ScheduledJob -Name Job -FilePath "C:\ScheduledJob.ps1" -Trigger $trigger
タスクは、
Task Scheduler Library/Microsoft/Windows/Powershell/ScheduledJobs
ブランチの
Task Scheduler Library/Microsoft/Windows/Powershell/ScheduledJobs
。

16:39の開始を待って、
logfile.txt
行が
logfile.txt
。
24.06.2012 16:39:03 -
24.06.2012 16:39:04 -
そして今、最も興味深い-これは何のためですか? 結局、この方法でタスクをサドルすることが可能でした:少なくともスクリプトではなく、少なくとも何でも。 しかし、PowerShellプログラムが素数を示したことを覚えていますか? 別のPowerShellウィンドウを起動して実行します。
Import-Module PSScheduledJob Get-Job Receive-Job -Name Job
そのような写真が得られます。

タスクが完了し、何らかの結果が得られ、この結果はPowerShellビンに正常に保存されました。次に、目的のためにこれらのビンからこの結果を抽出するだけで、実行と抽出の間隔で再開でき、他のタスクを実行でき、結果は消えません。 エラーを含むタスクの進行状況を追跡できるため、これは実際には小さなことです。たとえば、エラトステネスのふるいを
1/0
行に置き換えることができ、
Receive-Job
後に、赤いフォントで書か
Attempted to divide by zero
が表示
Attempted to divide by zero
目を喜ばせざるを得ない。 最後に、言及したPowerShellビンがある場所のアドレスを共有します:
%userprofile%\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
には、一連のフォルダー、xmlファイル、および入力パラメーターと出力パラメーターを持つ識別子があります。
堅牢なセッション
私が理解しているように、このアイデアはリモートデスクトップサービスから得たものです。確立されたリモートセッションは、接続が失われてもしばらく保持され、その場合は別のマシンから復元できます。 これがどのように行われるかを見てみましょう、
w2012cl1
ます:
New-PSSession -ComputerName w2012dc1 -Name RobustSession Enter-PSSession -Name RobustSession $x="abcdef123"
したがって、セッションに入り、変数
$x
を
abcdef123
設定します。この変数を使用して、セッションかどうか、セッションデータが失われているかどうかを確認します。
次に、仮想マシンのネットワークカードの設定で「ああ!」を実行します。

そして、再接続を試みる4分間のPowerShell:

マップ設定で接続を返すと、PowerShellセッションが復元されます。

これがすべてのトリックではありません。ここで、あるマシンで作成されたセッションを別のマシンからインターセプトします。
w2012cl1
、アクション
w2012cl1
実行します。
$icptsess = New-PSSession -ComputerName w2012dc1 -Name InterceptedSession Invoke-Command -Session $icptsess -ScriptBlock {$x="abcdef123"} # Disconnect-PSSession -Name InterceptedSession

セッションが切断状態になったという事実に注意を喚起し、別のマシン
w2012dc1
から参加できるようになり
w2012dc1
(はい、ここではセッションが同じマシン上にあるため、実験があまりきれいではないことがわかりますが、コマンドを使用します削除されたかのように):
$icptsess = Connect-PSSession -ComputerName w2012dc1 -Name InterceptedSession Invoke-Command -Session $icptsess -ScriptBlock {$x}

そして、別のマシンのセッション内に変数を保存します。
Invoke-Command
コマンドレットに注意してください。セッション内でスクリプトブロックを送信するためだけに使用しましたが、理論的には
Enter-PSSession
を使用
Enter-PSSession
てセッションに入り、最初の例とまったく同じようにセッション内の値に変数を割り当てることができます。
私はすべてを2つの部分に収めたかったのですが、PowerShellの革新の次のトピックである「ワークフロー」または「ワークフロー」はそれ自体が非常に膨大であることが判明したため、新しいPowerShell ISEシェルとともに第3部で個別に説明します。 ボーナスとして、この場合、以前に発表されていないもの、つまりWeb経由でのPowerShellへのアクセスを追加します。ブラウザーにコマンドを直接入力する方法を示します。