日程Fit|「いつ空いてますか?」の往復はもう不要。候補日を選んでURLを送るだけ|登録不要|今すぐ無料で使う →

PowerShellでvCenterのカスタム属性を編集してVM情報を整理する方法を徹底解説

vCenterで管理される仮想マシン(VM)の情報を効率的に整理することは、運用管理をスムーズに進めるために重要です。本記事では、PowerShellスクリプトを使用してvCenterの拡張属性(カスタム属性)を編集する方法を詳しく解説します。拡張属性を活用することで、VMに関連する特定の情報を記録・分類・検索しやすくなります。IT管理者や運用エンジニアの方々が、vCenterの情報整理を自動化し、業務効率を向上させるための手法を学べる内容となっています。

日程Fit。無料・登録不要。「いつ空いてる?」を、ひとつのリンクで。リンクを送って、○△×でかんたん日程調整。無料で日程を作る。
目次

vCenterの拡張属性とは?


vCenterの拡張属性(カスタム属性)は、仮想マシンやその他のvSphereオブジェクトに追加情報を付加するためのカスタムフィールドです。これにより、運用管理のニーズに合わせて情報を整理し、効率的な管理が可能になります。

拡張属性の役割


拡張属性は、標準的なプロパティには含まれない独自のデータを記録するために使用されます。例えば、以下のような情報を格納するのに便利です:

  • 仮想マシンの用途や役割
  • 管理者の連絡先情報
  • セキュリティレベルや優先度

拡張属性の利点

  • 情報整理:複数の仮想マシンを一元的に分類・管理できる。
  • 検索性向上:特定の属性値を基にしたフィルタリングやレポート作成が容易。
  • 柔軟性:カスタム属性を自由に定義できるため、特定の業務要件に対応可能。

利用例


例えば、ある企業が拡張属性を使用して以下の情報を記録しているケースを考えます:

  • プロジェクト名:VMがどのプロジェクトに属しているかを識別する。
  • コストセンター:コスト割り当ての追跡に使用する。
  • メンテナンス窓口:担当者の連絡先を記録。

拡張属性はvCenter Web ClientやPowerShellなどを通じて設定・編集が可能で、組織のIT運用を効率化する重要な機能です。

PowerShellでvCenterに接続する手順

PowerShellを使用してvCenterに接続するには、VMware PowerCLIをインストールする必要があります。以下では、PowerCLIのセットアップからvCenter接続までの具体的な手順を解説します。

VMware PowerCLIのインストール


PowerCLIは、vSphere環境を管理するための公式ツールキットです。以下のコマンドでインストールできます。

# PowerCLIのインストール
Install-Module -Name VMware.PowerCLI -Scope CurrentUser
  • Install-Module コマンドは、PowerCLIモジュールをダウンロードしてインストールします。
  • インストール時にプロンプトが表示された場合は、「Yes」を選択してください。

PowerCLIの初期設定


PowerCLIの利用を開始するには、次の設定を推奨します。

# SSL証明書の警告を無視する設定(必要に応じて)
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false
  • 自己署名証明書を使用している環境では、この設定が役立ちます。

vCenterへの接続


以下のコマンドを使用して、vCenterに接続します。

# vCenterに接続
Connect-VIServer -Server "vcenter.example.com" -User "[email protected]" -Password "password"
  • -Server:接続先のvCenterサーバーのFQDNまたはIPアドレスを指定します。
  • -User-Password:vCenterの管理者アカウントを指定します。

接続確認


接続に成功すると、以下のようなメッセージが表示されます。

Name                           Port  User
----                           ----  ----
vcenter.example.com            443   [email protected]

これで、PowerShellを使ったvCenterへの接続が完了しました。次のステップでは、拡張属性の取得や編集を行います。

拡張属性の取得と確認方法

vCenterの拡張属性をPowerShellを使って取得し、その内容を確認する方法を解説します。このプロセスにより、現在設定されている属性を把握し、編集や新規追加の準備が整います。

仮想マシンの拡張属性の一覧を取得する


PowerShellを利用して、特定の仮想マシンに設定された拡張属性を確認するには、次のコマンドを使用します。

# 仮想マシンの情報を取得
$vm = Get-VM -Name "VM_Name"

# 拡張属性を確認
Get-Annotation -Entity $vm
  • Get-VM:指定した仮想マシンの情報を取得します。
  • Get-Annotation:拡張属性(カスタム属性)の一覧を表示します。

出力例:

Name                 Value
----                 -----
Project              Alpha
CostCenter           CC001
MaintenanceContact   [email protected]

全仮想マシンの拡張属性を一括で取得する


複数の仮想マシンについて拡張属性を確認する場合は、以下のスクリプトを使用します。

# 全仮想マシンの拡張属性を取得
Get-VM | ForEach-Object {
    $vmName = $_.Name
    $annotations = Get-Annotation -Entity $_
    Write-Output "VM: $vmName"
    $annotations | ForEach-Object {
        Write-Output "  $_.Name : $_.Value"
    }
}
  • ForEach-Object:全仮想マシンをループ処理して、それぞれの拡張属性を取得します。
  • 出力結果は各仮想マシン名とその属性の一覧が表示されます。

特定の拡張属性をフィルタリングして確認


特定の属性に絞って確認したい場合は、以下のようにフィルタリングを行います。

# 特定の拡張属性の値を取得
Get-VM | ForEach-Object {
    $vm = $_
    $annotation = Get-Annotation -Entity $vm | Where-Object { $_.Name -eq "Project" }
    if ($annotation) {
        Write-Output "$($vm.Name) - Project: $($annotation.Value)"
    }
}

このスクリプトでは、”Project” という属性が設定されている仮想マシンの一覧を取得します。

確認結果の出力


拡張属性の結果をCSVファイルにエクスポートして管理することも可能です。

# 拡張属性をCSVファイルにエクスポート
Get-VM | ForEach-Object {
    $vm = $_
    $annotations = Get-Annotation -Entity $vm
    foreach ($annotation in $annotations) {
        [PSCustomObject]@{
            VMName  = $vm.Name
            Name    = $annotation.Name
            Value   = $annotation.Value
        }
    }
} | Export-Csv -Path "annotations.csv" -NoTypeInformation -Encoding UTF8

このスクリプトで生成されたCSVファイルをExcelなどで開き、確認できます。

次は、拡張属性の編集や新規追加について解説します。

拡張属性の編集や追加の方法

PowerShellを使ってvCenterの拡張属性を編集または新規追加する方法を解説します。これにより、仮想マシン情報の整理が効率的に行えます。

拡張属性の新規追加


新しい拡張属性を追加するには、New-CustomAttribute コマンドレットを使用します。以下は、例を示します。

# 新しい拡張属性を作成
New-CustomAttribute -Name "Environment" -TargetType VirtualMachine
  • -Name:新しい属性の名前を指定します。
  • -TargetType:対象オブジェクトの種類(ここでは仮想マシン)を指定します。

既存の拡張属性の値を編集


既に作成されている拡張属性の値を変更する場合は、Set-Annotation コマンドレットを使用します。

# 仮想マシンの拡張属性を編集
$vm = Get-VM -Name "VM_Name"
Set-Annotation -Entity $vm -CustomAttribute "Environment" -Value "Production"
  • -Entity:対象の仮想マシンを指定します。
  • -CustomAttribute:編集対象の属性名を指定します。
  • -Value:新しい値を指定します。

複数の仮想マシンに属性を一括設定


多くの仮想マシンに対して同じ拡張属性を設定する場合、ループを利用します。

# 一括で属性を設定
Get-VM -Name "VM1", "VM2", "VM3" | ForEach-Object {
    Set-Annotation -Entity $_ -CustomAttribute "Environment" -Value "Test"
}

ここでは、指定された仮想マシンに “Environment” 属性を “Test” として設定しています。

既存の属性がない場合の処理


特定の仮想マシンに属性が存在しない場合、自動的に属性を追加して値を設定するスクリプト例を以下に示します。

# 属性がなければ追加して設定
$vm = Get-VM -Name "VM_Name"
$attribute = Get-Annotation -Entity $vm | Where-Object { $_.Name -eq "Owner" }

if (-not $attribute) {
    New-CustomAttribute -Name "Owner" -TargetType VirtualMachine
}

Set-Annotation -Entity $vm -CustomAttribute "Owner" -Value "[email protected]"

このスクリプトでは、”Owner” 属性がない場合に作成し、値を設定します。

拡張属性の削除


不要な拡張属性を削除するには、以下のコマンドを使用します。

# 属性を削除
Remove-CustomAttribute -Name "Environment"

注意:このコマンドは対象属性をすべてのオブジェクトから削除します。

操作結果の確認


属性の編集後、Get-Annotation コマンドを使用して正しく設定されているか確認します。

# 属性の確認
Get-Annotation -Entity (Get-VM -Name "VM_Name")

これで、拡張属性の編集や追加が完了します。次は、仮想マシン情報を整理するスクリプト例を解説します。

仮想マシン情報を整理するスクリプト例

PowerShellを活用して、vCenter内の仮想マシン情報を効率的に整理するスクリプト例を紹介します。このスクリプトでは、拡張属性を利用して情報を分類・整理し、必要に応じてCSVファイルにエクスポートします。

仮想マシンの基本情報と拡張属性を取得するスクリプト


以下のスクリプトは、仮想マシンの基本情報と拡張属性を一覧表示し、CSVファイルにエクスポートします。

# 全仮想マシンの情報を取得
$vmData = @()

Get-VM | ForEach-Object {
    $vm = $_
    $annotations = Get-Annotation -Entity $vm

    # 拡張属性をハッシュテーブルに変換
    $annotationData = @{}
    foreach ($annotation in $annotations) {
        $annotationData[$annotation.Name] = $annotation.Value
    }

    # 仮想マシンの情報を構造化
    $vmInfo = [PSCustomObject]@{
        Name          = $vm.Name
        PowerState    = $vm.PowerState
        CPU           = $vm.NumCpu
        MemoryGB      = $vm.MemoryGB
        Environment   = $annotationData["Environment"]
        Owner         = $annotationData["Owner"]
        Project       = $annotationData["Project"]
    }

    # 結果を配列に追加
    $vmData += $vmInfo
}

# 結果をCSVにエクスポート
$vmData | Export-Csv -Path "VM_Details.csv" -NoTypeInformation -Encoding UTF8

Write-Output "仮想マシン情報が 'VM_Details.csv' にエクスポートされました。"

このスクリプトの仕組み

  1. Get-VM で全仮想マシンを取得します。
  2. 各仮想マシンに対し、Get-Annotation を使って拡張属性を取得します。
  3. 必要な情報(名前、電源状態、CPU、メモリ、拡張属性など)を構造化し、PSCustomObject にまとめます。
  4. 取得したデータをCSV形式でエクスポートします。

実行結果


生成されたCSVファイルには、以下のようなデータが含まれます。

NamePowerStateCPUMemoryGBEnvironmentOwnerProject
VM1PoweredOn416Production[email protected]Alpha
VM2PoweredOff28Test[email protected]Beta

条件付きで情報を整理するスクリプト


特定の条件に基づいて仮想マシンを分類したい場合、以下のようにフィルタリングできます。

# "Environment" が "Production" の仮想マシンを取得
$productionVMs = $vmData | Where-Object { $_.Environment -eq "Production" }

# 結果を表示
$productionVMs | Format-Table -AutoSize

# 必要に応じてCSVエクスポート
$productionVMs | Export-Csv -Path "Production_VMs.csv" -NoTypeInformation -Encoding UTF8

このスクリプトでは、”Environment” が “Production” の仮想マシンだけを抽出し、CSVファイルにエクスポートします。

応用例:タグやコメントの一括更新


整理された情報に基づき、タグやコメントを更新するスクリプト例です。

# 仮想マシンのコメントを一括更新
Get-VM | ForEach-Object {
    if ((Get-Annotation -Entity $_ -CustomAttribute "Environment").Value -eq "Production") {
        Set-VM -VM $_ -Notes "This VM is in production" -Confirm:$false
    }
}

このスクリプトでは、”Environment” 属性が “Production” の仮想マシンにコメントを追加します。

以上で、仮想マシン情報を整理するためのスクリプト例を解説しました。次はスクリプトの実行時に注意すべきポイントを説明します。

スクリプトの実行で考慮すべきポイント

PowerShellスクリプトを使用してvCenter環境を操作する際には、いくつかの注意点と考慮事項があります。これらを理解し、実行することで、トラブルを防ぎ安全に管理を行うことができます。

1. 正確な権限の設定


スクリプトを実行するアカウントには、操作対象のリソースに対する適切な権限が必要です。

  • 最小権限の原則:不要な権限を与えない。
  • 推奨権限:仮想マシンの操作やカスタム属性の編集には、Virtual Machine.User または Virtual Machine.Power User の権限が必要です。

2. テスト環境での検証


本番環境にスクリプトを適用する前に、テスト環境で十分な検証を行ってください。

  • スクリプトの誤りが本番環境でのデータ損失やサービス中断を引き起こす可能性があります。
  • テスト環境で、全てのシナリオをシミュレーションしてください。

3. エラーハンドリングの実装


スクリプトが想定外のエラーで停止することを防ぐため、エラーハンドリングを実装します。

# エラーハンドリング例
try {
    Set-Annotation -Entity $vm -CustomAttribute "Environment" -Value "Production"
} catch {
    Write-Output "Error: Failed to set annotation for VM: $($vm.Name)"
}
  • try-catch ブロックを活用してエラーをキャッチし、ログを出力します。

4. スクリプトの適切な範囲制御


スクリプトが意図しないオブジェクトに適用されることを防ぐため、操作対象を正確に指定します。

# 特定の仮想マシンのみを対象に設定
Get-VM -Name "VM1", "VM2" | Set-Annotation -CustomAttribute "Project" -Value "Alpha"
  • ワイルドカードや全体対象のコマンドは慎重に使用してください。

5. ログと監査の実施


スクリプトの実行結果をログに記録し、後から確認できるようにします。

# ログファイルへの記録
Start-Transcript -Path "script-log.txt"

# スクリプト実行部分
try {
    Set-Annotation -Entity $vm -CustomAttribute "Owner" -Value "[email protected]"
} catch {
    Write-Output "Error occurred for VM: $($vm.Name)" >> "script-log.txt"
}

Stop-Transcript
  • Start-Transcript コマンドで詳細な実行ログを保存します。

6. APIリミットとパフォーマンスへの配慮


大量の仮想マシンに対してスクリプトを実行する場合、vCenterサーバーのAPIリミットやパフォーマンスに注意してください。

  • スクリプトに Start-Sleep を挿入して、負荷を分散する。
# 負荷軽減の例
Get-VM | ForEach-Object {
    Set-Annotation -Entity $_ -CustomAttribute "Environment" -Value "Production"
    Start-Sleep -Milliseconds 500
}

7. SSL証明書の警告に対する対応


自己署名証明書を使用している環境では、証明書エラーを無視する設定を行う必要があります。

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

8. バックアップの確保


スクリプト実行前に、対象となる仮想マシンや拡張属性のバックアップを取得してください。

# 拡張属性のバックアップ例
Get-VM | ForEach-Object {
    $vm = $_
    $annotations = Get-Annotation -Entity $vm
    $annotations | Export-Csv -Path "Backup.csv" -Append -NoTypeInformation
}

これらのポイントを守ることで、スクリプトの安全な実行と効率的な運用管理が可能になります。次は、よくあるエラーとその解決方法について解説します。

よくあるエラーとその解決方法

PowerShellでvCenterを操作する際、エラーに遭遇することがあります。ここでは、よく発生するエラーの原因とその解決方法を解説します。これにより、トラブルシューティングを効率的に進めることができます。

1. **vCenterへの接続エラー**


エラーメッセージ:

Connect-VIServer: Could not connect to one or more vCenter Server systems.

原因:

  • サーバー名またはIPアドレスが間違っている。
  • 認証情報(ユーザー名やパスワード)が正しくない。
  • ファイアウォールで接続がブロックされている。

解決方法:

  • サーバー名を確認し、正しい情報を入力する。
  • パスワードが正しいか再確認する。
  • ネットワーク接続とファイアウォールの設定を確認する。
# 再接続の例
Connect-VIServer -Server "vcenter.example.com" -User "[email protected]" -Password "password"

2. **拡張属性が見つからないエラー**


エラーメッセージ:

Set-Annotation: The custom attribute 'Environment' does not exist.

原因:

  • 指定した拡張属性が存在しない。
  • 属性名の入力ミス。

解決方法:

  • New-CustomAttribute コマンドで必要な拡張属性を作成する。
# 属性が存在しない場合に作成
New-CustomAttribute -Name "Environment" -TargetType VirtualMachine

3. **PowerCLIモジュールのエラー**


エラーメッセージ:

The term 'Get-VM' is not recognized as the name of a cmdlet.

原因:

  • PowerCLIモジュールがインストールされていない。
  • PowerCLIモジュールがインポートされていない。

解決方法:

  • PowerCLIモジュールをインストールし、インポートする。
# モジュールのインストールとインポート
Install-Module -Name VMware.PowerCLI -Scope CurrentUser
Import-Module VMware.PowerCLI

4. **SSL証明書のエラー**


エラーメッセージ:

The SSL connection could not be established.

原因:

  • 自己署名証明書を使用している場合、証明書が無効と認識される。

解決方法:

  • 無効な証明書を許容する設定を行う。
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

5. **リソースのロックエラー**


エラーメッセージ:

The operation is not allowed in the current state.

原因:

  • 仮想マシンが別のプロセスによってロックされている。
  • 操作対象のVMがパワーオン状態で、操作に制限がある。

解決方法:

  • 仮想マシンがロックされているプロセスを解除する。
  • 必要であればVMをパワーオフにする。
# VMの強制シャットダウン(注意が必要)
Stop-VM -VM "VM_Name" -Confirm:$false

6. **APIリミットエラー**


エラーメッセージ:

The request could not be completed because the server reached its API call limit.

原因:

  • vCenterに大量のリクエストが送られたため、API制限に達した。

解決方法:

  • スクリプトに遅延を挿入して負荷を分散する。
# 遅延を追加してリクエストを分散
Get-VM | ForEach-Object {
    Set-Annotation -Entity $_ -CustomAttribute "Environment" -Value "Production"
    Start-Sleep -Milliseconds 500
}

7. **データ型のエラー**


エラーメッセージ:

Cannot convert value 'XYZ' to type 'System.Int32'.

原因:

  • 属性値が期待するデータ型と異なる形式で指定されている。

解決方法:

  • 属性の型を確認し、適切なデータを入力する。
# データ型を正しく指定
Set-Annotation -Entity $vm -CustomAttribute "Priority" -Value "1"

これらのエラーに対応することで、スクリプトの実行をスムーズに進めることができます。次は、応用例や動的データ更新について解説します。

応用例:動的データ更新やレポート作成

PowerShellを活用して、vCenterの拡張属性を使った動的なデータ更新やレポートの自動作成を行う応用例を解説します。これにより、管理業務の効率をさらに向上させることができます。

1. 動的データ更新の例


仮想マシンの状態に基づいて、拡張属性の値を動的に更新するスクリプト例を紹介します。

# 仮想マシンの電源状態に応じて属性を更新
Get-VM | ForEach-Object {
    $vm = $_
    $powerState = $vm.PowerState

    if ($powerState -eq "PoweredOn") {
        Set-Annotation -Entity $vm -CustomAttribute "Status" -Value "Active"
    } elseif ($powerState -eq "PoweredOff") {
        Set-Annotation -Entity $vm -CustomAttribute "Status" -Value "Inactive"
    }
}
  • 目的:仮想マシンが稼働中か停止中かを表す属性 “Status” を自動更新します。
  • 効果:仮想マシンの状態に応じたリアルタイムな情報を付加できます。

2. スケジュールによる自動更新


上記スクリプトをタスクスケジューラやCronジョブと組み合わせて定期実行すると、管理作業を完全自動化できます。

# 毎日更新するスクリプトの例
$script = {
    Get-VM | ForEach-Object {
        $vm = $_
        $powerState = $vm.PowerState

        if ($powerState -eq "PoweredOn") {
            Set-Annotation -Entity $vm -CustomAttribute "Status" -Value "Active"
        } elseif ($powerState -eq "PoweredOff") {
            Set-Annotation -Entity $vm -CustomAttribute "Status" -Value "Inactive"
        }
    }
}

# スケジュールに登録
Register-ScheduledJob -Name "UpdateVMStatus" -ScriptBlock $script -Trigger (New-JobTrigger -Daily -At "02:00")

3. 属性データを利用したレポート作成


以下のスクリプトは、拡張属性を含む仮想マシンの情報を取得し、レポートを自動生成します。

# 仮想マシン情報を収集してレポート作成
$vmReport = Get-VM | ForEach-Object {
    $vm = $_
    $annotations = Get-Annotation -Entity $vm

    # レポート用オブジェクト
    [PSCustomObject]@{
        VMName       = $vm.Name
        PowerState   = $vm.PowerState
        CPU          = $vm.NumCpu
        MemoryGB     = $vm.MemoryGB
        Environment  = ($annotations | Where-Object { $_.Name -eq "Environment" }).Value
        Owner        = ($annotations | Where-Object { $_.Name -eq "Owner" }).Value
    }
}

# レポートをCSVファイルにエクスポート
$vmReport | Export-Csv -Path "VM_Report.csv" -NoTypeInformation -Encoding UTF8

Write-Output "レポートが 'VM_Report.csv' に保存されました。"
  • 目的:拡張属性を含む仮想マシンの一覧を作成し、CSV形式で出力します。
  • 効果:レポートの作成が効率化され、ExcelやBIツールでの分析に活用できます。

4. ダッシュボード用データ出力


生成されたレポートを元に、ダッシュボードに必要なデータを抽出するスクリプト例です。

# ダッシュボードに必要なデータを抽出
$dashboardData = $vmReport | Where-Object { $_.Environment -eq "Production" } | 
    Select-Object VMName, PowerState, Owner

# 抽出結果を表示
$dashboardData | Format-Table -AutoSize
  • 目的:特定の環境(例:Production)の仮想マシン情報を絞り込んで表示します。
  • 効果:管理者が即座に重要な情報を確認可能です。

5. メール通知を活用したレポート配信


生成されたレポートを管理者にメールで送信することで、情報共有を自動化します。

# メール送信設定
$smtpServer = "smtp.example.com"
$from = "[email protected]"
$to = "[email protected]"
$subject = "VM Report"
$body = "最新の仮想マシンレポートを添付しています。"

# レポート送信
Send-MailMessage -SmtpServer $smtpServer -From $from -To $to -Subject $subject -Body $body -Attachments "VM_Report.csv"

このスクリプトにより、最新レポートがIT管理チームに自動配信されます。

まとめ


応用例として、動的データ更新やレポート作成のスクリプトを紹介しました。これらを活用することで、仮想マシンの情報整理や共有が効率化され、運用管理の生産性が向上します。次は記事のまとめを解説します。

まとめ

本記事では、PowerShellを使用してvCenterの拡張属性(カスタム属性)を編集し、仮想マシン情報を整理する方法について解説しました。主なポイントとして、以下の内容を取り上げました:

  • 拡張属性の活用:vCenterで管理される仮想マシンに、プロジェクト名や環境などのカスタム情報を追加し、効率的に情報整理ができること。
  • PowerShellによる操作:PowerShellスクリプトを用いて、vCenterに接続し、拡張属性の取得・設定・編集を行う方法。
  • エラーとその解決方法:よく発生するエラーとその対策を説明し、問題解決のためのヒントを提供しました。
  • 応用例:動的なデータ更新やレポート作成のスクリプトを通じて、管理業務の自動化と効率化を実現する方法。

これらの技術を使えば、vCenterでの仮想マシン管理がよりスムーズになり、IT運用の効率化に繋がります。拡張属性を効果的に活用し、PowerShellスクリプトを駆使することで、日々の運用作業を大幅に改善できるでしょう。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次