とりちらかったもろもろの言葉たち

ちょっと大きめのつぶやきにすぎない戯言をとりあえず書いてみました

PowerShellを初期設定に使ってみた

某雑誌のセミナーでハンズオンをやるので、ときどき大量のパソコンの初期設定をしなければならなくなる。PowerShellのスクリプトは、クライアントWindowsだと実行ポリシーで制限がかかっているので、まあムリだろうとあきらめていた。

しかしWindows 8.1にしたら、今まで使っていたVBSのスクリプトがまともに動かない。しかたがないので慌てて代替手段を探した。条件としては、(1)管理者権限で動作する(いろいろと管理者での操作が必要なのだ)、(2)コンソールによる対話処理は極力なくす(手間軽減と誤り軽減のため)、(3)PowerShellの実行制限はいじらない(正確に言えば実行後元に戻ればOK)。

某雑誌の連載の樋口さんに書いていただいた記事で、PowerShellスクリプトのファイルを右クリックして「PowerShellで実行」とすると、Windowsの実行制限に引っかからないで実行できるというのを教えてもらっていた。これが管理者権限で実行できればいいわけなので、まずはPowerShellで実行権限をエスカレーションする方法を探した。そこで見つけたのが、牟田口さんのブログで「スクリプトを管理者権限で実行する」。これで管理者権限が必要なスクリプトが素直に動いてくれたら、もはやそれで完了だったのだが、残念ながらなかで管理者にエスカレーションしたところでスクリプトを実行しようとして、結局実行制限に引っかかる。

さてどうしよう、と探していたら、ここにバッチで実行ポリシーを変更するという記述を見つけた。よく読んでみると、ふむ。なんだ。PowerShellで1行実行しているだけじゃん。

ということでこういうバッチを作って、バッチを右クリックして「管理者権限で実行」すればいいということがわかった。「setuppc1.ps1」がメインの設定スクリプト。

powershell.exe -Command "Set-ExecutionPolicy Remotesigned -Scope LocalMachine -Confirm"
powershell -File %~dp0setuppc1.ps1
powershell.exe -Command "Set-ExecutionPolicy Restricted -Scope LocalMachine -Confirm"

USBメモリーで指してそこでバッチを実行させるので、実行フォルダーを取得するため「%~dp0」を付けているくらいで、あまり特殊なことはしていない。と思って改めて探したらここにちゃんとした説明があったのだった。

VBSとPowerShellだと、スクリプトの開発効率は結構違う。試しに実行しても、VBSだと結構手探りでデバッグしなきゃならない。PowerShellならISE使えるので全然楽。これで管理者権限の必要なスクリプトをISE使ってデバッグできるようになったので、今後楽になるなぁと期待している。

 

コメントを残す