Register-VirtualMachine
VMware: Register a new virtual machine
#Requires -Version 5.1
#Requires -Modules VMware.VimAutomation.Core
[CmdletBinding(DefaultParameterSetName = "Default")]
Param(
[Parameter(Mandatory = $true, ParameterSetName = "Default")]
[Parameter(Mandatory = $true, ParameterSetName = "onCluster")]
[string]$VIServer,
[Parameter(Mandatory = $true, ParameterSetName = "Default")]
[Parameter(Mandatory = $true, ParameterSetName = "onCluster")]
[pscredential]$VICredential,
[Parameter(Mandatory = $true, ParameterSetName = "Default")]
[Parameter(Mandatory = $true, ParameterSetName = "onCluster")]
[string]$HostName,
[Parameter(Mandatory = $true, ParameterSetName = "Default")]
[string]$VMName,
[Parameter(Mandatory = $true, ParameterSetName = "onCluster")]
[string]$NameOfVM,
[Parameter(Mandatory = $true, ParameterSetName = "Default")]
[Parameter(Mandatory = $true, ParameterSetName = "onCluster")]
[string]$VMFilePath,
[Parameter(Mandatory = $true, ParameterSetName = "onCluster")]
[string]$ClusterName,
[Parameter(ParameterSetName = "Default")]
[Parameter(ParameterSetName = "onCluster")]
[string]$Notes,
[Parameter(ParameterSetName = "Default")]
[Parameter(ParameterSetName = "onCluster")]
[string]$Location,
[Parameter(ParameterSetName = "onCluster")]
[ValidateSet("FullyAutomated", "Manual", "PartiallyAutomated", "AsSpecifiedByCluster", "Disabled")]
[string]$DrsAutomationLevel,
[Parameter(ParameterSetName = "onCluster")]
[ValidateSet("AsSpecifiedByCluster", "PowerOff", "DoNothing")]
[string]$HAIsolationResponse,
[Parameter(ParameterSetName = "onCluster")]
[ValidateSet("Disabled", "Low", "Medium", "High", "ClusterRestartPriority")]
[string]$HARestartPriority
)
Process {
$vmServer = $null
try {
[string[]]$Properties = @('Name', 'Id', 'NumCpu', 'CoresPerSocket', 'Notes', 'GuestId', 'MemoryGB', 'VMSwapfilePolicy', 'ProvisionedSpaceGB', 'Folder')
if ([System.String]::IsNullOrWhiteSpace($Notes)) { $Notes = " " }
$vmServer = Connect-VIServer -Server $VIServer -Credential $VICredential -ErrorAction Stop
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$vmHost = Get-VMHost -Server $vmServer -Name $HostName -ErrorAction Stop
$cmdArgs = @{ ErrorAction = 'Stop'; Server = $vmServer; Name = $VMName; VMHost = $vmHost; Notes = $Notes; Confirm = $false; VMFilePath = $VMFilePath }
if ($PSCmdlet.ParameterSetName -eq "onCluster") {
$store = Get-Cluster -Server $vmServer -Name $ClusterName -ErrorAction Stop
$cmdArgs['Name'] = $NameOfVM
$cmdArgs.Add('ResourcePool', $store)
}
if (-not [System.String]::IsNullOrEmpty($Location)) {
$folder = Get-Folder -Server $vmServer -Name $Location -ErrorAction Stop
$cmdArgs.Add('Location', $folder)
}
$machine = New-VM @cmdArgs
if ($PSCmdlet.ParameterSetName -eq "onCluster") {
if ($PSBoundParameters.ContainsKey('DrsAutomationLevel')) { $null = Set-VM -Server $vmServer -VM $machine -DrsAutomationLevel $DrsAutomationLevel -Confirm:$False -ErrorAction Stop }
if ($PSBoundParameters.ContainsKey('HAIsolationResponse')) { $null = Set-VM -Server $vmServer -VM $machine -HAIsolationResponse $HAIsolationResponse -Confirm:$False -ErrorAction Stop }
if ($PSBoundParameters.ContainsKey('HARestartPriority')) { $null = Set-VM -Server $vmServer -VM $machine -HARestartPriority $HARestartPriority -Confirm:$False -ErrorAction Stop }
}
$result = Get-VM -Server $vmServer -Name $VMName | Select-Object $Properties
foreach ($item in $result) {
$item | Add-Member -NotePropertyName 'Timestamp' -NotePropertyValue $timestamp -Force
Write-Output $item
}
}
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
Name of the host for the new VM
Name for the new virtual machine
Name for the new VM (cluster parameter set)
Path to the VM file to register
Datastore cluster where to place the VM
Description of the new VM
Folder where to place the new VM
DRS automation level
HA isolation response
HA restart priority