PowerShell スクリプト自動化でタスクを効率化する方法
PowerShellは、Windowsマシン上でプロセスの制御やタスクの自動化など、様々な用途に使える非常に強力なツールです。バックアップ、アップデート、あるいは日常的なメンテナンスなど、スクリプトを自動実行したいのであれば、PowerShellで十分です。しかし、Windowsには実行ポリシーと呼ばれるセキュリティ対策があり、これはいわば門番のような役割を果たし、署名されていないファイルやインターネット上のスクリプトファイルは、ユーザーが指示しない限り実行できないようにブロックします。これは特に、毎回「はい」をクリックしたり、手動で設定を変更したりせずに自動化を実行したいだけであれば、面倒な作業となる可能性があります。
つまり、まず実行ポリシーを下げてからスケジュールを設定する必要があります。そうしないと、スクリプトが実行されなかったりブロックされたりして、非常にイライラすることになります。さらに、これらのスクリプトを自動化する方法はいくつかあります。技術に詳しくない方はタスクスケジューラのGUIを使うか、コマンドレットに慣れている方はPowerShell自体を使うことができます。いずれにしても、これらの手順に従えば、手間をかけずに(少なくとも手間を省くことができます)自動的にスクリプトを実行できるようになります。ただし、セキュリティポリシーによっては、管理者権限や追加の権限が必要になる場合があることに注意してください。
PowerShell スクリプトを自動化する方法
スクリプトを実行できるようにまず実行ポリシーを修正します
多くの場合、スクリプトの実行をブロックしているのはこの設定です。少し奇妙に思えますが、実行ポリシーが「制限」に設定されている場合(通常はデフォルトで設定されています)、PowerShellは署名されていないスクリプトを実行しません。そのため、制御された方法でセキュリティを緩和する必要があります。理想的には、ユーザースコープのみで緩和します。これを行うには、管理者権限でPowerShellを開き(PowerShellを検索し、右クリックして「管理者として実行」を選択)、次のコマンドを入力します。
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
これにより、署名されたスクリプトやローカルで作成されたスクリプトを実行できます。一部のマシンでは、ポリシーを変更してもよいかどうかを確認するプロンプトが表示されますが、「はい」と答えてください。スクリプトがインターネットや信頼できないソースから取得されている場合は、 に設定する必要がありますUnrestricted。以下のコマンドを使用してください。
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
ここで少し注意が必要です。Windowsは当然のことながら、必要以上に厳しく設定する必要があるからです。ただし、この設定によりUnrestrictedすべてのスクリプトの実行が許可されるため、注意しないとセキュリティリスクにつながる可能性があります。
方法1: タスクスケジューラを使用する
これはほとんどの人にとって最も簡単な方法です。特に、クリックして忘れてしまいたい場合に最適です。ポイントアンドクリックで実行でき、スクリプトは必要ありません。「プログラムから実行」を開き、 「taskschd.mscWin + R」と入力してください。これがタスクスケジューラへの入り口です。次に、 「タスクスケジューラライブラリ」を右クリックし、 「基本タスクの作成」または「タスクの作成」を選択して、その他のオプションを表示します。
- タスクに名前を付け、簡単な説明(「PowerShellスクリプトの自動実行」など)を入力します。「全般」タブで、必要に応じてログインの有無にかかわらず実行されるように設定します。スクリプトの実行に管理者権限が必要な場合は、 「最上位の権限で実行」を選択する必要があります(通常は管理者権限が必要です)。
- トリガーを設定します。実行したいタイミングです。毎日、起動時、ログオン時など、都合の良いタイミングで実行してください。「新規」をクリックし、スケジュールを選択して「OK」をクリックします。
- 次に、「アクション」タブに移動し、「新規」をクリックして、「プログラムの開始」を選択します。「プログラム/スクリプト」ボックスに と入力し、「引数の追加」
powershellに と入力します。例:。パスとファイル名が正しいことを確認してください。正しくないと実行されません。-File "full\path\to\your\script.ps1"-File "D:\Scripts\backup.ps1" - 必要に応じて条件や設定などの他の設定を調整し、「OK」をクリックします。完了です。
これでほぼ完了です。この設定で、スクリプトはスケジュールされた間隔、または特定のトリガーで実行されます。このように設定すれば、手動で実行する必要も、忘れることもなく、自動化が完了します。
方法2: PowerShell経由で直接自動化する
スクリプト作成に興味があり、PowerShell 自体ですべてを行いたいなら、この方法が最適です。少し複雑ですが、より柔軟で繰り返し実行できます。まず、トリガーオブジェクトを作成する必要があります。
$Trigger = New-ScheduledTaskTrigger -Once -At 4am
これにより、タスクは午前4時に1回実行されます。トリガーを変更する-Onceには-Daily、 または を-AtStartup変更します。例えば、3日ごとに毎日実行する場合は、次のようにします。
$Trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 3 -At 9am
次に、トリガーが発動したときに実行されるアクションを定義します。ここでNew-ScheduledTaskAction次の要素が重要になります。
$Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File `"`"
` を置き換えることを忘れないでください
$User = "YourDomain\YourUser"
最後に、 でタスクを登録しますRegister-ScheduledTask。例:
Register-ScheduledTask -TaskName "My PowerShell Auto" -Trigger $Trigger -User $User -Action $Action
この方法を使えば、PowerShell内ですべてを完全に自動化できます。これは、多くのカスタマイズやセットアップスクリプトの自動化を行う場合に便利です。ただし、これらのコマンドの一部、特に昇格された権限で実行されるタスクを作成する場合は、管理者権限が必要になる場合がありますので、ご注意ください。
あるセットアップでは、最初の段階で全てが失敗しました。おそらくセキュリティか権限の問題でしょう。再起動するか、PowerShellを管理者として実行したら、問題なく動作しました。場合によっては、ユーザー権限やポリシーをいじってみて初めて、最適な状態になることもあります。
これらをすべて設定しておけば、PowerShell スクリプトを毎日、起動時、ログオン時など、スケジュール通りに実行するのは非常に簡単です。追加のクリック操作は一切不要です。少し手間をかけるだけで、あとはスムーズに進みそうです。