From 5a0bb408ba7c88b0dfcc26cbbac112c39afb40d5 Mon Sep 17 00:00:00 2001 From: Wouter Kursten Date: Sat, 7 Apr 2018 11:26:06 +0200 Subject: [PATCH 01/16] Added get-hvhealth --- .../VMware.Hv.Helper/VMware.HV.Helper.psm1 | 98 ++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 index 0f9a2f9..36e66e0 100644 --- a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 +++ b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 @@ -9990,4 +9990,100 @@ function Reset-HVMachine { } } -Export-ModuleMember Add-HVDesktop,Add-HVRDSServer,Connect-HVEvent,Disconnect-HVEvent,Get-HVPoolSpec,Get-HVInternalName, Get-HVEvent,Get-HVFarm,Get-HVFarmSummary,Get-HVPool,Get-HVPoolSummary,Get-HVMachine,Get-HVMachineSummary,Get-HVQueryResult,Get-HVQueryFilter,New-HVFarm,New-HVPool,Remove-HVFarm,Remove-HVPool,Set-HVFarm,Set-HVPool,Start-HVFarm,Start-HVPool,New-HVEntitlement,Get-HVEntitlement,Remove-HVEntitlement, Set-HVMachine, New-HVGlobalEntitlement, Remove-HVGlobalEntitlement, Get-HVGlobalEntitlement, Set-HVApplicationIcon, Remove-HVApplicationIcon, Get-HVGlobalSettings, Set-HVGlobalSettings, Set-HVGlobalEntitlement, Get-HVResourceStructure, Get-hvlocalsession, Get-HVGlobalSession, Reset-HVMachine +function get-hvhealth { + <# + .Synopsis + Pulls health information from Horizon View + + .DESCRIPTION + Queries and returns health information from the local Horizon Pod + + .PARAMETER Servicename + The name of the service to query the health for. + This will default to Connection server health. + Available services are ADDomain,CertificateSSOConnector,ConnectionServer,EventDatabase,SAMLAuthenticator,SecurityServer,ViewComposer,VirtualCenter + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + get-hvhealth -service connectionserver + Returns health for the connectionserver(s) + + + .EXAMPLE + get-hvhealth -service ViewComposer + Returns health for the View composer server(s) + + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $true, + ConfirmImpact = 'High' + )] + + param( + + [Parameter(Mandatory = $false)] + [ValidateSet('ADDomain', 'CertificateSSOConnector', 'ConnectionServer', 'EventDatabase', 'SAMLAuthenticator', 'SecurityServer', 'ViewComposer', 'VirtualCenter')] + [string] + $Servicename = 'ConnectionServer', + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + + switch ($Servicename) { + 'ADDomain' { + $healthinfo=$services.ADDomainHealth.ADDomainHealth_List() + } + 'CertificateSSOConnector' { + $healthinfo=$services.CertificateSSOConnectorHealth.CertificateSSOConnectorHealth_list() + } + 'ConnectionServer' { + $healthinfo=$services.ConnectionServerHealth.ConnectionServerHealth_list() + } + 'EventDatabase' { + $healthinfo=$services.EventDatabaseHealth.EventDatabaseHealth_Get() + } + 'SAMLAuthenticator' { + $healthinfo=$services.SAMLAuthenticatorHealth.SAMLAuthenticatorHealth_List() + } + 'SecurityServer' { + $healthinfo=$services.SecurityServerHealth.SecurityServerHealth_List() + } + 'ViewComposer' { + $healthinfo=$services.ViewComposerHealth.ViewComposerHealth_List() + } + 'VirtualCenter' { + $healthinfo=$services.VirtualCenterHealth.VirtualCenterHealth_List() + } + } + if ($healthinfo){ + return $healthinfo + } + else { + Write-Output "No healthdata found for the $servicename service" + } + [System.gc]::collect() +} + + +Export-ModuleMember Add-HVDesktop,Add-HVRDSServer,Connect-HVEvent,Disconnect-HVEvent,Get-HVPoolSpec,Get-HVInternalName, Get-HVEvent,Get-HVFarm,Get-HVFarmSummary,Get-HVPool,Get-HVPoolSummary,Get-HVMachine,Get-HVMachineSummary,Get-HVQueryResult,Get-HVQueryFilter,New-HVFarm,New-HVPool,Remove-HVFarm,Remove-HVPool,Set-HVFarm,Set-HVPool,Start-HVFarm,Start-HVPool,New-HVEntitlement,Get-HVEntitlement,Remove-HVEntitlement, Set-HVMachine, New-HVGlobalEntitlement, Remove-HVGlobalEntitlement, Get-HVGlobalEntitlement, Set-HVApplicationIcon, Remove-HVApplicationIcon, Get-HVGlobalSettings, Set-HVGlobalSettings, Set-HVGlobalEntitlement, Get-HVResourceStructure, Get-hvlocalsession, Get-HVGlobalSession, Reset-HVMachine, Get-HVHealth From 969d31fcfbf5f82aea40d43f3730b36a40f87426 Mon Sep 17 00:00:00 2001 From: Wouter Kursten Date: Sun, 8 Apr 2018 10:56:34 +0200 Subject: [PATCH 02/16] added pod to get-hvhealth --- Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 index 36e66e0..35c090c 100644 --- a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 +++ b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 @@ -10001,7 +10001,7 @@ function get-hvhealth { .PARAMETER Servicename The name of the service to query the health for. This will default to Connection server health. - Available services are ADDomain,CertificateSSOConnector,ConnectionServer,EventDatabase,SAMLAuthenticator,SecurityServer,ViewComposer,VirtualCenter + Available services are ADDomain,CertificateSSOConnector,ConnectionServer,EventDatabase,SAMLAuthenticator,SecurityServer,ViewComposer,VirtualCenter,Pod .PARAMETER HvServer Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then @@ -10035,7 +10035,7 @@ function get-hvhealth { param( [Parameter(Mandatory = $false)] - [ValidateSet('ADDomain', 'CertificateSSOConnector', 'ConnectionServer', 'EventDatabase', 'SAMLAuthenticator', 'SecurityServer', 'ViewComposer', 'VirtualCenter')] + [ValidateSet('ADDomain', 'CertificateSSOConnector', 'ConnectionServer', 'EventDatabase', 'SAMLAuthenticator', 'SecurityServer', 'ViewComposer', 'VirtualCenter', 'pod')] [string] $Servicename = 'ConnectionServer', @@ -10075,6 +10075,9 @@ function get-hvhealth { 'VirtualCenter' { $healthinfo=$services.VirtualCenterHealth.VirtualCenterHealth_List() } + 'Pod' { + $healthinfo=$services.podhealth.PodHealth_List() + } } if ($healthinfo){ return $healthinfo From 373b90909584ee0b80a9687eab500536af48c95f Mon Sep 17 00:00:00 2001 From: Wouter Kursten Date: Wed, 25 Apr 2018 11:52:50 +0200 Subject: [PATCH 03/16] added multiple podfederation functions --- .../VMware.Hv.Helper/VMware.HV.Helper.psm1 | 388 +++++++++++++++++- 1 file changed, 387 insertions(+), 1 deletion(-) diff --git a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 index 35c090c..03e2585 100644 --- a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 +++ b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 @@ -10088,5 +10088,391 @@ function get-hvhealth { [System.gc]::collect() } +function new-hvpodfederation { + <# + .Synopsis + Initiates a Horizon View Pod Federation (Cloud Pod Architecture) + + .DESCRIPTION + Starts the initialisation of a Horizon View Pod Federation. Other pod's can be joined to this federation to form the Cloud Pod Architecture + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + new-hvpodfederation + Returns health for the connectionserver(s) -Export-ModuleMember Add-HVDesktop,Add-HVRDSServer,Connect-HVEvent,Disconnect-HVEvent,Get-HVPoolSpec,Get-HVInternalName, Get-HVEvent,Get-HVFarm,Get-HVFarmSummary,Get-HVPool,Get-HVPoolSummary,Get-HVMachine,Get-HVMachineSummary,Get-HVQueryResult,Get-HVQueryFilter,New-HVFarm,New-HVPool,Remove-HVFarm,Remove-HVPool,Set-HVFarm,Set-HVPool,Start-HVFarm,Start-HVPool,New-HVEntitlement,Get-HVEntitlement,Remove-HVEntitlement, Set-HVMachine, New-HVGlobalEntitlement, Remove-HVGlobalEntitlement, Get-HVGlobalEntitlement, Set-HVApplicationIcon, Remove-HVApplicationIcon, Get-HVGlobalSettings, Set-HVGlobalSettings, Set-HVGlobalEntitlement, Get-HVResourceStructure, Get-hvlocalsession, Get-HVGlobalSession, Reset-HVMachine, Get-HVHealth + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $false, + ConfirmImpact = 'High' + )] + + param( + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + $services.PodFederation.PodFederation_Initialize() + + Write-Output "The Pod Federation has been initiated. Please wait a couple of minutes and refresh any open admin consoles to use the newly available functionality." + + [System.gc]::collect() +} + +function remove-hvpodfederation { + <# + .Synopsis + Uninitiates a Horizon View Pod Federation (Cloud Pod Architecture) + + .DESCRIPTION + Starts the uninitialisation of a Horizon View Pod Federation. It does NOT remove a pod from a federation. + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + Starts the Uninitiates a Horizon View Pod Federation. + Unintialises + + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $false, + ConfirmImpact = 'High' + )] + + param( + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + $services.PodFederation.PodFederation_Uninitialize() + + Write-Output "The uninitialisation of the Pod Federation has been started. Please wait a couple of minutes and refresh any open admin consoles to see the results." + + [System.gc]::collect() +} + +function get-hvpodfederation { + <# + .Synopsis + Returns information about a Horizon View Pod Federation (Cloud Pod Architecture) + + .DESCRIPTION + Returns information about a Horizon View Pod Federation (Cloud Pod Architecture) + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + get-hvpodfederation + Returns information about a Horizon View Pod Federation + + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $false, + ConfirmImpact = 'High' + )] + + param( + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + $podfederationinfo=$services.PodFederation.PodFederation_Get() + return $podfederationinfo + + [System.gc]::collect() +} + +function register-hvpod { + <# + .Synopsis + Registers a pod in a Horizon View Pod Federation (Cloud Pod Architecture) + + .DESCRIPTION + Registers a pod in a Horizon View Pod Federation. You have to be connected to the pod you are joining to the federation. + + .PARAMETER ADUserName + User principal name of user + + .PARAMETER remoteconnectionserver + Servername of a connectionserver that already belongs to the PodFederation + + .PARAMETER ADPassword + Password of the type Securestring. Can be created with: + $password = Read-Host 'Domain Password' -AsSecureString + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + C:\PS>$adpassword = Read-Host 'Domain Password' -AsSecureString + C:\PS>register-hvpod -remoteconnectionserver "servername" -username "user\domain" -password $adpassword + + .EXAMPLE + register-hvpod -remoteconnectionserver "servername" -username "user\domain" + It will now ask for the password + + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $false, + ConfirmImpact = 'High' + )] + + param( + [Parameter(Mandatory = $true)] + [String] + $remoteconnectionserver, + + [Parameter(Mandatory = $true)] + [ValidatePattern("^.+?[@\\].+?$")] + [String] + $ADUserName, + + [Parameter(Mandatory = $false)] + [SecureString] + $ADpassword, + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + + if (!$ADPassword) { + $ADPassword= Read-Host 'Please provide the Active Directory password for user $AdUsername' -AsSecureString + } + + #$unsecurepassword=$ADPassword | ConvertFrom-SecureString + $vcPassword = New-Object VMware.Hv.SecureString + $enc = [system.Text.Encoding]::UTF8 + $vcPassword.Utf8String = $enc.GetBytes(($ADPassword | ConvertFrom-SecureString)) + + $services.PodFederation.PodFederation_join($remoteconnectionserver,$user,$svcpassword) + write-host "This pod has been joined to the podfederation." + + [System.gc]::collect() +} + +function unregister-hvpod { + <# + .Synopsis + Removes a pod from a podfederation + + .DESCRIPTION + Starts the uninitialisation of a Horizon View Pod Federation. It does NOT remove a pod from a federation. + + .PARAMETER Podname + The name of the pod to be removed. + + .PARAMETER Force + This can be used to forcefully remove a pod from the pod federation. This can only be done while connected to one of the other pods in the federation + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + Unregister-hvpod -podname PODNAME + Checks if you are connected to the pod and gracefully unregisters it from the podfedaration + + .EXAMPLE + Unregister-hvpod -podname PODNAME -force + Checks if you are connected to the pod and gracefully unregisters it from the podfedaration + + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $false, + ConfirmImpact = 'High' + )] + + param( + [Parameter(Mandatory = $true)] + [string] + $PodName, + + [Parameter(Mandatory = $true)] + [switch] + $force=$false, + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + $pods=$services.pod.pod_list() + $pod=$pods | where-object {$_.displayname -like "$podname"} + if ($force -eq $false){ + if ($pod.localpod -eq $False){ + Write-Error "You can only gracefully remove a pod when connected to that pod, please connect to a connection server in pod $podname" + break + } + elseif ($pod.localpod -eq $True){ + write-host "Gracefully removing $podname from the federation" + $services.PodFederation.PodFederation_Unjoin() + } + } + + elseif ($force -eq $true){ + if ($pod.localpod -eq $True){ + Write-Error "You can only forcefully remove a pod when connected to a different pod, please connect to a connection server in another pod then $podname" + break + } + elseif ($pod.localpod -eq $false){ + write-host "Forcefully removing $podname from the federation" + $services.PodFederation.PodFederation_eject($pod.id) + } + } + + + + [System.gc]::collect() +} + +function set-hvpodfederation { + <# + .Synopsis + Used to change the name of a Horizon View Pod Federation (Cloud Pod Architecture) + + .DESCRIPTION + Used to change the name of a Horizon View Pod Federation (Cloud Pod Architecture) + + .PARAMETER Name + The new name of the Pod Federation. + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + set-hvpodfederation -name "New Name" + Will update the name of the current podfederation. + + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $false, + ConfirmImpact = 'High' + )] + + param( + [Parameter(Mandatory = $true)] + [string] + $name, + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + $podservice=new-object vmware.hv.podfederationservice + $podservicehelper=$podservice.read($services) + $podservicehelper.getDatahelper().setdisplayname($name) + $podservice.update($services, $podservicehelper) + get-hvpodfederation + + [System.gc]::collect() +} + +Export-ModuleMember Add-HVDesktop,Add-HVRDSServer,Connect-HVEvent,Disconnect-HVEvent,Get-HVPoolSpec,Get-HVInternalName, Get-HVEvent,Get-HVFarm,Get-HVFarmSummary,Get-HVPool,Get-HVPoolSummary,Get-HVMachine,Get-HVMachineSummary,Get-HVQueryResult,Get-HVQueryFilter,New-HVFarm,New-HVPool,Remove-HVFarm,Remove-HVPool,Set-HVFarm,Set-HVPool,Start-HVFarm,Start-HVPool,New-HVEntitlement,Get-HVEntitlement,Remove-HVEntitlement, Set-HVMachine, New-HVGlobalEntitlement, Remove-HVGlobalEntitlement, Get-HVGlobalEntitlement, Set-HVApplicationIcon, Remove-HVApplicationIcon, Get-HVGlobalSettings, Set-HVGlobalSettings, Set-HVGlobalEntitlement, Get-HVResourceStructure, Get-hvlocalsession, Get-HVGlobalSession, Reset-HVMachine, Get-HVHealth, new-hvpodfederation, remove-hvpodfederation, get-hvpodfederation, register-hvpod, unregister-hvpod, set-hvpodfederation From d987a7535b99f804df0b0e4b147e3991bf246bcd Mon Sep 17 00:00:00 2001 From: Markus Kraus Date: Wed, 25 Apr 2018 22:48:38 +0200 Subject: [PATCH 04/16] vCD-Module _Update --- Modules/VMware-vCD-Module/LICENSE | 21 +++ .../VMware-vCD-Module/VMware-vCD-Module.psd1 | 58 +++--- .../functions/Invoke-MyOnBoarding.psm1 | 16 +- .../functions/New-MyEdgeGateway.psm1 | 18 +- .../functions/New-MyOrg.psm1 | 4 +- .../functions/New-MyOrgAdmin.psm1 | 4 +- .../functions/New-MyOrgNetwork.psm1 | 166 ++++++++++++++++++ .../functions/New-MyOrgVdc.psm1 | 59 ++++--- 8 files changed, 275 insertions(+), 71 deletions(-) create mode 100644 Modules/VMware-vCD-Module/LICENSE create mode 100644 Modules/VMware-vCD-Module/functions/New-MyOrgNetwork.psm1 diff --git a/Modules/VMware-vCD-Module/LICENSE b/Modules/VMware-vCD-Module/LICENSE new file mode 100644 index 0000000..0fa220a --- /dev/null +++ b/Modules/VMware-vCD-Module/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Markus Kraus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Modules/VMware-vCD-Module/VMware-vCD-Module.psd1 b/Modules/VMware-vCD-Module/VMware-vCD-Module.psd1 index 27584d1..bf67094 100644 --- a/Modules/VMware-vCD-Module/VMware-vCD-Module.psd1 +++ b/Modules/VMware-vCD-Module/VMware-vCD-Module.psd1 @@ -1,5 +1,5 @@ # -# Modulmanifest für das Modul "PSGet_VMware-vCD-Module" +# Modulmanifest f�r das Modul "PSGet_VMware-vCD-Module" # # Generiert von: Markus # @@ -8,52 +8,52 @@ @{ -# Die diesem Manifest zugeordnete Skript- oder Binärmoduldatei. +# Die diesem Manifest zugeordnete Skript- oder Bin�rmoduldatei. # RootModule = '' # Die Versionsnummer dieses Moduls -ModuleVersion = '1.0.0' +ModuleVersion = '1.3.0' # ID zur eindeutigen Kennzeichnung dieses Moduls GUID = '1ef8a2de-ca22-4c88-8cdb-e00f35007d2a' # Autor dieses Moduls -Author = 'Markus' +Author = 'Markus Kraus' # Unternehmen oder Hersteller dieses Moduls CompanyName = 'mycloudrevolution.com' -# Urheberrechtserklärung für dieses Modul +# Urheberrechtserkl�rung f�r dieses Modul Copyright = '(c) 2017 Markus. Alle Rechte vorbehalten.' # Beschreibung der von diesem Modul bereitgestellten Funktionen -# Description = '' +Description = 'This a POwerShell Module based on VMware PowerCLI vCloud Director Module to extend its function' -# Die für dieses Modul mindestens erforderliche Version des Windows PowerShell-Moduls +# Die f�r dieses Modul mindestens erforderliche Version des Windows PowerShell-Moduls # PowerShellVersion = '' -# Der Name des für dieses Modul erforderlichen Windows PowerShell-Hosts +# Der Name des f�r dieses Modul erforderlichen Windows PowerShell-Hosts # PowerShellHostName = '' -# Die für dieses Modul mindestens erforderliche Version des Windows PowerShell-Hosts +# Die f�r dieses Modul mindestens erforderliche Version des Windows PowerShell-Hosts # PowerShellHostVersion = '' -# Die für dieses Modul mindestens erforderliche Microsoft .NET Framework-Version +# Die f�r dieses Modul mindestens erforderliche Microsoft .NET Framework-Version # DotNetFrameworkVersion = '' -# Die für dieses Modul mindestens erforderliche Version der CLR (Common Language Runtime) +# Die f�r dieses Modul mindestens erforderliche Version der CLR (Common Language Runtime) # CLRVersion = '' -# Die für dieses Modul erforderliche Prozessorarchitektur ("Keine", "X86", "Amd64"). +# Die f�r dieses Modul erforderliche Prozessorarchitektur ("Keine", "X86", "Amd64"). # ProcessorArchitecture = '' -# Die Module, die vor dem Importieren dieses Moduls in die globale Umgebung geladen werden müssen -# RequiredModules = @() +# Die Module, die vor dem Importieren dieses Moduls in die globale Umgebung geladen werden m�ssen +RequiredModules = @('VMware.VimAutomation.Cloud') -# Die Assemblys, die vor dem Importieren dieses Moduls geladen werden müssen +# Die Assemblys, die vor dem Importieren dieses Moduls geladen werden m�ssen # RequiredAssemblies = @() -# Die Skriptdateien (PS1-Dateien), die vor dem Importieren dieses Moduls in der Umgebung des Aufrufers ausgeführt werden. +# Die Skriptdateien (PS1-Dateien), die vor dem Importieren dieses Moduls in der Umgebung des Aufrufers ausgef�hrt werden. # ScriptsToProcess = @() # Die Typdateien (.ps1xml), die beim Importieren dieses Moduls geladen werden sollen @@ -63,14 +63,16 @@ Copyright = '(c) 2017 Markus. Alle Rechte vorbehalten.' # FormatsToProcess = @() # Die Module, die als geschachtelte Module des in "RootModule/ModuleToProcess" angegebenen Moduls importiert werden sollen. -NestedModules = @('functions\Invoke-MyOnBoarding.psm1', +NestedModules = @('functions\Invoke-MyOnBoarding.psm1', 'functions\New-MyEdgeGateway.psm1', - 'functions\New-MyOrg.psm1', - 'functions\New-MyOrgAdmin.psm1', - 'functions\New-MyOrgVdc.psm1') + 'functions\New-MyOrg.psm1', + 'functions\New-MyOrgAdmin.psm1', + 'functions\New-MyOrgVdc.psm1', + 'functions\New-MyOrgNetwork.psm1' + ) # Aus diesem Modul zu exportierende Funktionen -FunctionsToExport = 'Invoke-MyOnBoarding', 'New-MyEdgeGateway', 'New-MyOrg', 'New-MyOrgAdmin', 'New-MyOrgVdc' +FunctionsToExport = 'Invoke-MyOnBoarding', 'New-MyEdgeGateway', 'New-MyOrg', 'New-MyOrgAdmin', 'New-MyOrgVdc', 'New-MyOrgNetwork' # Aus diesem Modul zu exportierende Cmdlets CmdletsToExport = '*' @@ -90,28 +92,28 @@ AliasesToExport = '*' # Liste aller Dateien in diesem Modulpaket # FileList = @() -# Die privaten Daten, die an das in "RootModule/ModuleToProcess" angegebene Modul übergeben werden sollen. Diese können auch eine PSData-Hashtabelle mit zusätzlichen von PowerShell verwendeten Modulmetadaten enthalten. +# Die privaten Daten, die an das in "RootModule/ModuleToProcess" angegebene Modul �bergeben werden sollen. Diese k�nnen auch eine PSData-Hashtabelle mit zus�tzlichen von PowerShell verwendeten Modulmetadaten enthalten. PrivateData = @{ PSData = @{ # Tags applied to this module. These help with module discovery in online galleries. - # Tags = @() + Tags = @('VMware', 'vCloud', 'PowerCLI', 'vCloudDirector', 'Automation', 'EdgeGateway', 'OrgNetwork') # A URL to the license for this module. - # LicenseUri = '' + LicenseUri = 'https://github.com/mycloudrevolution/VMware-vCD-Module/blob/master/LICENSE' # A URL to the main website for this project. - # ProjectUri = '' + ProjectUri = 'https://github.com/mycloudrevolution/VMware-vCD-Module' # A URL to an icon representing this module. - # IconUri = '' + IconUri = 'https://github.com/mycloudrevolution/VMware-vCD-Module/blob/master/media/vCD_Small.png' # ReleaseNotes of this module # ReleaseNotes = '' # External dependent modules of this module - # ExternalModuleDependencies = '' + ExternalModuleDependencies = 'VMware.VimAutomation.Cloud' } # End of PSData hashtable @@ -120,7 +122,7 @@ PrivateData = @{ # HelpInfo-URI dieses Moduls # HelpInfoURI = '' -# Standardpräfix für Befehle, die aus diesem Modul exportiert werden. Das Standardpräfix kann mit "Import-Module -Prefix" überschrieben werden. +# Standardpr�fix f�r Befehle, die aus diesem Modul exportiert werden. Das Standardpr�fix kann mit "Import-Module -Prefix" �berschrieben werden. # DefaultCommandPrefix = '' } diff --git a/Modules/VMware-vCD-Module/functions/Invoke-MyOnBoarding.psm1 b/Modules/VMware-vCD-Module/functions/Invoke-MyOnBoarding.psm1 index 97e00ed..4d10fba 100644 --- a/Modules/VMware-vCD-Module/functions/Invoke-MyOnBoarding.psm1 +++ b/Modules/VMware-vCD-Module/functions/Invoke-MyOnBoarding.psm1 @@ -1,6 +1,4 @@ -#Requires -Version 4 -#Requires -Modules VMware.VimAutomation.Cloud, @{ModuleName="VMware.VimAutomation.Cloud";ModuleVersion="6.3.0.0"} -Function Invoke-MyOnBoarding { +Function Invoke-MyOnBoarding { <# .SYNOPSIS Creates all vCD Objecst for a new IAAS Customer @@ -158,18 +156,22 @@ Function Invoke-MyOnBoarding { if ($Configs.OrgVdc.ExternalNetwork -and $Configs.OrgVdc.EdgeGateway -like "Yes"){ Write-Host "Edge Gateway for Org VDC '$($Configs.OrgVdc.Name)' Requested!" - $Trash = New-MyOrgVdc -Name $Configs.OrgVdc.Name -CPULimit $CPULimit -MEMLimit $MEMLimit -StorageLimit $StorageLimit -Networkpool $Configs.OrgVdc.NetworkPool ` -StorageProfile $Configs.OrgVdc.StorageProfile -ProviderVDC $Configs.OrgVdc.ProviderVDC -Org $Configs.Org.Name -Enabled:$Enabled + $Trash = New-MyOrgVdc -Name $Configs.OrgVdc.Name -CPULimit $CPULimit -MEMLimit $MEMLimit -StorageLimit $StorageLimit -Networkpool $Configs.OrgVdc.NetworkPool ` + -StorageProfile $Configs.OrgVdc.StorageProfile -ProviderVDC $Configs.OrgVdc.ProviderVDC -Org $Configs.Org.Name -Enabled:$Enabled $EdgeName = $Configs.Org.Name + "-ESG01" - $Trash = New-MyEdgeGateway -Name $EdgeName -OrgVDCName $Configs.OrgVdc.Name -Orgname $Configs.Org.Name -ExternalNetwork $Configs.OrgVdc.ExternalNetwork ` -IPAddress $Configs.OrgVdc.IPAddress -SubnetMask $Configs.OrgVdc.SubnetMask -Gateway $Configs.OrgVdc.Gateway -IPRangeStart $Configs.OrgVdc.IPRangeStart -IPRangeEnd $Configs.OrgVdc.IPRangeEnd + $Trash = New-MyEdgeGateway -Name $EdgeName -OrgVDCName $Configs.OrgVdc.Name -Orgname $Configs.Org.Name -ExternalNetwork $Configs.OrgVdc.ExternalNetwork ` + -IPAddress $Configs.OrgVdc.IPAddress -SubnetMask $Configs.OrgVdc.SubnetMask -Gateway $Configs.OrgVdc.Gateway -IPRangeStart $Configs.OrgVdc.IPRangeStart -IPRangeEnd $Configs.OrgVdc.IPRangeEnd } elseif ($Configs.OrgVdc.ExternalNetwork -and $Configs.OrgVdc.EdgeGateway -like "No"){ Write-Host "External Network for Org VDC '$($Configs.OrgVdc.Name)' Requested!" - $Trash = New-MyOrgVdc -Name $Configs.OrgVdc.Name -CPULimit $CPULimit -MEMLimit $MEMLimit -StorageLimit $StorageLimit -Networkpool $Configs.OrgVdc.NetworkPool ` -StorageProfile $Configs.OrgVdc.StorageProfile -ProviderVDC $Configs.OrgVdc.ProviderVDC -ExternalNetwork $Configs.OrgVdc.ExternalNetwork -Org $Configs.Org.Name -Enabled:$Enabled + $Trash = New-MyOrgVdc -Name $Configs.OrgVdc.Name -CPULimit $CPULimit -MEMLimit $MEMLimit -StorageLimit $StorageLimit -Networkpool $Configs.OrgVdc.NetworkPool ` + -StorageProfile $Configs.OrgVdc.StorageProfile -ProviderVDC $Configs.OrgVdc.ProviderVDC -ExternalNetwork $Configs.OrgVdc.ExternalNetwork -Org $Configs.Org.Name -Enabled:$Enabled } else { Write-Host "No external Connection for Org VDC '$($Configs.OrgVdc.Name)' Requested!" - $Trash = New-PecOrgVdc -Name $Configs.OrgVdc.Name -CPULimit $CPULimit -MEMLimit $MEMLimit -StorageLimit $StorageLimit -Networkpool $ProVdcNetworkPool.Name ` -StorageProfile $Configs.OrgVdc.StorageProfile -ProviderVDC $Configs.OrgVdc.ProviderVDC -Org $Configs.Org.Name -Enabled:$Enabled + $Trash = New-PecOrgVdc -Name $Configs.OrgVdc.Name -CPULimit $CPULimit -MEMLimit $MEMLimit -StorageLimit $StorageLimit -Networkpool $ProVdcNetworkPool.Name ` + -StorageProfile $Configs.OrgVdc.StorageProfile -ProviderVDC $Configs.OrgVdc.ProviderVDC -Org $Configs.Org.Name -Enabled:$Enabled } Write-Host "$(Get-Date -Format "yyyy-MM-dd HH:mm:ss") Creating new OrgVdc OK" -ForegroundColor Green Get-OrgVdc -Org $Configs.Org.Name -Name $Configs.OrgVdc.Name | Select-Object Name, Enabled, CpuAllocationGhz, MemoryLimitGB, StorageLimitGB, AllocationModel, ThinProvisioned, UseFastProvisioning, ` diff --git a/Modules/VMware-vCD-Module/functions/New-MyEdgeGateway.psm1 b/Modules/VMware-vCD-Module/functions/New-MyEdgeGateway.psm1 index 205c635..dc8d8f8 100644 --- a/Modules/VMware-vCD-Module/functions/New-MyEdgeGateway.psm1 +++ b/Modules/VMware-vCD-Module/functions/New-MyEdgeGateway.psm1 @@ -1,6 +1,4 @@ -#Requires -Version 4 -#Requires -Modules VMware.VimAutomation.Cloud, @{ModuleName="VMware.VimAutomation.Cloud";ModuleVersion="6.3.0.0"} -Function New-MyEdgeGateway { +Function New-MyEdgeGateway { <# .SYNOPSIS Creates a new Edge Gateway with Default Parameters @@ -9,7 +7,6 @@ Function New-MyEdgeGateway { Creates a new Edge Gateway with Default Parameters Default Parameters are: - * Size * HA State * DNS Relay @@ -17,14 +14,14 @@ Function New-MyEdgeGateway { .NOTES File Name : New-MyEdgeGateway.ps1 Author : Markus Kraus - Version : 1.0 + Version : 1.1 State : Ready .LINK https://mycloudrevolution.com/ .EXAMPLE - New-MyEdgeGateway -Name "TestEdge" -OrgVDCName "TestVDC" -OrgName "TestOrg" -ExternalNetwork "ExternalNetwork" -IPAddress "192.168.100.1" -SubnetMask "255.255.255.0" -Gateway "192.168.100.254" -IPRangeStart ""192.168.100.2" -IPRangeEnd ""192.168.100.3" -Verbose + New-MyEdgeGateway -Name "TestEdge" -OrgVDCName "TestVDC" -OrgName "TestOrg" -Size compact -ExternalNetwork "ExternalNetwork" -IPAddress "192.168.100.1" -SubnetMask "255.255.255.0" -Gateway "192.168.100.254" -IPRangeStart ""192.168.100.2" -IPRangeEnd ""192.168.100.3" -Verbose .PARAMETER Name Name of the New Edge Gateway as String @@ -35,6 +32,9 @@ Function New-MyEdgeGateway { .PARAMETER OrgName Org where the new Edge Gateway should be created as string +.PARAMETER Size + Size of the new Edge Gateway as string + .PARAMETER ExternalNetwork External Network of the new Edge Gateway as String @@ -69,6 +69,10 @@ Function New-MyEdgeGateway { [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Org where the new Edge Gateway should be created as string")] [ValidateNotNullorEmpty()] [String] $OrgName, + [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Size of the new Edge Gateway as string")] + [ValidateNotNullorEmpty()] + [ValidateSet("compact","full")] + [String] $Size, [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="External Network of the New Edge Gateway as String")] [ValidateNotNullorEmpty()] [String] $ExternalNetwork, @@ -113,7 +117,7 @@ Function New-MyEdgeGateway { $EdgeGateway.Name = $Name $EdgeGateway.Configuration = New-Object VMware.VimAutomation.Cloud.Views.GatewayConfiguration #$EdgeGateway.Configuration.BackwardCompatibilityMode = $false - $EdgeGateway.Configuration.GatewayBackingConfig = "compact" + $EdgeGateway.Configuration.GatewayBackingConfig = $Size $EdgeGateway.Configuration.UseDefaultRouteForDnsRelay = $false $EdgeGateway.Configuration.HaEnabled = $false diff --git a/Modules/VMware-vCD-Module/functions/New-MyOrg.psm1 b/Modules/VMware-vCD-Module/functions/New-MyOrg.psm1 index 69565bb..6d995e4 100644 --- a/Modules/VMware-vCD-Module/functions/New-MyOrg.psm1 +++ b/Modules/VMware-vCD-Module/functions/New-MyOrg.psm1 @@ -1,6 +1,4 @@ -#Requires -Version 4 -#Requires -Modules VMware.VimAutomation.Cloud, @{ModuleName="VMware.VimAutomation.Cloud";ModuleVersion="6.3.0.0"} -Function New-MyOrg { +Function New-MyOrg { <# .SYNOPSIS Creates a new vCD Org with Default Parameters diff --git a/Modules/VMware-vCD-Module/functions/New-MyOrgAdmin.psm1 b/Modules/VMware-vCD-Module/functions/New-MyOrgAdmin.psm1 index 26087c0..227d30e 100644 --- a/Modules/VMware-vCD-Module/functions/New-MyOrgAdmin.psm1 +++ b/Modules/VMware-vCD-Module/functions/New-MyOrgAdmin.psm1 @@ -1,6 +1,4 @@ -#Requires -Version 4 -#Requires -Modules VMware.VimAutomation.Cloud, @{ModuleName="VMware.VimAutomation.Cloud";ModuleVersion="6.3.0.0"} -Function New-MyOrgAdmin { +Function New-MyOrgAdmin { <# .SYNOPSIS Creates a new vCD Org Admin with Default Parameters diff --git a/Modules/VMware-vCD-Module/functions/New-MyOrgNetwork.psm1 b/Modules/VMware-vCD-Module/functions/New-MyOrgNetwork.psm1 new file mode 100644 index 0000000..2d7bf5a --- /dev/null +++ b/Modules/VMware-vCD-Module/functions/New-MyOrgNetwork.psm1 @@ -0,0 +1,166 @@ +Function New-MyOrgNetwork { + <# + .SYNOPSIS + Creates a new Org Network with Default Parameters + + .DESCRIPTION + + .NOTES + File Name : New-MyOrgNetwork.ps1 + Author : Markus Kraus + Version : 1.1 + State : Ready + + .LINK + https://mycloudrevolution.com + + .EXAMPLE + New-MyOrgNetwork -Name Test -OrgVdcName "Test-OrgVDC" -OrgName "Test-Org" -EdgeName "Test-OrgEdge" -SubnetMask 255.255.255.0 -Gateway 192.168.66.1 -IPRangeStart 192.168.66.100 -IPRangeEnd 192.168.66.200 + + .EXAMPLE + New-MyOrgNetwork -Name Test -OrgVdcName "Test-OrgVDC" -OrgName "Test-Org" -EdgeName "Test-OrgEdge" -SubnetMask 255.255.255.0 -Gateway 192.168.66.1 -IPRangeStart 192.168.66.100 -IPRangeEnd 192.168.66.200 -Shared:$False + + .EXAMPLE + $params = @{ 'Name' = 'Test'; + 'OrgVdcName'= 'Test-OrgVDC'; + 'OrgName'='Test-Org'; + 'EdgeName'='Test-OrgEdge'; + 'SubnetMask' = '255.255.255.0'; + 'Gateway' = '192.168.66.1'; + 'IPRangeStart' = '192.168.66.100'; + 'IPRangeEnd' = '192.168.66.200' + } + New-MyOrgNetwork @params -Verbose + + .PARAMETER Name + Name of the New Org Network as String + + .PARAMETER OrgVDCName + OrgVDC where the new Org Network should be created as string + + .PARAMETER OrgName + Org where the newOrg Networkshould be created as string + + .PARAMETER EdgeName + Edge Gateway Name for the new Org Network as String + + .PARAMETER SubnetMask + Subnet Mask of the New Org Network as IP Address + + .PARAMETER Gateway + Gateway of the New Org Network as IP Address + + .PARAMETER IPRangeStart + IP Range Start of the New Org Network as IP Address + + .PARAMETER IPRangeEnd + IP Range End of the New Org Network as IP Address + + .PARAMETER Shared + Switch for Shared OrgVDC Network + + Default: $True + + .PARAMETER Timeout + Timeout for the Org Network to become Ready + + Default: 120s + + #> + Param ( + [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Name of the New Org Network as String")] + [ValidateNotNullorEmpty()] + [String] $Name, + [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="OrgVDC where the new Org Network should be created as string")] + [ValidateNotNullorEmpty()] + [String] $OrgVdcName, + [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Org where the new Org Network should be created as string")] + [ValidateNotNullorEmpty()] + [String] $OrgName, + [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Edge Gateway Name for the new Org Network as String")] + [ValidateNotNullorEmpty()] + [String] $EdgeName, + [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Subnet Mask of the New Org Network as IP Address")] + [ValidateNotNullorEmpty()] + [IPAddress] $SubnetMask, + [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Gateway of the New Org Network as IP Address")] + [ValidateNotNullorEmpty()] + [IPAddress] $Gateway, + [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="IP Range Start the New Org Network as IP Address")] + [ValidateNotNullorEmpty()] + [IPAddress] $IPRangeStart, + [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="IP Range End the New Org Network as IP Address")] + [ValidateNotNullorEmpty()] + [IPAddress] $IPRangeEnd, + [Parameter(Mandatory=$False, ValueFromPipeline=$False, HelpMessage="Switch for Shared OrgVDC Network")] + [ValidateNotNullorEmpty()] + [Bool] $Shared = $True, + [Parameter(Mandatory=$False, ValueFromPipeline=$False,HelpMessage="Timeout for the Org Network to become Ready")] + [ValidateNotNullorEmpty()] + [int] $Timeout = 120 + ) + Process { + + ## Get Org vDC + Write-Verbose "Get Org vDC" + [Array] $orgVdc = Get-Org -Name $OrgName | Get-OrgVdc -Name $OrgVdcName + + if ( $orgVdc.Count -gt 1) { + throw "Multiple OrgVdcs found!" + } + elseif ( $orgVdc.Count -lt 1) { + throw "No OrgVdc found!" + } + $orgVdcView = $orgVdc| Get-CIView + + ## Get EdgeGateway + Write-Verbose "Get EdgeGateway" + [Array] $edgeGateway = Search-Cloud -QueryType EdgeGateway -Name $EdgeName | Get-CIView + if ( $edgeGateway.Count -gt 1) { + throw "Multiple EdgeGateways found!" + } + elseif ( $edgeGateway.Count -lt 1) { + throw "No EdgeGateway found!" + } + + ## Define Org Network + Write-Verbose "Define Org Network" + $OrgNetwork = new-object vmware.vimautomation.cloud.views.orgvdcnetwork + $OrgNetwork.name = $Name + $OrgNetwork.edgegateway = $edgeGateway.id + $OrgNetwork.isshared = $Shared + + $OrgNetwork.configuration = new-object vmware.vimautomation.cloud.views.networkconfiguration + $OrgNetwork.configuration.fencemode = "natRouted" + $OrgNetwork.configuration.ipscopes = new-object vmware.vimautomation.cloud.views.ipscopes + + $Scope = new-object vmware.vimautomation.cloud.views.ipScope + $Scope.gateway = $Gateway + $Scope.netmask = $SubnetMask + + $Scope.ipranges = new-object vmware.vimautomation.cloud.views.ipranges + $Scope.ipranges.iprange = new-object vmware.vimautomation.cloud.views.iprange + $Scope.ipranges.iprange[0].startaddress = $IPRangeStart + $Scope.ipranges.iprange[0].endaddress = $IPRangeEnd + + $OrgNetwork.configuration.ipscopes.ipscope += $Scope + + ## Create Org Network + Write-Verbose "Create Org Network" + $CreateOrgNetwork = $orgVdcView.CreateNetwork($OrgNetwork) + + ## Wait for Org Network to become Ready + Write-Verbose "Wait for Org Network to become Ready" + while(!(Get-OrgVdcNetwork -Id $CreateOrgNetwork.Id -ErrorAction SilentlyContinue)){ + $i++ + Start-Sleep 5 + if($i -gt $Timeout) { Write-Error "Creating Org Network."; break} + Write-Progress -Activity "Creating Org Network" -Status "Wait for Network to become Ready..." + } + Write-Progress -Activity "Creating Org Network" -Completed + Start-Sleep 1 + + Get-OrgVdcNetwork -Id $CreateOrgNetwork.Id | Select-Object Name, OrgVdc, NetworkType, DefaultGateway, Netmask, StaticIPPool, @{ N='isShared'; E = {$_.ExtensionData.isShared} } | Format-Table -AutoSize + + } + } diff --git a/Modules/VMware-vCD-Module/functions/New-MyOrgVdc.psm1 b/Modules/VMware-vCD-Module/functions/New-MyOrgVdc.psm1 index 26258e7..90e4cd0 100644 --- a/Modules/VMware-vCD-Module/functions/New-MyOrgVdc.psm1 +++ b/Modules/VMware-vCD-Module/functions/New-MyOrgVdc.psm1 @@ -1,6 +1,4 @@ -#Requires -Version 4 -#Requires -Modules VMware.VimAutomation.Cloud, @{ModuleName="VMware.VimAutomation.Cloud";ModuleVersion="6.3.0.0"} -Function New-MyOrgVdc { +Function New-MyOrgVdc { <# .SYNOPSIS Creates a new vCD Org VDC with Default Parameters @@ -9,7 +7,6 @@ Function New-MyOrgVdc { Creates a new vCD Org VDC with Default Parameters Default Parameters are: - * Allocation Model * Network Quota * VM Quota * 'vCpu In Mhz' @@ -20,27 +17,38 @@ Function New-MyOrgVdc { .NOTES File Name : New-MyOrgVdc.ps1 Author : Markus Kraus - Version : 1.2 + Version : 1.3 State : Ready .LINK https://mycloudrevolution.com/ .EXAMPLE - New-MyOrgVdc -Name "TestVdc" -CPULimit 1000 -MEMLimit 1000 -StorageLimit 1000 -StorageProfile "Standard-DC01" -NetworkPool "NetworkPool-DC01" -ProviderVDC "Provider-VDC-DC01" -Org "TestOrg" -ExternalNetwork "External_OrgVdcNet" + New-MyOrgVdc -Name "TestVdc" -AllocationModel AllocationPool -CPULimit 1000 -MEMLimit 1000 -StorageLimit 1000 -StorageProfile "Standard-DC01" -NetworkPool "NetworkPool-DC01" -ProviderVDC "Provider-VDC-DC01" -Org "TestOrg" -ExternalNetwork "External_OrgVdcNet" .EXAMPLE - New-MyOrgVdc -Name "TestVdc" -CPULimit 1000 -MEMLimit 1000 -StorageLimit 1000 -StorageProfile "Standard-DC01" -NetworkPool "NetworkPool-DC01" -ProviderVDC "Provider-VDC-DC01" -Org "TestOrg" + New-MyOrgVdc -Name "TestVdc" -AllocationModel AllocationVApp -StorageLimit 1000 -StorageProfile "Standard-DC01" -NetworkPool "NetworkPool-DC01" -ProviderVDC "Provider-VDC-DC01" -Org "TestOrg" .PARAMETER Name Name of the New Org VDC as String +.PARAMETER AllocationModel + Allocation Model of the New Org VDC as String + .PARAMETER CPULimit CPU Limit (MHz) of the New Org VDC as String + Default: 0 (Unlimited) + + Note: If AllocationModel is not AllocationVApp (Pay as you go), a limit needs to be set + .PARAMETER MEMLimit Memory Limit (MB) of the New Org VDC as String + Default: 0 (Unlimited) + + Note: If AllocationModel is not AllocationVApp (Pay as you go), a limit needs to be set + .PARAMETER StorageLimit Storage Limit (MB) of the New Org VDC as String @@ -76,12 +84,16 @@ Function New-MyOrgVdc { [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Name of the New Org VDC as String")] [ValidateNotNullorEmpty()] [String] $Name, - [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="CPU Limit (MHz) of the New Org VDC as String")] + [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Allocation Model of the New Org VDC as String")] [ValidateNotNullorEmpty()] - [int] $CPULimit, - [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Memory Limit (MB) of the New Org VDC as String")] + [ValidateSet("AllocationPool","AllocationVApp")] + [String] $AllocationModel, + [Parameter(Mandatory=$False, ValueFromPipeline=$False, HelpMessage="CPU Limit (MHz) of the New Org VDC as String")] [ValidateNotNullorEmpty()] - [int] $MEMLimit, + [int] $CPULimit = 0, + [Parameter(Mandatory=$False, ValueFromPipeline=$False, HelpMessage="Memory Limit (MB) of the New Org VDC as String")] + [ValidateNotNullorEmpty()] + [int] $MEMLimit = 0, [Parameter(Mandatory=$True, ValueFromPipeline=$False, HelpMessage="Storage Limit (MB) of the New Org VDC as String")] [ValidateNotNullorEmpty()] [int] $StorageLimit, @@ -117,7 +129,7 @@ Function New-MyOrgVdc { $providerVdcRef = New-Object VMware.VimAutomation.Cloud.Views.Reference $providerVdcRef.Href = $OrgVdcproviderVdc.Href $adminVdc.ProviderVdcReference = $providerVdcRef - $adminVdc.AllocationModel = "AllocationPool" + $adminVdc.AllocationModel = $AllocationModel $adminVdc.ComputeCapacity = New-Object VMware.VimAutomation.Cloud.Views.ComputeCapacity $adminVdc.ComputeCapacity.Cpu = New-Object VMware.VimAutomation.Cloud.Views.CapacityWithUsage $adminVdc.ComputeCapacity.Cpu.Units = "MHz" @@ -132,8 +144,8 @@ Function New-MyOrgVdc { $adminVdc.StorageCapacity.Limit = $StorageLimit $adminVdc.NetworkQuota = 10 $adminVdc.VmQuota = 0 - $adminVdc.VCpuInMhz = 1000 - $adminVdc.VCpuInMhz2 = 1000 + $adminVdc.VCpuInMhz = 2000 + $adminVdc.VCpuInMhz2 = 2000 $adminVdc.UsesFastProvisioning = $false $adminVdc.IsThinProvision = $true @@ -143,20 +155,21 @@ Function New-MyOrgVdc { $orgVdc = $orgED.CreateVdc($adminVdc) ## Wait for getting Ready - Write-Verbose "Wait for getting Ready" + Write-Verbose "Wait for OrgVdc getting Ready after creation" $i = 0 while(($orgVdc = Get-OrgVdc -Name $Name -Verbose:$false).Status -eq "NotReady"){ $i++ Start-Sleep 2 - if($i -gt $Timeout) { Write-Error "Creating Org Failed."; break} - Write-Progress -Activity "Creating Org" -Status "Wait for Org to become Ready..." + if($i -gt $Timeout) { Write-Error "Creating OrgVdc Failed."; break} + Write-Progress -Activity "Creating OrgVdc" -Status "Wait for OrgVdc to become Ready..." } - Write-Progress -Activity "Creating Org" -Completed + Write-Progress -Activity "Creating OrgVdc" -Completed Start-Sleep 2 ## Search given Storage Profile Write-Verbose "Search given Storage Profile" - $ProVdcStorageProfile = search-cloud -QueryType ProviderVdcStorageProfile -Name $StorageProfile | Get-CIView + $Filter = "ProviderVdc==" + $OrgVdcproviderVdc.Id + $ProVdcStorageProfile = search-cloud -QueryType ProviderVdcStorageProfile -Name $StorageProfile -Filter $Filter | Get-CIView ## Create Storage Profile Object with Settings Write-Verbose "Create Storage Profile Object with Settings" @@ -174,14 +187,14 @@ Function New-MyOrgVdc { $orgVdc.ExtensionData.CreateVdcStorageProfile($UpdateParams) ## Wait for getting Ready - Write-Verbose "Wait for getting Ready" + Write-Verbose "Wait for OrgVdc getting Ready after update" while(($orgVdc = Get-OrgVdc -Name $name -Verbose:$false).Status -eq "NotReady"){ $i++ Start-Sleep 1 - if($i -gt $Timeout) { Write-Error "Update Org Failed."; break} - Write-Progress -Activity "Updating Org" -Status "Wait for Org to become Ready..." + if($i -gt $Timeout) { Write-Error "Update OrgVdc Failed."; break} + Write-Progress -Activity "Updating OrgVdc" -Status "Wait for OrgVdc to become Ready..." } - Write-Progress -Activity "Updating Org" -Completed + Write-Progress -Activity "Updating OrgVdc" -Completed Start-Sleep 1 ## Search Any-StorageProfile From c4c92f7a87104a0ce6288cf0a151cc94fac7ed19 Mon Sep 17 00:00:00 2001 From: Wouter Kursten Date: Thu, 26 Apr 2018 10:27:36 +0200 Subject: [PATCH 05/16] Added Site functions --- .../VMware.Hv.Helper/VMware.HV.Helper.psm1 | 247 +++++++++++++++++- 1 file changed, 246 insertions(+), 1 deletion(-) diff --git a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 index 03e2585..b3e2dbd 100644 --- a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 +++ b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 @@ -10475,4 +10475,249 @@ function set-hvpodfederation { [System.gc]::collect() } -Export-ModuleMember Add-HVDesktop,Add-HVRDSServer,Connect-HVEvent,Disconnect-HVEvent,Get-HVPoolSpec,Get-HVInternalName, Get-HVEvent,Get-HVFarm,Get-HVFarmSummary,Get-HVPool,Get-HVPoolSummary,Get-HVMachine,Get-HVMachineSummary,Get-HVQueryResult,Get-HVQueryFilter,New-HVFarm,New-HVPool,Remove-HVFarm,Remove-HVPool,Set-HVFarm,Set-HVPool,Start-HVFarm,Start-HVPool,New-HVEntitlement,Get-HVEntitlement,Remove-HVEntitlement, Set-HVMachine, New-HVGlobalEntitlement, Remove-HVGlobalEntitlement, Get-HVGlobalEntitlement, Set-HVApplicationIcon, Remove-HVApplicationIcon, Get-HVGlobalSettings, Set-HVGlobalSettings, Set-HVGlobalEntitlement, Get-HVResourceStructure, Get-hvlocalsession, Get-HVGlobalSession, Reset-HVMachine, Get-HVHealth, new-hvpodfederation, remove-hvpodfederation, get-hvpodfederation, register-hvpod, unregister-hvpod, set-hvpodfederation +function get-hvsite { + <# + .Synopsis + Returns information about the sites within a Horizon View Pod Federation (Cloud Pod Architecture) + + .DESCRIPTION + Returns information about the sites within a Horizon View Pod Federation (Cloud Pod Architecture) + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + get-hvsite + Returns information about the sites within a Horizon View Pod Federation. + + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $false, + ConfirmImpact = 'High' + )] + + param( + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + $hvsites=$services1.site.site_list() + return $hvsites + + [System.gc]::collect() +} + +function new-hvsite { + <# + .Synopsis + Creates a new site within a Horizon View Pod Federation (Cloud Pod Architecture) + + .DESCRIPTION + Creates a new site within a Horizon View Pod Federation (Cloud Pod Architecture) + + .PARAMETER Name + Name of the site (required) + + .PARAMETER Description + Description of the site (required) + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + new-hvsite -name "NAME" -description "DESCRIPTION" + Returns information about the sites within a Horizon View Pod Federation. + + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $false, + ConfirmImpact = 'High' + )] + + param( + [Parameter(Mandatory = $true)] + [string] + $name, + + [Parameter(Mandatory = $true)] + [string] + $description, + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + $sitebase=new-object vmware.hv.sitebase + $sitebase.displayname=$name + $sitebase.description=$description + $services.site.site_create($sitebase) + + [System.gc]::collect() +} + +function set-hvsite { + <# + .Synopsis + renames a new site within a Horizon View Pod Federation (Cloud Pod Architecture) + + .DESCRIPTION + renames a new site within a Horizon View Pod Federation (Cloud Pod Architecture) + + .PARAMETER Sitename + Name of the site to be edited + + .PARAMETER Name + New name of the site (required) + + .PARAMETER Description + New description of the site (required) + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + set-hvsite -site "CURRENTSITENAME" -name "NAME" -description "DESCRIPTION" + Returns information about the sites within a Horizon View Pod Federation. + + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $false, + ConfirmImpact = 'High' + )] + + param( + [Parameter(Mandatory = $true)] + [string] + $sitename, + + [Parameter(Mandatory = $true)] + [string] + $name, + + [Parameter(Mandatory = $true)] + [string] + $description, + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + $siteid=$services1.site.site_list() | where-object {$_.base.displayname -like $sitename} + $siteservice=new-object vmware.hv.siteservice + $sitebasehelper=$siteservice.read($services, $siteid.id) + $sitebasehelper.displayname=$name + $sitebasehelper.description=$description + $siteservice.update($services, $sitebasehelper) + + [System.gc]::collect() +} + +function remove-hvsite { + <# + .Synopsis + renames a new site within a Horizon View Pod Federation (Cloud Pod Architecture) + + .DESCRIPTION + renames a new site within a Horizon View Pod Federation (Cloud Pod Architecture) + + .PARAMETER Name + Name of the site (required) + + .PARAMETER HvServer + Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then + first element from global:DefaultHVServers would be considered in-place of hvServer + + .EXAMPLE + set-hvsite -site "CURRENTSITENAME" -name "NAME" -description "DESCRIPTION" + Returns information about the sites within a Horizon View Pod Federation. + + .NOTES + Author : Wouter Kursten + Author email : wouter@retouw.nl + Version : 1.0 + + ===Tested Against Environment==== + Horizon View Server Version : 7.3.2,7.4 + PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 + PowerShell Version : 5.0 + #> + + [CmdletBinding( + SupportsShouldProcess = $false, + ConfirmImpact = 'High' + )] + + param( + [Parameter(Mandatory = $true)] + [string] + $name, + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + + $services = Get-ViewAPIService -hvServer $hvServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + $siteid=$services1.site.site_list() | where-object {$_.base.displayname -like $sitename} + $services.site.site_delete($siteid.id) + + [System.gc]::collect() +} + +Export-ModuleMember Add-HVDesktop,Add-HVRDSServer,Connect-HVEvent,Disconnect-HVEvent,Get-HVPoolSpec,Get-HVInternalName, Get-HVEvent,Get-HVFarm,Get-HVFarmSummary,Get-HVPool,Get-HVPoolSummary,Get-HVMachine,Get-HVMachineSummary,Get-HVQueryResult,Get-HVQueryFilter,New-HVFarm,New-HVPool,Remove-HVFarm,Remove-HVPool,Set-HVFarm,Set-HVPool,Start-HVFarm,Start-HVPool,New-HVEntitlement,Get-HVEntitlement,Remove-HVEntitlement, Set-HVMachine, New-HVGlobalEntitlement, Remove-HVGlobalEntitlement, Get-HVGlobalEntitlement, Set-HVApplicationIcon, Remove-HVApplicationIcon, Get-HVGlobalSettings, Set-HVGlobalSettings, Set-HVGlobalEntitlement, Get-HVResourceStructure, Get-hvlocalsession, Get-HVGlobalSession, Reset-HVMachine, Get-HVHealth, new-hvpodfederation, remove-hvpodfederation, get-hvpodfederation, register-hvpod, unregister-hvpod, set-hvpodfederation,get-hvsite,new-hvsite,set-hvsite,remove-hvsite From d4f4e64ca33179631e681e80cf5ee5d4dd05127d Mon Sep 17 00:00:00 2001 From: simonfangyingzhang Date: Fri, 27 Apr 2018 04:18:51 +0100 Subject: [PATCH 06/16] Deprecating functions related to KMServer and KMSCluster from VMware.VMEncryption --- Modules/VMware.VMEncryption/README.md | 29 +++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/Modules/VMware.VMEncryption/README.md b/Modules/VMware.VMEncryption/README.md index 9e38900..d01c5fa 100644 --- a/Modules/VMware.VMEncryption/README.md +++ b/Modules/VMware.VMEncryption/README.md @@ -2,6 +2,31 @@ Prerequisites/Steps to use this module: 1. This module only works for vSphere products that support VM Encryption. E.g. vSphere 6.5 and later. 2. All the functions in this module only work for KMIP Servers. -3. Install the latest version of Powershell and PowerCLI(6.5). +3. Install the latest version of Powershell and PowerCLI. 4. Import this module by running: Import-Module -Name "location of this module" -5. Get-Command -Module "This module Name" to list all available functions. \ No newline at end of file +5. Get-Command -Module "This module Name" to list all available functions. + +Note: +Deprecating the below functions related to KMServer and KMSCluster from VMware.VMEncryption and using instead the ones from VMware.VimAutomation.Storage, + +1, VMware.VMEncryption\Get-DefaultKMSCluster, use instead +VMware.VimAutomation.Storage\Get-KmsCluster|where {$_.UseAsDefaultKeyProvider}|foreach {$_.id} + +2, VMware.VMEncryption\Get-KMSCluster, use instead +VMware.VimAutomation.Storage\Get-KmsCluster|select id + +3, VMware.VMEncryption\Get-KMSClusterInfo, use instead +VMware.VimAutomation.Storage\Get-KmsCluster|foreach {$_.extensiondata} + +4, VMware.VMEncryption\Get-KMServerInfo, use instead +VMware.VimAutomation.Storage\Get-KeyManagementServer|foreach {$_.extensiondata} + +5, VMware.VMEncryption\New-KMServer, use instead +VMware.VimAutomation.Storage\Add-KeyManagementServer + +6, VMware.VMEncryption\Remove-KMServer, use instead +VMware.VimAutomation.Storage\Remove-KeyManagementServer + +7, VMware.VMEncryption\Set-DefaultKMSCluster, use instead +VMware.VimAutomation.Storage\Set-KmsCluster -UseAsDefaultKeyProvider + From d70bee9f99ce1475578cf8e5bd6f16dbb15edc0d Mon Sep 17 00:00:00 2001 From: simonfangyingzhang Date: Fri, 27 Apr 2018 04:19:53 +0100 Subject: [PATCH 07/16] Update VMware.VMEncryption.psd1 --- .../VMware.VMEncryption.psd1 | Bin 5090 -> 2621 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 b/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 index d3106326576f014d290d1010af53ab6bbfbeac3c..45b17c105a656c9254698dda7cf3c548d6587fc1 100644 GIT binary patch literal 2621 zcmbtW+iu%95PjEI4D1IdMXXq<*NwXU>01r3C09+E2Rl}e}G=k;@+dulpct>oS_1l2QPP%IP%tw5jiDs;{2xPP;0t} zkx&c%qsC$lJVRl4zTSk0K7Auoa?Hnnj8AZQ+8?Fa+x~Do#Qy0xne`Eq0pd7+H%Lw$ z@}xEky5DvtQTR$go;7EBCd-P6HIVrdMfTJy7+kXwZ4Tb`2&N*913Hsa9)c}VsG_44tu$D{ z%^E5tmqegd#uk5F*mR{7T;f+;@UkxH+P-`N@^4NotTf!n6{@cbq-;>kxj@S1N6po9 z@Q=0|Wp+UvZ7(A)B+34Fa6gk_Q-W7!|Ed_f`M*F?e0^~Tmx?s8lIr`O8=OmXji$By zP54xnB^9|~VqUX3F<(mOiir_=~@arf`3j& zM=&X~(QqGZi!s@RXm#W?u1Rr>hD%KaogwhDlFAM#E~vfD0%2ar8M9hiawUaplS*;Q zi_X0@7xOLI-Uhw-0ivn-hgx4V@32W=`^w+FO>)c0+t76?Xm%hJg{XO$Koi z58~6e!_jy+>imoj?f9B#jpeN1xO0U?I~gkEC~|@C))h^M$FL7&L6M~`O}N);ffU}AX_xpe zSoh~(FQp=i{|B%Kcn-R$aw`YgMIdM`QVq%=u`o#dU(gk%Jm*ei8++;4BekSN*AAq? zx3zh0yHat=r02-H3{#Z^Apsw(k|9^J+)`(2bSE#o2{pu<{u{p(%B(=M*Z<6$YS;6dy-WomipA?+w{ocXksqYs~?Mp0^99z;WmVT!pl)=V>AguQ03FF*a(Qkry z3BCwH8onfvZu{RTzNAeG88ggsP|>5r{@N+>%F=fsfSp^cW@3HDqMC|a!nfP$?jxZK z&8a7~??WV2)`(B*T Vzj64swL?UDeb^}edr0SJ^dD9YJ~-Z*?vM42L@cA*ZYR~<-us>jcqmMy$9yVPKfYfz_H@#rUb8p#*X z@i)Vcyag*$BvnxNu`jmw8&H(hN{07J?Q;!Y)HA_%4Aga9O|aIQk>&NFoRIe{CzG@Z zUp))toyY+=j)C0#F@g*}GX}ol+JyeJO9pSzd-Q8dS3-?FijusOk78U+VhcWcf$tXR zw`E5*;Hebcp5tyC>)Tl0!1^wHSjSxxpG{!obr-T;sdsk*%zMB^>E^%NY*LbVuOSL! zjqz!g-v_@g;)L-}jg9+vpy&Z@5m_;Zb8zZ{I+488Cs;iJ-xS`65ey)E2phMdAG41+ zXz@l~w7<{DMIIoISw4ng-kWuxcm%F4i{e}iktVQa2cINB$cSeJVEhb))@npL9q2n& z1a?SzUarLv?_k5kJPY4f%|D_7CQ=)xUMwms6=~m02dfjQTDeE+CivnYDtR%je69_epXYfORS=_Qcpc&-Gud(^^W#3`j9udw)Ksl zZ#+ipoK;8*Yg{;mPz!4L78ZYW(`)zCM@^up16v0A+qI=0HTcD5l+`1ik0*~io+jON zNbKwAdIM;&sd3}|X7jPj3Hpswo%2wtzTt#9#2i3A>>jK3lAAz7^w+39eRQxeXXbh8 z5`XT#K$cY*qMqI2C zKaQqxb^_++NNvBI?0q2fT#CrOg0ESTYg!v!Wn^yMSMNNhBJw%oQ#vR5!MF3TQ&8aalB9eC;l zdB^{c68tAn#gp^xqD-ZXSz1RqD}!ge77*~CD@F~c09=^4%;R&99Y(_$Q)+T09vf>?Gl+eTDj6a4Q%+dBL%Vq+b7dgt72x`g}P Me+=e<-#Tag10n%j>;M1& From df9d71d4e0b80a7d4617cc81020cd88dc79a6e2e Mon Sep 17 00:00:00 2001 From: simonfangyingzhang Date: Fri, 27 Apr 2018 04:22:42 +0100 Subject: [PATCH 08/16] Update VMware.VMEncryption.psm1 1, added new function Set-VMCryptoUnlock 2, deprecating functions related to KMServer and KMSCluster from VMware.VMEncryption --- .../VMware.VMEncryption.psm1 | 216 ++++++------------ 1 file changed, 68 insertions(+), 148 deletions(-) diff --git a/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 b/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 index 023087c..4085365 100644 --- a/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 +++ b/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 @@ -1,5 +1,5 @@ # Script Module : VMware.VMEncryption -# Version : 1.0 +# Version : 1.1 # Copyright © 2016 VMware, Inc. All Rights Reserved. @@ -56,8 +56,13 @@ New-VIProperty -Name EncryptionKeyId -ObjectType VirtualMachine -Value { New-VIProperty -Name Locked -ObjectType VirtualMachine -Value { Param ($VM) - ($vm.extensiondata.Runtime.ConnectionState -eq "invalid") -and ($vm.extensiondata.Config.KeyId) -} -BasedOnExtensionProperty 'Runtime.ConnectionState','Config.KeyId' -Force | Out-Null + if ($vm.ExtensionData.Runtime.CryptoState) { + $vm.ExtensionData.Runtime.CryptoState -eq "locked" + } + else { + ($vm.extensiondata.Runtime.ConnectionState -eq "invalid") -and ($vm.extensiondata.Config.KeyId) + } +} -BasedOnExtensionProperty 'Runtime.CryptoState', 'Runtime.ConnectionState','Config.KeyId' -Force | Out-Null New-VIProperty -Name vMotionEncryption -ObjectType VirtualMachine -Value { Param ($VM) @@ -83,13 +88,6 @@ New-VIProperty -Name EncryptionKeyId -ObjectType HardDisk -Value { } } -BasedOnExtensionProperty 'Backing.KeyId' -Force | Out-Null -New-VIProperty -Name KMSserver -ObjectType VMHost -Value { - Param ($VMHost) - if ($VMHost.CryptoSafe) { - $VMHost.ExtensionData.Runtime.CryptoKeyId.ProviderId.Id - } -} -BasedOnExtensionProperty 'Runtime.CryptoKeyId.ProviderId.Id' -Force | Out-Null - Function Enable-VMHostCryptoSafe { <# .SYNOPSIS @@ -113,13 +111,6 @@ Function Enable-VMHostCryptoSafe { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -181,13 +172,6 @@ Function Set-VMHostCryptoKey { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -266,13 +250,6 @@ Function Set-vMotionEncryptionConfig { .NOTES Author : Brian Graf, Carrie Yang. Author email : grafb@vmware.com, yangm@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -348,13 +325,6 @@ Function Enable-VMEncryption { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -508,13 +478,6 @@ Function Enable-VMDiskEncryption { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -660,13 +623,6 @@ Function Disable-VMEncryption { .NOTES Author : Carrie Yang. Author email : yangm@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -756,13 +712,6 @@ Function Disable-VMDiskEncryption { .NOTES Author : Carrie Yang. Author email : yangm@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -882,7 +831,7 @@ Function Set-VMEncryptionKey { C:\PS>$VM|Set-VMEncryptionKey -KMSClusterId $KMSCluster.Id -Deep Deep rekeys the VM Home and all its disks using a new key. - The key is generated from the KMS whose clusterId is $KMSCluster.Id. + The key is generted from the KMS whose clusterId is $KMSCluster.Id. .NOTES This cmdlet assumes there is already a KMS in vCenter Server. If VM is not encrypted, the cmdlet quits. @@ -891,13 +840,6 @@ Function Set-VMEncryptionKey { .NOTES Author : Carrie Yang. Author email : yangm@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -1034,10 +976,10 @@ Function Set-VMDiskEncryptionKey { C:\PS>$KMSCluster = Get-KMSCluster | select -last 1 C:\PS>$VM = Get-VM -Name win2012 C:\PS>$HardDisk = get-vm $vm|Get-HardDisk - C:\PS>$HardDisk| Set-VMDiskEncryptionKey -VM $VM -KMSClusterId $KMSCluster.Id -Deep + C:\PS>$HardDisk|$Set-VMEncryptionKey -VM $VM -KMSClusterId $KMSCluster.Id -Deep Deep rekeys all the disks of the $VM using a new key. - The key is generated from the KMS whose clusterId is $KMSCluster.Id. + The key is generted from the KMS whose clusterId is $KMSCluster.Id. .NOTES This cmdlet assumes there is already a KMS in vCenter Server. @@ -1047,13 +989,6 @@ Function Set-VMDiskEncryptionKey { .NOTES Author : Carrie Yang. Author email : yangm@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -1170,13 +1105,6 @@ Function Get-VMEncryptionInfo { .NOTES Author : Carrie Yang. Author email : yangm@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -1269,13 +1197,6 @@ Function Get-EntityByCryptoKey { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -1394,13 +1315,6 @@ Function New-KMServer { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -1435,6 +1349,7 @@ Function New-KMServer { ) Begin { + write-warning "This cmdlet is deprecated and will be removed in future release. Use VMware.VimAutomation.Storage\Add-KeyManagementServer instead" # Confirm the connected VIServer is vCenter Server ConfirmIsVCenter @@ -1553,13 +1468,6 @@ Function Remove-KMServer { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -1573,6 +1481,7 @@ Function Remove-KMServer { ) Begin { + write-warning "This cmdlet is deprecated and will be removed in future release. Use VMware.VimAutomation.Storage\Remove-KeyManagementServer instead" # Confirm the connected VIServer is vCenter Server ConfirmIsVCenter @@ -1630,15 +1539,9 @@ Function Get-KMSCluster { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> + write-warning "This cmdlet is deprecated and will be removed in future release. Use VMware.VimAutomation.Storage\Get-KmsCluster instead" # Confirm the connected VIServer is vCenter Server ConfirmIsVCenter @@ -1668,14 +1571,6 @@ Function Get-KMSClusterInfo { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 - #> [CmdLetBinding()] @@ -1686,6 +1581,7 @@ Function Get-KMSClusterInfo { ) Begin { + write-warning "This cmdlet is deprecated and will be removed in future release. Use VMware.VimAutomation.Storage\Get-KmsCluster instead" # Confirm the connected VIServer is vCenter Server ConfirmIsVCenter @@ -1721,13 +1617,6 @@ Function Get-KMServerInfo { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -1738,6 +1627,7 @@ Function Get-KMServerInfo { ) Begin { + write-warning "This cmdlet is deprecated and will be removed in future release. Use VMware.VimAutomation.Storage\Get-KeyManagementServer instead" # Confirm the connected VIServer is vCenter Server ConfirmIsVCenter @@ -1782,13 +1672,6 @@ Function Get-KMServerStatus { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -1798,7 +1681,7 @@ Function Get-KMServerStatus { [String] $KMSClusterId ) - Begin { + Begin { # Confirm the connected VIServer is vCenter Server ConfirmIsVCenter @@ -1853,15 +1736,9 @@ Function Get-DefaultKMSCluster { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> + write-warning "This cmdlet is deprecated and will be removed in future release. Use VMware.VimAutomation.Storage\Get-KmsCluster instead" # Confirm the connected VIServer is vCenter Server ConfirmIsVCenter @@ -1890,13 +1767,6 @@ Function Set-DefaultKMSCluster { .NOTES Author : Baoyin Qiao. Author email : bqiao@vmware.com - Version : 1.0 - - ==========Tested Against Environment========== - VMware vSphere Hypervisor(ESXi) Version : 6.5 - VMware vCenter Server Version : 6.5 - PowerCLI Version : PowerCLI 6.5 - PowerShell Version : 3.0 #> [CmdLetBinding()] @@ -1906,6 +1776,7 @@ Function Set-DefaultKMSCluster { [String] $KMSClusterId ) + write-warning "This cmdlet is deprecated and will be removed in future release. Use VMware.VimAutomation.Storage\Set-KmsCluster instead" # Confirm the connected VIServer is vCenter Server ConfirmIsVCenter @@ -1917,6 +1788,55 @@ Function Set-DefaultKMSCluster { $CM.MarkDefault($ProviderId) } +Function Set-VMCryptoUnlock { + <# + .SYNOPSIS + This cmdlet unlocks a locked vm + + .DESCRIPTION + This cmdlet unlocks a locked vm + + .PARAMETER VM + Specifies the VM you want to unlock + + .EXAMPLE + PS C:\> Get-VM |where {$_.locked}| Set-VMCryptoUnlock + + Unlock all locked vms + + .NOTES + Author : Fangying Zhang + Author email : fzhang@vmware.com + #> + + [CmdLetBinding()] + + param ( + [Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True)] + [VMware.VimAutomation.ViCore.Types.V1.Inventory.VirtualMachine[]]$VM + ) + + Begin { + # Confirm the connected VIServer is vCenter Server + ConfirmIsVCenter + } + + Process { + foreach ($thisvm in $vm) { + if (!$thisvm.encrypted) { + write-warning "$thisvm is not encrypted, will skip $thisvm" + continue + } + if (!$thisvm.Locked) { + write-warning "$thisvm may not be locked!" + # $thisvm.locked could be false on old 6.5.0 build (bug 1931370), so do not skip $thisvm + } + write-verbose "try to CryptoUnlock $thisvm" + $thisvm.ExtensionData.CryptoUnlock() + } + } +} + Function ConfirmIsVCenter{ <# .SYNOPSIS From 13649b8e3584c2aaf4b954c15a30bbb5c8b8f658 Mon Sep 17 00:00:00 2001 From: simonfangyingzhang Date: Fri, 27 Apr 2018 04:32:55 +0100 Subject: [PATCH 09/16] Update VMware.VMEncryption.psm1 --- Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 b/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 index 4085365..57734cf 100644 --- a/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 +++ b/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 @@ -831,7 +831,7 @@ Function Set-VMEncryptionKey { C:\PS>$VM|Set-VMEncryptionKey -KMSClusterId $KMSCluster.Id -Deep Deep rekeys the VM Home and all its disks using a new key. - The key is generted from the KMS whose clusterId is $KMSCluster.Id. + The key is generated from the KMS whose clusterId is $KMSCluster.Id. .NOTES This cmdlet assumes there is already a KMS in vCenter Server. If VM is not encrypted, the cmdlet quits. @@ -979,7 +979,7 @@ Function Set-VMDiskEncryptionKey { C:\PS>$HardDisk|$Set-VMEncryptionKey -VM $VM -KMSClusterId $KMSCluster.Id -Deep Deep rekeys all the disks of the $VM using a new key. - The key is generted from the KMS whose clusterId is $KMSCluster.Id. + The key is generated from the KMS whose clusterId is $KMSCluster.Id. .NOTES This cmdlet assumes there is already a KMS in vCenter Server. From 29719d6ca7cea9fdb160d44697d518135f6063ca Mon Sep 17 00:00:00 2001 From: simonfangyingzhang Date: Fri, 27 Apr 2018 04:42:18 +0100 Subject: [PATCH 10/16] Update VMware.VMEncryption.psm1 --- Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 b/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 index 57734cf..d46d63b 100644 --- a/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 +++ b/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 @@ -81,6 +81,13 @@ New-VIProperty -Name Encrypted -ObjectType HardDisk -Value { $hardDisk.ExtensionData.Backing.KeyId -ne $null } -BasedOnExtensionProperty 'Backing.KeyId' -Force | Out-Null +New-VIProperty -Name KMSserver -ObjectType VMHost -Value { + Param ($VMHost) + if ($VMHost.CryptoSafe) { + $VMHost.ExtensionData.Runtime.CryptoKeyId.ProviderId.Id + } +} -BasedOnExtensionProperty 'Runtime.CryptoKeyId.ProviderId.Id' -Force | Out-Null + New-VIProperty -Name EncryptionKeyId -ObjectType HardDisk -Value { Param ($Disk) if ($Disk.Encrypted) { @@ -976,7 +983,7 @@ Function Set-VMDiskEncryptionKey { C:\PS>$KMSCluster = Get-KMSCluster | select -last 1 C:\PS>$VM = Get-VM -Name win2012 C:\PS>$HardDisk = get-vm $vm|Get-HardDisk - C:\PS>$HardDisk|$Set-VMEncryptionKey -VM $VM -KMSClusterId $KMSCluster.Id -Deep + C:\PS>$HardDisk|Set-VMDiskEncryptionKey -VM $VM -KMSClusterId $KMSCluster.Id -Deep Deep rekeys all the disks of the $VM using a new key. The key is generated from the KMS whose clusterId is $KMSCluster.Id. @@ -1681,7 +1688,7 @@ Function Get-KMServerStatus { [String] $KMSClusterId ) - Begin { + Begin { # Confirm the connected VIServer is vCenter Server ConfirmIsVCenter From 049e621fb63c3a7d9e0aca87d5a5a46053505ec7 Mon Sep 17 00:00:00 2001 From: simonfangyingzhang Date: Fri, 27 Apr 2018 04:45:44 +0100 Subject: [PATCH 11/16] Update VMware.VMEncryption.psm1 --- .../VMware.VMEncryption.psm1 | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 b/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 index d46d63b..a7e47c2 100644 --- a/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 +++ b/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 @@ -69,18 +69,18 @@ New-VIProperty -Name vMotionEncryption -ObjectType VirtualMachine -Value { $VM.ExtensionData.Config.MigrateEncryption } -BasedOnExtensionProperty 'Config.MigrateEncryption' -Force | Out-Null -New-VIProperty -Name KMSserver -ObjectType VirtualMachine -Value { - Param ($VM) - if ($VM.Encrypted) { - $VM.EncryptionKeyId.ProviderId.Id - } -} -BasedOnExtensionProperty 'Config.KeyId' -Force | Out-Null - New-VIProperty -Name Encrypted -ObjectType HardDisk -Value { Param ($hardDisk) $hardDisk.ExtensionData.Backing.KeyId -ne $null } -BasedOnExtensionProperty 'Backing.KeyId' -Force | Out-Null +New-VIProperty -Name EncryptionKeyId -ObjectType HardDisk -Value { + Param ($Disk) + if ($Disk.Encrypted) { + $Disk.ExtensionData.Backing.KeyId + } +} -BasedOnExtensionProperty 'Backing.KeyId' -Force | Out-Null + New-VIProperty -Name KMSserver -ObjectType VMHost -Value { Param ($VMHost) if ($VMHost.CryptoSafe) { @@ -88,13 +88,6 @@ New-VIProperty -Name KMSserver -ObjectType VMHost -Value { } } -BasedOnExtensionProperty 'Runtime.CryptoKeyId.ProviderId.Id' -Force | Out-Null -New-VIProperty -Name EncryptionKeyId -ObjectType HardDisk -Value { - Param ($Disk) - if ($Disk.Encrypted) { - $Disk.ExtensionData.Backing.KeyId - } -} -BasedOnExtensionProperty 'Backing.KeyId' -Force | Out-Null - Function Enable-VMHostCryptoSafe { <# .SYNOPSIS @@ -983,7 +976,7 @@ Function Set-VMDiskEncryptionKey { C:\PS>$KMSCluster = Get-KMSCluster | select -last 1 C:\PS>$VM = Get-VM -Name win2012 C:\PS>$HardDisk = get-vm $vm|Get-HardDisk - C:\PS>$HardDisk|Set-VMDiskEncryptionKey -VM $VM -KMSClusterId $KMSCluster.Id -Deep + C:\PS>$HardDisk| Set-VMDiskEncryptionKey -VM $VM -KMSClusterId $KMSCluster.Id -Deep Deep rekeys all the disks of the $VM using a new key. The key is generated from the KMS whose clusterId is $KMSCluster.Id. From 9bd66f1a66bba48a5185deb81d30127de97ebcaa Mon Sep 17 00:00:00 2001 From: simonfangyingzhang Date: Fri, 27 Apr 2018 04:50:10 +0100 Subject: [PATCH 12/16] Update VMware.VMEncryption.psm1 --- Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 b/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 index a7e47c2..7752274 100644 --- a/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 +++ b/Modules/VMware.VMEncryption/VMware.VMEncryption.psm1 @@ -69,6 +69,13 @@ New-VIProperty -Name vMotionEncryption -ObjectType VirtualMachine -Value { $VM.ExtensionData.Config.MigrateEncryption } -BasedOnExtensionProperty 'Config.MigrateEncryption' -Force | Out-Null +New-VIProperty -Name KMSserver -ObjectType VirtualMachine -Value { + Param ($VM) + if ($VM.Encrypted) { + $VM.EncryptionKeyId.ProviderId.Id + } +} -BasedOnExtensionProperty 'Config.KeyId' -Force | Out-Null + New-VIProperty -Name Encrypted -ObjectType HardDisk -Value { Param ($hardDisk) $hardDisk.ExtensionData.Backing.KeyId -ne $null From 3b44fbcf204ab4484471627b6450f63d17492001 Mon Sep 17 00:00:00 2001 From: simonfangyingzhang Date: Fri, 27 Apr 2018 04:53:24 +0100 Subject: [PATCH 13/16] Update VMware.VMEncryption.psd1 --- Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 b/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 index 45b17c1..95b678f 100644 --- a/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 +++ b/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 @@ -68,7 +68,7 @@ RequiredModules = @( NestedModules = @('VMware.VMEncryption.psm1') # Functions to export from this module -FunctionsToExport = '*-*' +FunctionsToExport = '*' # Cmdlets to export from this module CmdletsToExport = '*' @@ -95,3 +95,4 @@ AliasesToExport = '*' # DefaultCommandPrefix = '' } + From 60aafba7ae2e91bb52c8be9704f4ebac65f48e0e Mon Sep 17 00:00:00 2001 From: simonfangyingzhang Date: Fri, 27 Apr 2018 05:03:22 +0100 Subject: [PATCH 14/16] Update VMware.VMEncryption.psd1 --- Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 b/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 index 95b678f..1213466 100644 --- a/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 +++ b/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 @@ -12,7 +12,7 @@ # RootModule = '' # Version number of this module. -ModuleVersion = '1.1' +ModuleVersion = '1.0' # ID used to uniquely identify this module GUID = 'f9592e48-6cd3-494e-891b-ee10ee9f7018' From 95138e128f9bb1d055aee4073e86cf32726b182c Mon Sep 17 00:00:00 2001 From: simonfangyingzhang Date: Fri, 27 Apr 2018 05:10:09 +0100 Subject: [PATCH 15/16] Update VMware.VMEncryption.psd1 --- Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 b/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 index 1213466..95b678f 100644 --- a/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 +++ b/Modules/VMware.VMEncryption/VMware.VMEncryption.psd1 @@ -12,7 +12,7 @@ # RootModule = '' # Version number of this module. -ModuleVersion = '1.0' +ModuleVersion = '1.1' # ID used to uniquely identify this module GUID = 'f9592e48-6cd3-494e-891b-ee10ee9f7018' From fc02a60eaf1058aac87fe94061801c96efae5730 Mon Sep 17 00:00:00 2001 From: Wouter Kursten Date: Sat, 28 Apr 2018 17:04:32 +0200 Subject: [PATCH 16/16] fixes for podfederations and sites --- .../VMware.Hv.Helper/VMware.HV.Helper.psm1 | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 index b3e2dbd..4528a40 100644 --- a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 +++ b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 @@ -10249,7 +10249,7 @@ function register-hvpod { Registers a pod in a Horizon View Pod Federation. You have to be connected to the pod you are joining to the federation. .PARAMETER ADUserName - User principal name of user + User principal name of user this is required to be in the domain\username format .PARAMETER remoteconnectionserver Servername of a connectionserver that already belongs to the PodFederation @@ -10296,8 +10296,8 @@ function register-hvpod { [String] $ADUserName, - [Parameter(Mandatory = $false)] - [SecureString] + [Parameter(Mandatory = $true)] + [securestring] $ADpassword, [Parameter(Mandatory = $false)] @@ -10311,16 +10311,18 @@ function register-hvpod { break } - if (!$ADPassword) { - $ADPassword= Read-Host 'Please provide the Active Directory password for user $AdUsername' -AsSecureString - } + #if ($ADPassword -eq $null) { + #$ADPassword= Read-Host 'Please provide the Active Directory password for user $AdUsername' -AsSecureString + #} - #$unsecurepassword=$ADPassword | ConvertFrom-SecureString + $temppw = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($ADPassword) + $PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($temppw) + $plainpassword $vcPassword = New-Object VMware.Hv.SecureString $enc = [system.Text.Encoding]::UTF8 - $vcPassword.Utf8String = $enc.GetBytes(($ADPassword | ConvertFrom-SecureString)) + $vcPassword.Utf8String = $enc.GetBytes($PlainPassword) - $services.PodFederation.PodFederation_join($remoteconnectionserver,$user,$svcpassword) + $services.PodFederation.PodFederation_join($remoteconnectionserver,$adusername,$vcpassword) write-host "This pod has been joined to the podfederation." [System.gc]::collect() @@ -10373,9 +10375,9 @@ function unregister-hvpod { [string] $PodName, - [Parameter(Mandatory = $true)] - [switch] - $force=$false, + [Parameter(Mandatory = $false)] + [bool] + $force, [Parameter(Mandatory = $false)] $HvServer = $null @@ -10657,8 +10659,8 @@ function set-hvsite { $siteid=$services1.site.site_list() | where-object {$_.base.displayname -like $sitename} $siteservice=new-object vmware.hv.siteservice $sitebasehelper=$siteservice.read($services, $siteid.id) - $sitebasehelper.displayname=$name - $sitebasehelper.description=$description + $sitebasehelper.getbasehelper().setdisplayname($name) + $sitebasehelper.getbasehelper().setdescription($description) $siteservice.update($services, $sitebasehelper) [System.gc]::collect() @@ -10672,8 +10674,8 @@ function remove-hvsite { .DESCRIPTION renames a new site within a Horizon View Pod Federation (Cloud Pod Architecture) - .PARAMETER Name - Name of the site (required) + .PARAMETER Name + Name of the site (required) .PARAMETER HvServer Reference to Horizon View Server to query the virtual machines from. If the value is not passed or null then @@ -10714,7 +10716,7 @@ function remove-hvsite { Write-Error "Could not retrieve ViewApi services from connection object" break } - $siteid=$services1.site.site_list() | where-object {$_.base.displayname -like $sitename} + $siteid=$services1.site.site_list() | where-object {$_.base.displayname -like $name} $services.site.site_delete($siteid.id) [System.gc]::collect()