web-dev-qa-db-ja.com

HyperVで実行されているオペレーティングシステムを確認する方法VM Powershellを使用)

これが環境です。
ホスト:Windows 10
ゲスト:Server2012およびServer2016
目的:開発中のテストのためにビルドをサーバーにプッシュすることを自動化する開発システム。

この完全なビルドスクリプトの一部として、使用するVMのリモートPSSessionを取得するPowershell関数があります。 VMはベースシステムから動的に複製されるため、現時点ではVMのOSが何であるかわかりません。

2016年のVMの場合は、PowershellDirectを使用してVMに接続します。

$session = New-PSSession -VMName $VMName -Credential $VMCredentials

2012年の場合は、ネットワーク全体でWinRMセッションにフォールバックする必要があります。 IPを取得して接続するためのコードがあります。それはうまくいきます。

        $vm = Get-Vm -Name $VMName    
    $ips = New-Object System.Collections.Generic.List[System.String]

    foreach ($adapter in $vm.NetworkAdapters) 
    {
        foreach ($ip in $adapter.IPAddresses) 
        {
            if($ip -like '*.*')
            {
                $ips.Add($ip)
            }
        }
    }

    $session = New-PSSession -ComputerName $ips[0] -Authentication Negotiate -Credential $VMCredentials

必要なのは、Powershell Direct(2016のみ)を実行するか、WinRMネットワークベースの接続(2012以前)を実行するかを判断する方法を知ることです。

私の考えでは、Hyper-Vコマンドレットには、VM内のOSを特定する方法が必要です。そうでないかもしれない。私はこれを解決する他の方法にもオープンです。ありがとう!

1
SamuelWarren

残念ながらGet-VMコマンドレットは、ゲストVMが実行されているOSの詳細を提供しません。ゲストOSがWindowsServer2016またはWindowsServer 2012のどちらであるかを調べようとしているので、使える Get-WMIObjectその正確な情報を取得します。

次のコマンドを使用すると、バージョン番号が返されます。

Get-WMIObject -Class Win32_OperatingSystem -ComputerName $VMName -Credential $VMCredentials | Select-Object *Version -ExpandProperty Version*

Windows2012はバージョン6.3.x Windows2016のバージョンは10.0.x

2
shinjijai