Script to set custom attributes in guestinfo
This commit is contained in:
84
Scripts/Set-CustomAttributesInGuestinfo.ps1
Normal file
84
Scripts/Set-CustomAttributesInGuestinfo.ps1
Normal file
@@ -0,0 +1,84 @@
|
||||
<#
|
||||
.NOTES
|
||||
Script name: Set-CustomAttributesInGuestinfo.ps1
|
||||
Created on: 10/04/2018
|
||||
Author: Doug Taliaferro, @virtually_doug
|
||||
Description: Gets Custom Attributes assigned to a VM and makes them available to the guest OS.
|
||||
Dependencies: None known
|
||||
|
||||
===Tested Against Environment====
|
||||
vSphere Version: 6.5
|
||||
PowerCLI Version: 10.0.0.7893909
|
||||
PowerShell Version: 5.1.14409.1005
|
||||
OS Version: Windows 7, 10
|
||||
Keyword: VM, Attributes, Guestinfo
|
||||
|
||||
.SYNOPSIS
|
||||
Gets Custom Attributes assigned to a VM and makes them available to the guest OS.
|
||||
|
||||
.DESCRIPTION
|
||||
Gets the custom attributes assigned to one or more VMs and sets their values in the
|
||||
VM's 'guestinfo' advanced settings. This makes the attributes available within the
|
||||
guest OS using VM tools (vmtoolsd.exe) and allows the attributes to be used as metadata
|
||||
for applications or management agents that run inside the guest. If the attribute name
|
||||
contains spaces they are removed in naming the advanced setting.
|
||||
|
||||
For example, if a VM has a custom attribute named 'Created On', the advanced setting
|
||||
becomes:
|
||||
'guestinfo.CreatedOn' = '08/08/2018 14:24:17'
|
||||
|
||||
This can be retrieved in the guest OS by running:
|
||||
vmtoolsd.exe --cmd "info-get guestinfo.CreatedOn"
|
||||
|
||||
.PARAMETER VMs
|
||||
One or more VMs returned from the Get-VM cmdlet.
|
||||
|
||||
.PARAMETER Attributes
|
||||
The names of the Custom Attributes to get. If the names contain spaces they must be
|
||||
enclosed in quotes. The spaces will be removed to name the advanced setting.
|
||||
|
||||
.PARAMETER vCenter
|
||||
The vCenter server to connect to. Optional if you are already connected.
|
||||
|
||||
.EXAMPLE
|
||||
.\Set-CustomAttributesInGuestInfo.ps1 -VM (get-vm testvm01) -Attributes 'Created On', 'Created By'
|
||||
|
||||
Gets the custom attributes 'Created On' and 'Created By' for 'testvm01' and sets their
|
||||
values in 'guestinfo.CreatedOn' and 'guestinfo.CreatedBy'.
|
||||
|
||||
.EXAMPLE
|
||||
.\Set-CustomAttributesInGuestInfo.ps1-VM (get-cluster Dev-01 | get-vm) -Attributes 'Created On'
|
||||
|
||||
Gets the custom attribute 'Created On' for all VMs in the Dev-01 cluster and sets 'guestinfo.CreatedOn'
|
||||
on each VM.
|
||||
#>
|
||||
#Requires -modules VMware.VimAutomation.Core
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
[Parameter(Mandatory=$true,Position=0)]
|
||||
$VMs,
|
||||
[Parameter(Mandatory=$true,Position=1)]
|
||||
[string[]]$Attributes,
|
||||
[string]$vCenter
|
||||
)
|
||||
if ($vCenter) {
|
||||
Connect-VIServer $vCenter
|
||||
}
|
||||
|
||||
ForEach ($vm in $VMs) {
|
||||
ForEach ($attributeName in $Attributes) {
|
||||
# Get the custom attribute with a matcing key name
|
||||
$customField = $vm.CustomFields | Where-Object Key -eq $attributeName
|
||||
if ($customField) {
|
||||
# Remove white space from the attribute name because the advanced
|
||||
# setting name cannot contain spaces
|
||||
$attributeNameNoSpaces = $customField.Key -replace '\s',''
|
||||
$guestinfoName = "guestinfo.$attributeNameNoSpaces"
|
||||
$guestinfoValue = $customField.Value
|
||||
Write-Host "$($vm): setting '$guestinfoName' = '$guestinfoValue'"
|
||||
New-AdvancedSetting -Entity $vm -Name $guestinfoName -Value $guestinfoValue -Confirm:$false -Force | Out-Null
|
||||
} else {
|
||||
Write-Host "$($vm): custom attribute '$attributeName' not set on this VM"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user