Set-OSCustomizationSpec
VMware: Modifies an OS customization specification
#Requires -Version 5.1
#Requires -Modules VMware.VimAutomation.Core
[CmdletBinding(DefaultParameterSetName = "ByName")]
Param(
[Parameter(Mandatory = $true, ParameterSetName = "ByName")]
[Parameter(Mandatory = $true, ParameterSetName = "ById")]
[string]$VIServer,
[Parameter(Mandatory = $true, ParameterSetName = "ByName")]
[Parameter(Mandatory = $true, ParameterSetName = "ById")]
[pscredential]$VICredential,
[Parameter(Mandatory = $true, ParameterSetName = "ById")]
[string]$ID,
[Parameter(ParameterSetName = "ByName")]
[string]$SpecName,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$Description,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[bool]$DeleteAccounts,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[int]$AutoLogonCount,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$DNSServer,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$AdminFullName,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$AdminPassword,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$NewName,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$OrgName,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[ValidateSet("Custom", "Fixed", "Prefix", "Vm")]
[string]$NamingScheme,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$ProductKey,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[ValidateSet("Persistent", "NonPersistent")]
[string]$SpecificationType,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$Domain,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[pscredential]$DomainCredentials,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$DomainUsername,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$DomainPassword,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[ValidateSet('W. Europe', 'E. Europe', 'Central Europe', 'Central European', 'Central (U.S. and Canada)', 'Central America', 'Eastern (U.S. and Canada)', 'GMT (Greenwich Mean Time)', 'GMT Greenwich', 'EET (Athens, Istanbul, Minsk)', 'EET (Helsinki, Riga, Tallinn)')]
[string]$TimeZone,
[Parameter(ParameterSetName = "ByName")]
[Parameter(ParameterSetName = "ById")]
[string]$Workgroup
)
Process {
try {
[string[]]$Properties = @('Name', 'Type', 'Server', 'LastUpdate', 'DomainAdminUsername', 'DomainUsername', 'Description', 'Domain', 'FullName', 'OSType', 'LicenseMode', 'LicenseMaxConnections', 'Id')
$vmServer = Connect-VIServer -Server $VIServer -Credential $VICredential -ErrorAction Stop
$cmdArgs = @{ ErrorAction = 'Stop'; Server = $vmServer }
if ($PSCmdlet.ParameterSetName -eq "ById") { $cmdArgs.Add('Id', $ID) }
else { $cmdArgs.Add('Name', $SpecName) }
$spec = Get-OSCustomizationSpec @cmdArgs -ErrorAction Stop
$setArgs = @{ ErrorAction = 'Stop'; Server = $vmServer; OSCustomizationSpec = $spec; Confirm = $false }
if ($PSBoundParameters.ContainsKey('AutoLogonCount')) { $setArgs.Add('AutoLogonCount', $AutoLogonCount) }
if ($PSBoundParameters.ContainsKey('AdminPassword')) { $setArgs.Add('AdminPassword', $AdminPassword) }
if ($PSBoundParameters.ContainsKey('DeleteAccounts')) { $setArgs.Add('DeleteAccounts', $DeleteAccounts) }
if ($PSBoundParameters.ContainsKey('Description')) { $setArgs.Add('Description', $Description) }
if ($PSBoundParameters.ContainsKey('DNSServer')) { $setArgs.Add('DNSServer', $DNSServer) }
if ($PSBoundParameters.ContainsKey('Domain')) { $setArgs.Add('Domain', $Domain) }
if ($PSBoundParameters.ContainsKey('DomainUsername')) { $setArgs.Add('DomainUsername', $DomainUsername) }
if ($PSBoundParameters.ContainsKey('DomainPassword')) { $setArgs.Add('DomainPassword', $DomainPassword) }
if ($PSBoundParameters.ContainsKey('DomainCredentials')) { $setArgs.Add('DomainCredentials', $DomainCredentials) }
if ($PSBoundParameters.ContainsKey('AdminFullName')) { $setArgs.Add('FullName', $AdminFullName) }
if ($PSBoundParameters.ContainsKey('NewName')) { $setArgs.Add('Name', $NewName) }
if ($PSBoundParameters.ContainsKey('NamingScheme')) { $setArgs.Add('NamingScheme', $NamingScheme) }
if ($PSBoundParameters.ContainsKey('OrgName')) { $setArgs.Add('OrgName', $OrgName) }
if ($PSBoundParameters.ContainsKey('ProductKey')) { $setArgs.Add('ProductKey', $ProductKey) }
if ($PSBoundParameters.ContainsKey('TimeZone')) { $setArgs.Add('TimeZone', $TimeZone) }
if ($PSBoundParameters.ContainsKey('SpecificationType')) { $setArgs.Add('Type', $SpecificationType) }
if ($PSBoundParameters.ContainsKey('Workgroup')) { $setArgs.Add('Workgroup', $Workgroup) }
$result = Set-OSCustomizationSpec @setArgs -ErrorAction Stop | Select-Object $Properties
if ($null -ne $result) { $result | Add-Member -NotePropertyName Timestamp -NotePropertyValue (Get-Date -Format "yyyy-MM-dd HH:mm:ss") -PassThru -Force }
}
catch { throw }
finally { if ($null -ne $vmServer) { Disconnect-VIServer -Server $vmServer -Force -Confirm:$false -ErrorAction SilentlyContinue } }
}IP address or DNS name of the vSphere server
PSCredential object for authenticating with the server
ID of the OS customization specification
Name of the OS customization specification
New description
Delete all user accounts
Number of times to auto-login
DNS server
Administrator full name
Administrator password
New name for the specification
Organization name
Naming scheme: Custom, Fixed, Prefix, VM
MS product key
Type: Persistent or NonPersistent
Domain name
Credential for domain authentication
Username for domain authentication
Password for domain authentication
Time zone for Windows guest OS
Workgroup name