I have been scripting alot of post tasks after creating a new cluster for a existing Workload domain in VCF. Here they are :

The first one is to join all your hosts to Active Directory for local authentication:

# Join Host to Active Directory

$adjoinusername = "adjoinusernamehere"
$adjoinpwd = Read-Host ("Please enter the password for user: $adjoinusername") -AsSecureString
$adjoinCredentials = New-Object System.Management.Automation.PSCredential($adjoinusername, $adjoinpwd)

$cluster = Get-Cluster | Out-GridView -OutputMode Single -Title "Select Cluster"
$hostsincluster = Get-Cluster $cluster | Get-VMHost | Sort-Object

foreach ($esxhost in $hostsincluster) {
  Get-VMHostAuthentication -VMHost $esxhost | Set-VMHostAuthentication -JoinDomain -Domain "YOURDOMAINHERE" -Credential $adjoinCredentials -Confirm:$false
}

This one will rename those nasty local datastores to their respective hostnames!

# rename local datastores

$datastoreNames = get-datastore datastore1*
foreach ($Datastore in $datastoreNames){
    write-host $Datastore.name "- " -NoNewline 
    $ESXHostFQDN = (get-ESXHost -id $(get-datastore $datastore).ExtensionData.host.key).name
    $ESXHostname = $ESXHostFQDN.Split(".")[0]
    $datastorenewname = $ESXHostname
    Get-datastore -name $datastore | Set-datastore -Name $datastorenewname
}

The next one will create a directory on the local datastore for the host which has the name of the host.

# create scratch dir on local datastores

$cluster = Get-Cluster | Out-GridView -OutputMode Single -Title "Select Cluster"
$hostsincluster = Get-Cluster $cluster | Get-VMHost | Sort-Object

foreach ($esxhost in $hostsincluster) {
  $datastore = Get-Datastore -Name $esxhost.Name.Substring(0, 14)
  New-PSDrive -Location $datastore -Name DS -PSProvider VimDatastore -Root ""
  New-Item -Path DS:scratch -ItemType Directory
  Remove-PSDrive -Name DS -Confirm:$false
}

and finally i needed to set the advanced setting to move the scratch dir to that local datastore and reboot the host, this one will do it for an entire cluster 1 host at a time.

# Set scratch location

$cluster = Get-Cluster | Out-GridView -OutputMode Single -Title "Select Cluster"
$hostsincluster = Get-Cluster $cluster | Get-VMHost | Sort-Object

foreach ($esxhost in $hostsincluster) {
  $location = "/vmfs/volumes/" + $esxhost.Name.Substring(0, 14) + "/scratch"
  Get-VMHost $esxhost | Get-AdvancedSetting ScratchConfig.ConfiguredScratchLocation | Set-AdvancedSetting -Value $location -Confirm:$false
  #enter maintenance mode
  Set-VMHost $esxhost -State Maintenance -Evacuate -VsanDataMigrationMode EnsureAccessibility
  #wait for maintenance mode/evacuate
  do {
    sleep 10
    $ConnectionState = (get-vmhost $esxhost).ConnectionState
  }
  while ($ConnectionState -eq "Connected")
  #reboot vmhost
  Restart-VMHost $esxhost -Confirm:$false | Out-Null
  #wait for not responding state
  do {
    sleep 10
    $ConnectionState = (get-vmhost $esxhost).ConnectionState
  }
  while ($ConnectionState -eq "Maintenance")

  #wait for maintenance mode state
  do {
    sleep 10
    $ConnectionState = (get-vmhost $esxhost).ConnectionState
  }
  while ($ConnectionState -eq "NotResponding")
  #exit maintenance mode
  Set-VMhost $esxhost -State Connected -Confirm:$false | Out-Null

}

The original article was posted on: www.hollebollevsan.nl

Related articles

  • Cloud Native
  • Implementation and Adoption
  • Platform Engineering
  • Hybrid Cloud
  • Private: ITTS (IT Transformation Services)
  • Private: Managed Security Operations
  • Managed Cloud Platform
  • Private: Backup & Disaster Recovery
Visit our knowledge hub
Visit our knowledge hub
Paul van Dieën Virtualization Consultant

Let's talk!

Knowledge is key for our existence. This knowledge we use for disruptive innovation and changing organizations. Are you ready for change?

"*" indicates required fields

First name*
Last name*
Hidden