WIN1@Codename

Codename

Hyper-Vコンテナの注意点、制限事項

TP4時点でのHyper-Vコンテナについて、覚書。

・Hyper-VコンテナはHyper-Vの機能を有効にしたサーバーもしくは、Nested Hyper-Vの設定をしたVM上のコンテナホストで利用可能。
Enable-NestedVm.ps1

 

・Nestedの設定をした仮想マシンには最低でも2つ以上の仮想CPUを割り当てる必要がある。1つだとHyper-Vコンテナは起動できない。

 

・Hyper-Vコンテナホストとして構築した場合、WindowsServerCoreとNanoServerのコンテナイメージがインストールされる。
 Install-ContainerHost.ps1 –HyperV

 

・Hyper-Vコンテナとして起動できるのは、NanoServerコンテナイメージから作成されたコンテナだけ。
・Hyper-Vコンテナとしてコンテナを作成する場合は New-Containerコマンドに -RuntimeTypeスイッチ をつけて「HyperV」と指定するだけ。
 New-Container -Name "HVcontainer" -ContainerImageName “NanoServer” -SwitchName "Virtual Switch" -RuntimeType HyperV

 

・Set-Containerコマンドで -RuntimeType は 「Default」と「HyperV」とで切り替え可能。
 Set-Container –RuntimeType HyperV  or Set-Container –RuntimeType Default

 

・WindowsServerCoreベースもしくは、GUI付きWindowsで構築したコンテナホスト上では、NanoServerイメージベースのコンテナは「Hyper-Vコンテナ」としてでしか起動できない。
 $Container = New-Container -Name "HVcontainer" -ContainerImageName “NanoServer” -SwitchName "Virtual Switch" -RuntimeType HyperV
 Start-Container $Container 

 $Container = New-Container -Name "HVcontainer" -ContainerImageName “NanoServer” -SwitchName "Virtual Switch" -RuntimeType Default
 Start-Container $Container 
×

 

・「WindwosServerコンテナ」(Defaultコンテナ)として作成した、NanoServerイメージベースのコンテナは、コンテナホストとOSが異なるため。

・コンテナはコンテナホストのOSを透過的に参照(OSはホストを参照)しているので、コンテナとコンテナホストのOSが異なる場合は要件に反する。 
 ↓
 起動できない

・Hyper-Vコンテナはコンテナホストとは隔離されている状態(仮想マシンと同様)で稼働するので、コンテナホストのOSを参照していない

・Hyper-Vコンテナはコンテナの特徴である展開の速さと小ささを、NanoServerと仮想マシン技術を組み合わせて実現したもの。
 ↓
 コンテナと仮想マシンの中間的なもの

・NanoServerイメージベースのコンテナは、NanoServerで構築したコンテナホスト上であれば、「Default」と「HyperV」どちらでも起動可能。

Windowsの中には32bit版と64bit版のPowerShellがあります

VBやC#から、System.Management.Automation.Runspacesクラスを使ってPowerShellのコマンドを実行することができます。

参考:Visual StudioとPowerShellの良い関係 for Hyper-V

このとき、VisualStudioで特に何も設定指定な場合、仕様として32bit版のPowerShellが呼び出されています。

PowerShell.exeはWindows内に実は二つ存在し、32bit版と64bit版とでそれぞれ異なります。

64bit版 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

32bit版 C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

どちらのPowerShellで動いているかを確認するには、コマンドプロンプトで [System.Environment]::Is64BitProcess と入力して、 Trueであれば64bit、Falseであれば32bitということになります。

PS > [System.Environment]::Is64BitProcess
True

VisualStudioでコンテナ関連のコマンドを呼び出していたとき、「コマンドが見つかりません。」とのエラーに遭遇しました。

このエラーはローカルのPowerShellに対してRunspaseを使って呼び出しを行うと発生して、リモートのPowerShellに対しては発生しないものです。

コンテナ関連のコマンドは、64bit版でのみ提供されているので、既定の設定でVisualStudioでコンパイルしたコードでは、32bit版のPwerShell.exeを呼び出してしまいエラーとなっていたのが原因です。

ローカルを呼び出す場合は32bitを、リモートは64bitという暗黙の設定がなされているようです。

回避方法としては、VisualStudioの方できっちりと対象のCPUを「AnyCPU」ではなく、「x64」でコンパイルしてください。

20161226050259

Windows Serverのイベントログをリアルタイムでメール送信

PowerShellを利用してリモート先からでも簡単にリアルタイム通知を実現

Windows Serverを利用してサービス提供をしている場合、イベントログはサーバー管理者にとって重要な情報源となります。緊急度の高いログが出力された場合、リアルタイムで情報を取得しておきたいものです。

重要と思われるイベントログが出力された場合に携帯などメール通知機能のある端末に情報を送信して、リアルタイムで確認する方法をご紹介します。

 

GMO TechReport
https://www.gmo.jp/report/single/?art_id=204

FC2Ad