Local SystemアカウントでPowerShellスクリプトを実行する

ググってもやり方が出てこないためいままで出来ないとばかり思っていたのだけど、PowerShellスクリプトをローカル システム アカウントで実行することは可能だった。
ローカル システム アカウントで実行できるのであれば、タスクスケジューラに登録して運用スクリプトとして利用するのが現実的になるのでPowerShellの用途が広がる。


以下はWindows Server 2008 R2で試してみた手順。


1.PowerShellスクリプト実行のセキュリティ設定を変える
PowerShellを起動して以下のコマンドを実行すると、Local SystemアカウントでのPowerShell Script実行が可能になる。-Scopeがミソ。



PS> Set-ExecutionPolicy -Scope LocalMachine RemoteSigned -Force


以下はWindowsタスクでPowerShellスクリプトを実行する応用例。


2.WindowsタスクにPowerShellスクリプトを登録する。
Local Systemアカウントでスクリプトを実行するWindowsタスクを作成する。
コマンドプロンプトで以下を実行する。



> schtasks /Create /TN test /TR "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\Work\test.ps1" /SC ONCE /ST 00:00:00 /RU SYSTEM


実行するスクリプト(C:\Work\test.ps1)の内容は以下のとおり。


Get-Date >> C:\Work\test.log


3.タスクを実行してみる
コマンドプロンプトから以下のコマンドを実行してタスクを実行してみる。



> schtasks /Run /TN test


C:\Work\test.log に以下の内容のテキストが出力される。

2012年5月15日 11:27:11


これが出来るんだったら、以前挑戦して出来なかったPowerShellスクリプトWindowsサービスの作成もやれば出来るんじゃないか・・?試してみるか。
http://d.hatena.ne.jp/s0u/20070512/1178971093


<追記>
Windowsサービスの作成は無理だった。
まあ、スクリプトも中身はほとんどC#なので、PowerShell使わなくてもC# 2.0コンパイラがServer 2008以降はOSについているのでそれを使えば良く、PowerShell実行にこだわる理由はあまり無い。