VMware Cloud Community
YanSi
Enthusiast
Enthusiast
Jump to solution

About VM Customization Specifications Time Zone Setting

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.

0 Kudos
1 Solution

Accepted Solutions
YanSi
Enthusiast
Enthusiast
Jump to solution

$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)

 

YanSi_0-1624893677105.png

I Get the solution
https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/Required-vSphere-Permissions-to-Run-So...

 

View solution in original post

0 Kudos
12 Replies
LucD
Leadership
Leadership
Jump to solution

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

0 Kudos
YanSi
Enthusiast
Enthusiast
Jump to solution

Okay, it seems that I can only edit it manually.

0 Kudos
LucD
Leadership
Leadership
Jump to solution

Edit what?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
YanSi
Enthusiast
Enthusiast
Jump to solution

Manually edit the linux configuration file in [VM Customization Specifications] to configure TIMEZONE.

YanSi_0-1624889837232.png

 

0 Kudos
LucD
Leadership
Leadership
Jump to solution

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

0 Kudos
YanSi
Enthusiast
Enthusiast
Jump to solution

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?

0 Kudos
YanSi
Enthusiast
Enthusiast
Jump to solution

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:\>
0 Kudos
LucD
Leadership
Leadership
Jump to solution

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

0 Kudos
YanSi
Enthusiast
Enthusiast
Jump to solution

YanSi_0-1624892823483.png

I don't see that Linux has the Timezone parameter.

0 Kudos
YanSi
Enthusiast
Enthusiast
Jump to solution

$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)

 

YanSi_0-1624893677105.png

I Get the solution
https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/Required-vSphere-Permissions-to-Run-So...

 

0 Kudos
LucD
Leadership
Leadership
Jump to solution

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

0 Kudos
YanSi
Enthusiast
Enthusiast
Jump to solution

Thank you for your enthusiastic answer 🙂

0 Kudos