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