by manamana
3. 3月 2013 01:00
Windows 8/Server 2012 に搭載される Hyper-V 3.0 には、PowerShell モジュールが付属しています。
これを利用すると、Hyper-V マネージャー無しに仮想マシンを制御することが出来て便利です。
Hyper-V Cmdlets in Windows PowerShell
複数の仮想マシンを「同時」起動したり、Windows Updateを一斉に実行すると極端に性能が低下します。
これは HDD のランダムアクセス性能が低いのが原因で、SSD上の仮想マシンだとそれ程気になりません。
しかし、仮想マシンを SSD 上に用意できる環境は少数であり、管理者は苦労していると思います。
VMWare には仮想マシンを「順次」起動させる機能があるようですが、Hyper-V には存在しません。
そこで、 先日公開した Excel PowerShel Tool の応用として Hyper-V を管理する環境を作ってみました。
これを使えば、仮想マシンの一覧に対して以下の機能が使えます。
- 状態 仮想マシンの状態を取得する
- 起動 仮想マシンを起動する
- 保存 仮想マシンを保存する
- スナップショット 仮想マシンのスナップショットを作る
- シャットダウン 仮想マシンを終了する
- 更新 Windows Update を実行する
1~5は、Hyper-V用のコマンドレットを使って実現しています。
2の起動に関しては少し工夫をしていて、ハートビートが確認できるまで待機します。
これにより、仮想マシンの順次起動のタイミングを取っています。
その他は単純にコマンドレットを使うだけですが、完了するまで待機されるので順次実行に問題はありません。
6は PsTools に含まれる PsExec を用いて実現しています。
PsTools (Technet)
実際には PsExec により、仮想マシン上に予め配置してある Windows Update 用のスクリプト "Run-WinUpdate.ps1" を実行します。
これには次の記事が非常に役に立ちます。
更新プログラムを検索、ダウンロード、およびインストールする方法はありますか (Hey, Scripting Guy!)
普通に考えれば、PowerShell のリモートセッションでスクリプトを実行するところですが、
リモートからでは「管理者として実行」するのが困難です。
dcomcnfg で設定できると思ったのですが…挫折しました。
PsExec の -s オプションを使えばリモートからでも 「管理者として実行」 できるのでこれを採用しましたが、
PsExec はパスワード部分が平文で流れる等のセキュリティ的な問題もあるので、使用時には注意が必要です。
"Run-WinUpdate.ps1" は再起動まではサポートしていません。必要な場合は、手動で再起動してください。
※もちろん、シャットダウン&起動はExcel上から行えます
使い方は、画面を見れば分かると思います。
HyperVTable に必要な情報を記述し、スクリプトとして "Act-Hyper-V.ps1" を呼び出します。
複数の仮想マシンをバッチ的処理してくれるので、Windows Update の日には活躍してくれるでしょう。
実際の使用に関しては、スクリプト内のファイルパスを調節してください。
ここでは、PsExec.exe をパスの通った場所に配置し、
"Run-WinUpdate.ps1" は 各仮想マシンの C:\PSScripts\WindowsUpdate に配置している事が前提です。
また、Excel を「管理者として実行」しないと動かないので注意してください。
↓↓↓ ダウンロード
Act-Hyper-V.zip (13.56 kb)
5939f26a-ded6-42e8-b658-284f7995a7ab|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
Hyper-V | PowerShell
by manamana
1. 3月 2013 18:00
存在すら忘れられている気がする XP 64bit 版ですが PowerShell が使いたい!
…と思ってはみたものの、正式に対応したファイルは見つかりませんでした。
そこで、内部構造がほぼ同じと思われる Server 2003 x64 用のモジュールを入れてみました。
Windows Server 2003 x64 Edition 用更新プログラム (KB968930)
インストールは呆気なく終了。コマンド類も普通に動く様子です。
なんかちょっと嬉しい
1ad4a806-5d1b-4a71-bce9-228c9714d0ac|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
その他の IT 系
by manamana
28. 2月 2013 08:07
Windows 8 / Server 2012 に搭載された Hypre-V 3.0は随分進化しました。
Windows Server 2012クラウドジェネレーション:第5回 サーバ版Hyper-Vの概要
良い事だらけの様ですが、実は困っていたりします。 既存の Hyper-V 環境と互換性がない!
仮想マシンに互換性というのも変ですが、新らしい Hyper-V マネージャーは旧バージョンのホストに繋がらないのです。
試しに Server 2008 R2 が動いている VIP というホストに繋いでみると…
…がっくりです
Hyper-V 3.0 からは、PowerShell による管理用のコマンドが付属してくれるのでとてもありがたいです。
もしかすると! と思い、コマンドレットで接続を試みました。
まぁ、こんなものでしょう...orz
MS的には Hyper-V 3.0 は圧倒的に有利だから移行してね~という事なのでしょう。
多分、仮想マシンをエクスポートすれば普通に動いてくれると思いますが…やはり懐の問題ですねww
ちなみに 2008R2 の環境からだと 2012 の Hyper-V を管理できるという謎仕様です。
一覧が表示できて、起動・停止・接続ができれば文句ないのですが、やる気ないだろうな~
4a6b9fb4-9244-4391-804c-dfb74fea06aa|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
Hyper-V | Server
by manamana
26. 2月 2013 03:00
Windows リモート管理(=WinRM)は、HTTP/HTTPSを使用してPCと通信する仕組みです。
PowerShell と密接に関わっていて…といいますか、Windows Management Framework の中に
PowerShell と WinRM が含まれていると説明した方が正しいかな?
Windows 管理フレームワークをインストールする (Technet)
PowerShell でセッションを張るには、予め相手PCが WinRT の通信を受けられる様に設定してやります。
そのためのコマンドが↓↓
> winrm quickconfig
大抵これで環境を整えてくれますが、ドメイン未参加の XP でハマりました。
winrm コマンドで状態を把握しようにも尽く「アクセスが拒否されました」状態です。
Vista以降なら、ドメイン未参加でも普通に通るコマンドなんですけどね…
←Vista
アクセス拒否なのだから、セキュリティポリシーが怪しいと考えて調べてみました。
結果、犯人は↓↓でした。
クラッシクにすることで無事に WinRM の環境が整い、New-PSSession が可能になりました。
f44762f7-3b79-4716-8af3-786b51f767ce|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
PowerShell | Server
by manamana
24. 2月 2013 23:00
PowerShell の開発者には広く知られている PowerGUI のアップデートをしてみました。
※最近は標準の PowerShell ISE を使っていたので、バージョンアップに気づかなかった...orz
パッと見て気づいたのがこれ
何と! スクリプトファイルを実行ファイルにする機能が追加されているじゃないですか。
ちょっと試した所、型定義の dll を含めたりできるので十分使えそうです。
スクリプトはソースがないと何かと不便ですが、配布を考えるとこんなのもありですね。
c557147e-a7f2-4790-9df2-747711511c49|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
Development | PowerShell