こんにちわ。ますのです。
最近はPowerShellと向き合う時間が多くなっている今日この頃。
リモートワークでドメインユーザの管理をしたり、FAXの受信をPDF化して定期削除したいなど、細かなものを実装してほしいと依頼が来るであります。
壊しても構わんのでありますな?
はい。PowerShellで簡単な処理を作るのですが、タスクスケジューラに登録する時にいつもコマンドを忘れるのでメモ代わりに残していきます。
タスクスケジューラにPowerShell「ps1ファイル」を登録する手順
まずは社内SEみんな大好きタスクスケジューラを起動します。
登録方法は各自あると思いますが我流にて紹介。
①「タスクスケジューラライブラリ」を右クリック>「タスクの作成」をクリック
②タブ「操作」>新規>新しい操作画面で下記の内容を入力し「OK」で登録
プログラム/スクリプト(P) | %Systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe |
引数の追加(オプション)(A) | -ExecutionPolicy Bypass (実行ファイルパス)\実行ファイル名.ps1 |
開始(オプション)(T): | (空欄) |
–ExecutionPolicyの後ろにつけるポリシーについては各自の状況で設定するであります!「Bypass」にしておけば何もブロックされないので、安心できる場所から仕入れたスクリプトなら「Bypass」で良いかと思っております。
また、筆者はタスクスケジューラで開始位置を設定します。
何度か開始位置を設定せずに実行したところ、PowerShell記述ミスでSystem32フォルダ配下やデスクトップデータを吹き飛ばしたのです。
ちゃんと確認しろは置いといて、もはや恐怖症であります。
※こんな感じ※
> powershell -ExecutionPolicy Bypass .\ファイル名.ps1
オプションのポリシーについてはこのあと説明入れますね。
Powershell実行時のオプション「-ExecutionPolicy」実行ポリシー種類は5つ
PowerShellの実行を直接指定して出来ない!という問題ですが、「実行ポリシー」なるものでセキュリティエラーが出てしまっていることが原因のようです。
デフォルトでは「Restricted」に設定されており、スクリプトの実行を行わないようにしているのです。PowerShellコマンド「Set-ExecutionPolicy」で変更することも出来ますが、最近のセキュリティ事情ではオススメできませんね。PowerShellを起点に情報を盗む仕組みがあるので、常に実行できる環境にはしないほうが良いかと思われます。
状況に応じて実行時にポリシー箇所を変更するようにしましょう。
「-ExecutionPolicy(ポリシー) .\実行ファイル名.ps1」
ポリシー | 内容 |
---|---|
Restricted | 既定値。構成ファイルの読み込みやスクリプトを実行しません。 |
AllSigned | すべてのスクリプトと構成ファイルが信頼された発行元によって署名されていることを要求します (ユーザーがローカル コンピューターに書き込むスクリプトを含む)。 |
RemoteSigned | インターネットからダウンロードされたすべてのスクリプトおよび構成ファイルが、信頼された発行元によって署名されていることを要求します。 |
Unrestricted | すべての構成ファイルを読み込み、すべてのスクリプトを実行します。インターネットからダウンロードされた署名されていないスクリプトを実行する場合、スクリプトを実行する前に確認を求められます。 |
Bypass | 何もブロックされず、警告もメッセージも表示されません。 |
参照:PowerShellのExecutionPolicyのスコープとかについて詳しく
参照:About Execution Policies
WindowsServerでバッチ処理をしている場合は頻繁に使うと思うのでどちらかというと社内SE向きでありますな。皆さんの参考になったならば最高であります!