How can I use the New-OSCustomizationSpec command to create a configuration with a time zone?
New-OSCustomizationSpec -Name linux-custspec-one-nic -Domain corp.local -DnsServer "223.5.5.5" -OSType Linux -DnsSuffix corp.local -Description 'This is a CentOS Customization Specification.'
But linux-type [VM Customization Specifications] cannot be created with the [-Timezone] option.
$custMgr = Get-View CustomizationSpecManager
$item = New-Object VMware.Vim.CustomizationSpecItem
$item.Info = New-Object VMware.Vim.CustomizationSpecInfo
$item.Info.Description = "This is a CentOS Customization Specification."
$item.Info.Name = "linux-custspec-one-nic"
$item.Info.Type = "Linux"
$item.Spec = New-Object VMware.Vim.CustomizationSpec
$item.Spec.GlobalIPSettings = New-Object VMware.Vim.CustomizationGlobalIPSettings
$item.Spec.Identity = New-Object VMware.Vim.CustomizationLinuxPrep
$item.Spec.Identity.Domain = "corp.local"
$item.Spec.Identity.HostName = New-Object VMware.Vim.CustomizationVirtualMachineName
$item.Spec.Identity.HwClockUTC = $false
$item.Spec.Identity.TimeZone = "Asia/Shanghai"
$item.Spec.Options = New-Object VMware.Vim.CustomizationLinuxOptions
$item.Spec.GlobalIPSettings = New-Object VMware.Vim.CustomizationGlobalIPSettings
$item.Spec.GlobalIPSettings.DnsServerList = New-Object String[] (1)
$item.Spec.GlobalIPSettings.DnsServerList[0] = '223.5.5.5'
$item.Spec.NicSettingMap = New-Object VMware.Vim.CustomizationAdapterMapping[] (1)
$item.Spec.NicSettingMap[0] = New-Object VMware.Vim.CustomizationAdapterMapping
$item.Spec.NicSettingMap[0].Adapter = New-Object VMware.Vim.CustomizationIPSettings
$item.Spec.NicSettingMap[0].Adapter.Ip = New-Object VMware.Vim.CustomizationDhcpIpGenerator
$custMgr.CreateCustomizationSpec($item)
I Get the solution
https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/Required-vSphere-Permissions-to-Run-So...
You can't.
This is not a PowerCLI thing.
The OSCustomizationSpec for Windows is basically using the Windows sysprep tool with an unattended.txt file.
And there is an option to specify the TimeZone in there.
The Linux OSCustomizationSpec is very limited in its parameters.
That is because there is no sysprep like tool that works for all Linux distributions.
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Okay, it seems that I can only edit it manually.
Edit what?
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Manually edit the linux configuration file in [VM Customization Specifications] to configure TIMEZONE.
Just wondering which PowerCLI version are you using?
For me the TimeZone parameter is available with OSType Linux
New-OSCustomizationSpec -OSType Linux -TimeZone
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
PS C:\> New-OSCustomizationSpec -Name linux-custspec-one-nic -Domain corp.local -DnsServer "223.5.5.5" -OSType Linux -FullName CORP -OrgName CORP -DnsSuffix corp.local -Description 'This is a CentOS Customization Specification.' -Timezone China
New-OSCustomizationSpec: 6/28/2021 10:53:55 PM New-OSCustomizationSpec You must specify only parameters that belong to the same parameter set, Windows or Linux.
PS C:\>
About "You must specify only parameters that belong to the same parameter set, Windows or Linux."
What's the meaning?
PS C:\> $PSVersionTable.PSVersion
Major Minor Patch PreReleaseLabel BuildLabel
----- ----- ----- --------------- ----------
7 0 0
PS C:\> $host.version
Major Minor Build Revision
----- ----- ----- --------
7 0 0 -1
PS C:\> Get-PowerCLIversion
PowerCLI Version
----------------
VMware PowerCLI 11.5.0 build 14912921
---------------
Component Versions
---------------
VMware Common PowerCLI Component 11.5 build 14898112
VMware Cis Core PowerCLI Component PowerCLI Component 11.5 build 14898113
VMware VimAutomation VICore Commands PowerCLI Component PowerCLI Component 11.5 build 14899560
PS C:\>
Several PowerShell (and PowerCLI) cmdlets have so-called ParametersSets.
In short, some parameters can not be combined with other parameters.
This also goes for the New-OSCustomizationSpec cmdlet, there is a Linux and a Windows parameterset.
In your code the -OSType Linux indicates that you are using the Linux parameterset, and then parameters like OrgName and FullName are not allowed.
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
I don't see that Linux has the Timezone parameter.
$custMgr = Get-View CustomizationSpecManager
$item = New-Object VMware.Vim.CustomizationSpecItem
$item.Info = New-Object VMware.Vim.CustomizationSpecInfo
$item.Info.Description = "This is a CentOS Customization Specification."
$item.Info.Name = "linux-custspec-one-nic"
$item.Info.Type = "Linux"
$item.Spec = New-Object VMware.Vim.CustomizationSpec
$item.Spec.GlobalIPSettings = New-Object VMware.Vim.CustomizationGlobalIPSettings
$item.Spec.Identity = New-Object VMware.Vim.CustomizationLinuxPrep
$item.Spec.Identity.Domain = "corp.local"
$item.Spec.Identity.HostName = New-Object VMware.Vim.CustomizationVirtualMachineName
$item.Spec.Identity.HwClockUTC = $false
$item.Spec.Identity.TimeZone = "Asia/Shanghai"
$item.Spec.Options = New-Object VMware.Vim.CustomizationLinuxOptions
$item.Spec.GlobalIPSettings = New-Object VMware.Vim.CustomizationGlobalIPSettings
$item.Spec.GlobalIPSettings.DnsServerList = New-Object String[] (1)
$item.Spec.GlobalIPSettings.DnsServerList[0] = '223.5.5.5'
$item.Spec.NicSettingMap = New-Object VMware.Vim.CustomizationAdapterMapping[] (1)
$item.Spec.NicSettingMap[0] = New-Object VMware.Vim.CustomizationAdapterMapping
$item.Spec.NicSettingMap[0].Adapter = New-Object VMware.Vim.CustomizationIPSettings
$item.Spec.NicSettingMap[0].Adapter.Ip = New-Object VMware.Vim.CustomizationDhcpIpGenerator
$custMgr.CreateCustomizationSpec($item)
I Get the solution
https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/Required-vSphere-Permissions-to-Run-So...
There is indeed an issue with that cmdlet, see also customization specification set timezone linux - VMware Technology Network VMTN
As an alternative, you could use the API directly.
Something like this
$custMgr = Get-View CustomizationSpecManager
$item = New-Object -TypeName VMware.Vim.CustomizationSpecItem
$info = New-Object -TypeName VMware.Vim.CustomizationSpecInfo
$info.Name = 'Test'
$info.type = 'Linux'
$info.Description = 'Test description'
$spec = New-Object -TypeName VMware.Vim.CustomizationSpec
$identity = New-Object -TypeName VMware.Vim.CustomizationLinuxPrep
$identity.HostName = New-Object -TypeName VMware.Vim.CustomizationFixedName
$identity.HostName.Name = 'TestHost'
$identity.Domain = 'test.domain'
$identity.TimeZone = 'Europe/Brussels'
$spec.Identity = $identity
$ip = New-Object -TypeName VMware.Vim.CustomizationGlobalIPSettings
$ip.DnsServerList = '192.168.1.1','192.168.1.2'
$ip.DnsSuffixList = 'test.domain'
$spec.GlobalIPSettings = $ip
$item.Info = $info
$item.Spec = $spec
$custMgr.CreateCustomizationSpec($item)
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Thank you for your enthusiastic answer 🙂