From cbf397df24661f053a7cd668f4c881344b0ec676 Mon Sep 17 00:00:00 2001 From: Matt Frey Date: Tue, 6 Aug 2019 14:28:16 -0500 Subject: [PATCH] Worked through PSScriptAnalyzer low hanging fruit --- .../VMware.Hv.Helper/VMware.HV.Helper.psm1 | 508 +++++++++--------- 1 file changed, 245 insertions(+), 263 deletions(-) diff --git a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 index 58710e4..0b0b3bf 100644 --- a/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 +++ b/Modules/VMware.Hv.Helper/VMware.HV.Helper.psm1 @@ -482,7 +482,6 @@ function Get-UserId ($User) { $defn = New-Object VMware.Hv.QueryDefinition $defn.queryEntityType = 'ADUserOrGroupSummaryView' - [VMware.Hv.QueryFilter[]]$filters = $null $groupfilter = New-Object VMware.Hv.QueryFilterEquals -Property @{ 'memberName' = 'base.group'; 'value' = $false } $userNameFilter = New-Object VMware.Hv.QueryFilterEquals -Property @{ 'memberName' = 'base.name'; 'value' = $user } $treeList = @() @@ -668,7 +667,7 @@ function Connect-HVEvent { [CmdletBinding()] param( [Parameter(Mandatory = $false)] - $DbPassword = $null, + [SecureString]$DbPassword = $null, [Parameter(Mandatory = $false)] $HvServer = $null, @@ -705,12 +704,10 @@ function Connect-HVEvent { if (!$dbPassword) { $dbPassword = Read-Host 'Database Password for' $dbUserName@$dbServer -AsSecureString } if ($dbType -eq "SQLSERVER") { - if ($dbPassword.GetType().name -eq 'String'){ - $password = ConvertTo-SecureString $dbPassword -AsPlainText -Force - } elseif ($dbPassword.GetType().name -eq 'SecureString') { + if ($dbPassword.GetType().name -eq 'SecureString') { $password = $dbPassword } else { - Write-Error "Unsupported type recieved for dbPassword: [$dbPassword]. dbpassword should either be String or SecureString type. " + Write-Error "Unsupported type recieved for dbPassword: [$dbPassword]. dbpassword should SecureString type." break } $connectionString = "Data Source=$dbServer, $dbPort; Initial Catalog=$dbName;" @@ -1117,10 +1114,7 @@ function Get-HVFarm { PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $false)] @@ -1231,10 +1225,7 @@ function Get-HVFarmSummary { PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $false)] @@ -1337,7 +1328,7 @@ function Find-HVFarm { } $whereClause = [string]::Join(' -and ', $strFilterSet) $scriptBlock = [Scriptblock]::Create($whereClause) - $farmList = $queryResults.results | where $scriptBlock + $farmList = $queryResults.results | Where-Object $scriptBlock } Return $farmList } @@ -1419,10 +1410,7 @@ function Get-HVPool { PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $false)] @@ -1558,10 +1546,7 @@ function Get-HVPoolSummary { PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $false)] @@ -1675,7 +1660,7 @@ function Find-HVPool { } $whereClause = [string]::Join(' -and ', $strFilterSet) $scriptBlock = [Scriptblock]::Create($whereClause) - $poolList = $queryResults.results | where $scriptBlock + $poolList = $queryResults.results | Where-Object $scriptBlock } Return $poolList } @@ -1918,8 +1903,7 @@ function Get-HVQueryResult { PowerShell Version : 5.0 #> - [CmdletBinding(SupportsShouldProcess = $true, - ConfirmImpact = 'High')] + [CmdletBinding()] param( [Parameter(Position = 0,Mandatory = $true)] [ValidateSet('ADUserOrGroupSummaryView','ApplicationIconInfo','ApplicationInfo','DesktopSummaryView', @@ -2835,11 +2819,12 @@ function New-HVFarm { $farmSpecObj.ManualFarmSpec = $FarmManualFarmSpec } - # Please uncomment below code, if you want to save the json file - <# - $myDebug = convertto-json -InputObject $farmSpecObj -depth 12 - $myDebug | out-file -filepath c:\temp\copiedfarm.json - #> + If ($DebugPreference -ne 'SilentlyContinue') { + $myDebug = convertto-json -InputObject $farmSpecObj -depth 12 + $DebugOutput = "c:\temp\copiedfarm.json" + $myDebug | Out-File -filepath $DebugOutput + Write-Debug "Output Farm Spec to $DebugOutput." + } if (!$confirmFlag -OR $pscmdlet.ShouldProcess($farmSpecObj.data.name)) { $Id = $farm_service_helper.Farm_Create($services, $farmSpecObj) @@ -3139,7 +3124,7 @@ function Get-HVFarmCustomizationSetting { } $whereClause = [string]::Join(' -and ', $strFilterSet) $scriptBlock = [Scriptblock]::Create($whereClause) - $instantCloneEngineDomainAdministrator = $insDomainAdministrators | Where $scriptBlock + $instantCloneEngineDomainAdministrator = $insDomainAdministrators | Where-Object $scriptBlock If ($null -ne $instantCloneEngineDomainAdministrator) { $instantCloneEngineDomainAdministrator = $instantCloneEngineDomainAdministrator[0].id } elseif ($null -ne $insDomainAdministrators) { @@ -3167,7 +3152,7 @@ function Get-HVFarmCustomizationSetting { } $whereClause = [string]::Join(' -and ', $strFilterSet) $scriptBlock = [Scriptblock]::Create($whereClause) - $ViewComposerDomainAdministratorID = $lcDomainAdministrators | Where $scriptBlock + $ViewComposerDomainAdministratorID = $lcDomainAdministrators | Where-Object $scriptBlock if ($null -ne $ViewComposerDomainAdministratorID) { $ViewComposerDomainAdministratorID = $ViewComposerDomainAdministratorID[0].id } elseif ($null -ne $lcDomainAdministrators) { @@ -5108,7 +5093,7 @@ function Get-HVHostOrClusterID { if ($hoctn.container) { foreach ($node in $hoctn.treeContainer.children) { $id = Get-HVHostOrClusterID $node - if ($id -ne $null) { + if ($null -ne $id) { return $id } } @@ -5146,7 +5131,7 @@ function Get-HVResourcePoolID { } foreach ($child in $rpi.children) { $id = Get-HVResourcePoolID $child - if ($id -ne $null) { + if ($null -ne $id) { return $id } } @@ -5191,7 +5176,7 @@ function Get-HVAccessGroupID { } foreach ($child in $element.children) { $id = Get-HVAccessGroupID $child - if ($id -ne $null) { + if ($null -ne $id) { return $id } } @@ -5364,7 +5349,7 @@ function Get-HVPoolCustomizationSetting { } $whereClause = [string]::Join(' -and ', $strFilterSet) $scriptBlock = [Scriptblock]::Create($whereClause) - $instantCloneEngineDomainAdministrator = $insDomainAdministrators | Where $scriptBlock + $instantCloneEngineDomainAdministrator = $insDomainAdministrators | Where-Object $scriptBlock If ($null -ne $instantCloneEngineDomainAdministrator) { $instantCloneEngineDomainAdministrator = $instantCloneEngineDomainAdministrator[0].id } elseif ($null -ne $insDomainAdministrators) { @@ -5394,7 +5379,7 @@ function Get-HVPoolCustomizationSetting { } $whereClause = [string]::Join(' -and ', $strFilterSet) $scriptBlock = [Scriptblock]::Create($whereClause) - $ViewComposerDomainAdministratorID = $lcDomainAdministrators | Where $scriptBlock + $ViewComposerDomainAdministratorID = $lcDomainAdministrators | Where-Object $scriptBlock If ($null -ne $ViewComposerDomainAdministratorID) { $ViewComposerDomainAdministratorID = $ViewComposerDomainAdministratorID[0].id } elseif ($null -ne $lcDomainAdministrators) { @@ -5523,7 +5508,7 @@ function Test-HVPoolSpec { if (! (($PoolObject.AutomatedDesktopSpec.UserAssignment.UserAssignment -eq "FLOATING") -or ($PoolObject.AutomatedDesktopSpec.UserAssignment.UserAssignment -eq "DEDICATED")) ) { Throw "UserAssignment must be FLOATING or DEDICATED" } - if ($PoolObject.AutomatedDesktopSpec.ProvisioningType -eq $null) { + if ($null -eq $PoolObject.AutomatedDesktopSpec.ProvisioningType) { Throw "Pool Provisioning type is empty, need to be configured" } $provisionTypeArray = @('VIRTUAL_CENTER', 'VIEW_COMPOSER', 'INSTANT_CLONE_ENGINE') @@ -7441,7 +7426,7 @@ function Find-HVMachine { } $whereClause = [string]::Join(' -and ', $strFilterSet) $scriptBlock = [Scriptblock]::Create($whereClause) - $machineList += $queryResults.results | where $scriptBlock + $machineList += $queryResults.results | Where-Object $scriptBlock $GetNext = $true } while ($queryResults.remainingCount -gt 0) $query_service_helper.QueryService_Delete($services, $queryResults.id) @@ -7514,10 +7499,7 @@ function Get-HVMachine { PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $false)] @@ -7637,10 +7619,7 @@ function Get-HVMachineSummary { PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $false)] @@ -7915,7 +7894,7 @@ function Get-DataStoreName { ) $dataStoresObj = @() $entityId = New-Object VMware.Hv.EntityId - $datastores | % { + $datastores | ForEach-Object { $entityId.Id = $_.datastore.Id $dataStoresObj += , (New-Object PsObject -Property @{ datastore = Get-HVInternalName -EntityId $entityId; @@ -7958,10 +7937,7 @@ function Get-HVInternalName { PowerCLI Version : PowerCLI 6.5, PowerCLI 6.5.1 PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] @@ -8004,15 +7980,15 @@ function Get-HVInternalName { return $Info.Base.Username } 'BaseImageVm' { - $info = $services.BaseImageVm.BaseImageVm_List($VcId) | where { $_.id.id -eq $EntityId.id } + $info = $services.BaseImageVm.BaseImageVm_List($VcId) | Where-Object { $_.id.id -eq $EntityId.id } return $info.name } 'BaseImageSnapshot' { - $info = $services.BaseImageSnapshot.BaseImageSnapshot_List($BaseImageVmId) | where { $_.id.id -eq $EntityId.id } + $info = $services.BaseImageSnapshot.BaseImageSnapshot_List($BaseImageVmId) | Where-Object { $_.id.id -eq $EntityId.id } return $info.name } 'VmTemplate' { - $info = $services.VmTemplate.VmTemplate_List($VcId) | where { $_.id.id -eq $EntityId.id } + $info = $services.VmTemplate.VmTemplate_List($VcId) | Where-Object { $_.id.id -eq $EntityId.id } return $info.name } 'ViewComposerDomainAdministrator' { @@ -8045,10 +8021,7 @@ function Get-HVInternalName { function Get-UserInfo { - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $true)] [ValidatePattern("^.+?[@\\].+?$")] @@ -8370,10 +8343,7 @@ function Get-HVEntitlement { #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $false)] [ValidatePattern("^.+?[@\\].+?$")] @@ -8438,7 +8408,7 @@ function Get-HVEntitlement { } $AndFilter = Get-HVQueryFilter -And -Filters $AndFilter $results = (Get-HVQueryResult -EntityType EntitledUserOrGroupLocalSummaryView -Filter $AndFilter -HvServer $HvServer) - $results = $results | where {$_.localData.desktops -ne $null} + $results = $results | Where-Object {$null -ne $_.localData.desktops} } "Application" { if ($ResourceName) { @@ -8452,7 +8422,7 @@ function Get-HVEntitlement { } $AndFilter = Get-HVQueryFilter -And -Filters $AndFilter $results = (Get-HVQueryResult -EntityType EntitledUserOrGroupLocalSummaryView -Filter $AndFilter -HvServer $HvServer) - $results = $results | where {$_.localData.applications -ne $null} + $results = $results | Where-Object {$null -ne $_.localData.applications} } "URLRedirection" { $localFilter = @() @@ -8473,11 +8443,11 @@ function Get-HVEntitlement { } $localFilter = Get-HVQueryFilter -And -Filters $localFilter $localResults = Get-HVQueryResult -EntityType EntitledUserOrGroupLocalSummaryView -Filter $localFilter -HvServer $HvServer - $results += ($localResults | where {$_.localData.urlRedirectionSettings -ne $null}) + $results += ($localResults | Where-Object {$null -ne $_.localData.urlRedirectionSettings}) if ($cpaEnabled) { $globalFilter = Get-HVQueryFilter -And -Filters $globalFilter $globalResults = Get-HVQueryResult -EntityType EntitledUserOrGroupGlobalSummaryView -Filter $globalFilter -HvServer $HvServer - $globalResults = $globalResults | where {$_.globalData.urlRedirectionSettings -ne $null} + $globalResults = $globalResults | Where-Object {$null -ne $_.globalData.urlRedirectionSettings} $results += $globalResults } } @@ -8497,7 +8467,7 @@ function Get-HVEntitlement { } $AndFilter = Get-HVQueryFilter -And -Filters $AndFilter $results = (Get-HVQueryResult -EntityType EntitledUserOrGroupGlobalSummaryView -Filter $AndFilter -HvServer $HvServer) - $results = $results| where {$_.globalData.globalApplicationEntitlements -ne $null} + $results = $results| Where-Object {$null -ne $_.globalData.globalApplicationEntitlements} } "GlobalEntitlement" { if (! $cpaEnabled) { @@ -8515,7 +8485,7 @@ function Get-HVEntitlement { } $AndFilter = Get-HVQueryFilter -And -Filters $AndFilter $results = (Get-HVQueryResult -EntityType EntitledUserOrGroupGlobalSummaryView -Filter $AndFilter -HvServer $HvServer) - $results = $results | where {$_.globalData.globalEntitlements -ne $null} + $results = $results | Where-Object {$null -ne $_.globalData.globalEntitlements} } } if (! $results) { @@ -9213,7 +9183,7 @@ function Find-HVGlobalEntitlement { } $whereClause = [string]::Join(' -and ', $strFilterSet) $scriptBlock = [Scriptblock]::Create($whereClause) - $GeList = $queryResults.results | where $scriptBlock + $GeList = $queryResults.results | Where-Object $scriptBlock } Return $GeList } @@ -9257,10 +9227,7 @@ function Get-HVGlobalEntitlement { PowerShell Version : 5.0 #> -[CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] +[CmdletBinding()] param( [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] @@ -9613,10 +9580,7 @@ The get-hvglobalsession gets all local session by using view API service object( PowerShell Version : 5.0 #> -[CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' -)] +[CmdletBinding()] param( [Parameter(Mandatory = $false)] @@ -9755,23 +9719,25 @@ function Set-HVApplicationIcon { break } - $ApplicationIconHelper = New-Object VMware.Hv.ApplicationIconService - try { - $ApplicationIconId = $ApplicationIconHelper.ApplicationIcon_CreateAndAssociate($services, $spec) - } catch { - if ($_.Exception.InnerException.MethodFault.GetType().name.Equals('EntityAlreadyExists')) { - # This icon is already part of LDAP and associated with some other application(s). - # In this case, call updateAssociations - $applicationIconId = $_.Exception.InnerException.MethodFault.Id - Write-Host "Some application(s) already have an association for the specified icon." - $ApplicationIconHelper.ApplicationIcon_UpdateAssociations($services, $applicationIconId, @($appInfo.Id)) - Write-Host "Successfully updated customized icon association for Application:[$ApplicationName]." - break - } - Write-Host "Error in associating customized icon for Application:[$ApplicationName] $_" - break + If ($Force -or $PSCmdlet.ShouldProcess($ApplicationName)) { + $ApplicationIconHelper = New-Object VMware.Hv.ApplicationIconService + try { + $ApplicationIconId = $ApplicationIconHelper.ApplicationIcon_CreateAndAssociate($services, $spec) + } catch { + if ($_.Exception.InnerException.MethodFault.GetType().name.Equals('EntityAlreadyExists')) { + # This icon is already part of LDAP and associated with some other application(s). + # In this case, call updateAssociations + $applicationIconId = $_.Exception.InnerException.MethodFault.Id + Write-Host "Some application(s) already have an association for the specified icon." + $ApplicationIconHelper.ApplicationIcon_UpdateAssociations($services, $applicationIconId, @($appInfo.Id)) + Write-Host "Successfully updated customized icon association for Application:[$ApplicationName]." + break + } + Write-Host "Error in associating customized icon for Application:[$ApplicationName] $_" + break + } + Write-Host "Successfully associated customized icon for Application:[$ApplicationName]." } - Write-Host "Successfully associated customized icon for Application:[$ApplicationName]." } end { @@ -9860,13 +9826,17 @@ Function Remove-HVApplicationIcon { break } - try { - $ApplicationIconHelper.ApplicationIcon_RemoveAssociations($services, $brokerIcon, @($appInfo.Id)) - } catch { - Write-Error "Error in removing the customized icon association for Application:[$ApplicationName] $_ " - break + if ($Force -or $PSCmdlet.ShouldProcess($ApplicationName)) { + + try { + $ApplicationIconHelper.ApplicationIcon_RemoveAssociations($services, $brokerIcon, @($appInfo.Id)) + } catch { + Write-Error "Error in removing the customized icon association for Application:[$ApplicationName] $_ " + break + } + Write-Host "Successfully removed customized icon association for Application:[$ApplicationName]." + } - Write-Host "Successfully removed customized icon association for Application:[$ApplicationName]." } end { @@ -9903,10 +9873,7 @@ function Get-HVGlobalSettings { PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $false)] @@ -10251,10 +10218,16 @@ function Set-HVGlobalSettings { if ($enableIPSecForSecurityServerPairing) { $updates += Get-MapEntry -key 'securityData.enableIPSecForSecurityServerPairing' -Value $enableIPSecForSecurityServerPairing } - - $global_settings_helper = New-Object VMware.Hv.GlobalSettingsService - $global_settings_helper.GlobalSettings_Update($services,$updates) + if ($Force -or $PSCmdlet.ShouldProcess($HVServer.Name)) { + + $global_settings_helper = New-Object VMware.Hv.GlobalSettingsService + + $global_settings_helper.GlobalSettings_Update($services,$updates) + + Write-Host "Global settings updated." + + } } @@ -10263,19 +10236,19 @@ function Set-HVGlobalSettings { } } -function get-HVlocalsession { +function Get-HVLocalSession { <# .SYNOPSIS Provides a list with all sessions on the local pod (works in CPA and non-CPA) .DESCRIPTION -The get-hvlocalsession gets all local session by using view API service object(hvServer) of Connect-HVServer cmdlet. +The Get-HVLocalSession gets all local session by using view API service object(hvServer) of Connect-HVServer cmdlet. .PARAMETER HvServer View API service object of Connect-HVServer cmdlet. .EXAMPLE - Get-hvlocalsession + Get-HVLocalSession Get all local sessions .NOTES @@ -10289,10 +10262,7 @@ The get-hvlocalsession gets all local session by using view API service object(h PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( [Parameter(Mandatory = $false)] @@ -10304,7 +10274,7 @@ The get-hvlocalsession gets all local session by using view API service object(h Write-Error "Could not retrieve ViewApi services from connection object." break } - + $query_service_helper = New-Object VMware.Hv.QueryServiceService $query = New-Object VMware.Hv.QueryDefinition @@ -10363,35 +10333,46 @@ function Reset-HVMachine { PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] - - param( - - [Parameter(Mandatory = $true)] - [string] - $MachineName, - - [Parameter(Mandatory = $false)] - $HvServer = $null - ) + [CmdletBinding( + SupportsShouldProcess = $true, + ConfirmImpact = 'High' + )] - - $services = Get-ViewAPIService -hvServer $hvServer - if ($null -eq $services) { - Write-Error "Could not retrieve ViewApi services from connection object" - break - } - - $machineList = Find-HVMachine -Param $PSBoundParameters - if (!$machineList) { - Write-Host "Reset-HVMachine: No Virtual Machine(s) Found with given search parameters" - break + param( + + [Parameter(Mandatory = $true)] + [string] + $MachineName, + + [Parameter(Mandatory = $false)] + $HvServer = $null + ) + + Begin { + + $services = Get-ViewAPIService -hvServer $hvServer + + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break + } + + $machineList = Find-HVMachine -Param $PSBoundParameters + + if (!$machineList) { + Write-Host "Reset-HVMachine: No Virtual Machine(s) Found with given search parameters" + break + } } - foreach ($machine in $machinelist){ - $services.machine.Machine_ResetMachines($machine.id) + Process { + if ($Force -or $PSCmdlet.ShouldProcess($MachineName)) { + foreach ($machine in $machinelist){ + $services.machine.Machine_ResetMachines($machine.id) + } + } + } + End { + [System.gc]::collect() } } function Remove-HVMachine { @@ -10439,138 +10420,143 @@ function Remove-HVMachine { #> [CmdletBinding( - SupportsShouldProcess = $true, + SupportsShouldProcess = $true, ConfirmImpact = 'High' - )] + )] param( [Parameter(Mandatory = $true)] [array] - $MachineNames, + $MachineNames, - [Parameter(Mandatory = $false)] - [switch]$DeleteFromDisk = $true, + [Parameter(Mandatory = $false)] + [switch]$DeleteFromDisk, [Parameter(Mandatory = $false)] $HVServer = $null ) -#Connect to HV Server -$services = Get-ViewAPIService -HVServer $HVServer - -if ($null -eq $services) { - Write-Error "Could not retrieve ViewApi services from connection object" - break - } - -#Connect to Query Service -$queryService = New-Object 'Vmware.Hv.QueryServiceService' -#QUery Definition -$queryDefinition = New-Object 'Vmware.Hv.QueryDefinition' -#Query Filter -$queryDefinition.queryEntityType = 'MachineNamesView' - -#Create Filter Set so we can populate it with QueryFilterEquals data -[VMware.Hv.queryfilter[]]$filterSet = @() -foreach($machine in $machineNames){ - - #queryfilter values - $queryFilterEquals = New-Object VMware.Hv.QueryFilterEquals - $queryFilterEquals.memberName = "base.name" - $queryFilterEquals.value = "$machine" - - $filterSet += $queryFilterEquals - -} - -#Or Filter -$orFilter = New-Object VMware.Hv.QueryFilterOr -$orFilter.filters = $filterSet - -#Set Definition filter to value of $orfilter -$queryDefinition.filter = $orFilter - -#Retrieve query results. Returns all machines to be deleted -$queryResults = $queryService.QueryService_Query($services,$queryDefinition) - -#Assign VM Object to variable -$deleteThisMachine = $queryResults.Results - -#Machine Service -$machineService = new-object VMware.Hv.MachineService - -#Get Machine Service machine object -$deleteMachine = $machineService.Machine_GetInfos($services,$deleteThisMachine.Id) - -#If sessions exist on the machines we are going to delete than force kill those sessions. -#The deleteMachines method will not work if there are any existing sessions so this step is very important. -write-host "Attemtping log off of machines" - -if($deleteMachine.base.session.id){ -$trys = 0 - - do{ - foreach($session in $deleteMachine.base.session){ - - $sessions = $null - [VMware.Hv.SessionId[]]$sessions += $session - - } - - try{ - - write-host "`n" - write-host "Attemtping log off of machines" - write-host "`n" - $logOffSession = new-object 'VMware.Hv.SessionService' - $logOffSession.Session_LogoffSessionsForced($services,$sessions) - - #Wait more for Sessions to end - - Start-Sleep -Seconds 5 - - } - - catch{ - - Write-Host "Attempted to Log Off Sessions from below machines but recieved an error. This doesn't usually mean it failed. Typically the session is succesfully logged off but takes some time" - write-host "`n" - write-host ($deleteMachine.base.Name -join "`n") - - start-sleep -seconds 5 + Begin { + #Connect to HV Server + $services = Get-ViewAPIService -HVServer $HVServer + if ($null -eq $services) { + Write-Error "Could not retrieve ViewApi services from connection object" + break } - if(($trys -le 10)){ + #Connect to Query Service + $queryService = New-Object 'Vmware.Hv.QueryServiceService' + #QUery Definition + $queryDefinition = New-Object 'Vmware.Hv.QueryDefinition' + #Query Filter + $queryDefinition.queryEntityType = 'MachineNamesView' + } + Process { + #Create Filter Set so we can populate it with QueryFilterEquals data + [VMware.Hv.queryfilter[]]$filterSet = @() + foreach($machine in $machineNames){ - write-host "`n" - write-host "Retrying Logoffs: $trys times" - #Recheck existing sessions - $deleteMachine = $machineService.Machine_GetInfos($services,$deleteThisMachine.Id) + #queryfilter values + $queryFilterEquals = New-Object VMware.Hv.QueryFilterEquals + $queryFilterEquals.memberName = "base.name" + $queryFilterEquals.value = "$machine" + + $filterSet += $queryFilterEquals + } + + #Or Filter + $orFilter = New-Object VMware.Hv.QueryFilterOr + $orFilter.filters = $filterSet + + #Set Definition filter to value of $orfilter + $queryDefinition.filter = $orFilter + + #Retrieve query results. Returns all machines to be deleted + $queryResults = $queryService.QueryService_Query($services,$queryDefinition) + + #Assign VM Object to variable + $deleteThisMachine = $queryResults.Results + + if ($Force -or $PSCmdlet.ShouldProcess($deleteThisMachine)) { + + #Machine Service + $machineService = new-object VMware.Hv.MachineService + + #Get Machine Service machine object + $deleteMachine = $machineService.Machine_GetInfos($services,$deleteThisMachine.Id) + + #If sessions exist on the machines we are going to delete than force kill those sessions. + #The deleteMachines method will not work if there are any existing sessions so this step is very important. + write-host "Attempting log off of machines" + + if($deleteMachine.base.session.id){ + $trys = 0 + + do{ + + foreach($session in $deleteMachine.base.session){ + + $sessions = $null + [VMware.Hv.SessionId[]]$sessions += $session + + } + + try{ + + write-host "`n" + write-host "Attempting log off of machines" + write-host "`n" + $logOffSession = new-object 'VMware.Hv.SessionService' + $logOffSession.Session_LogoffSessionsForced($services,$sessions) + + #Wait more for Sessions to end + Start-Sleep -Seconds 5 + + } + + catch{ + + Write-Host "Attempted to Log Off Sessions from below machines but recieved an error. This doesn't usually mean it failed. Typically the session is succesfully logged off but takes some time" + write-host "`n" + write-host ($deleteMachine.base.Name -join "`n") + + start-sleep -seconds 5 + + } + + if(($trys -le 10)){ + + write-host "`n" + write-host "Retrying Logoffs: $trys times" + #Recheck existing sessions + $deleteMachine = $machineService.Machine_GetInfos($services,$deleteThisMachine.Id) + + } + + $trys++ } - $trys++ + until((!$deleteMachine.base.session.id) -or ($trys -gt 10)) + } + + #Create delete spec for the DeleteMachines method + $deleteSpec = [VMware.Hv.MachineDeleteSpec]::new() + $deleteSpec.DeleteFromDisk = $DeleteFromDisk + $deleteSpec.ArchivePersistentDisk = $false + + #Delete the machines + if($DeleteFromDisk){write-host "Attempting to Delete:"}else{write-host "Attempting to remove from inventory:"} + Write-Output ($deleteMachine.base.Name -join "`n") + $machineService.Machine_DeleteMachines($services,$deleteMachine.id,$deleteSpec) } - - until((!$deleteMachine.base.session.id) -or ($trys -gt 10)) - -} - -#Create delete spec for the DeleteMachines method -$deleteSpec = [VMware.Hv.MachineDeleteSpec]::new() -$deleteSpec.DeleteFromDisk = $DeleteFromDisk -$deleteSpec.ArchivePersistentDisk = $false - -#Delete the machines -if($DeleteFromDisk){write-host "Attempting to Delete:"}else{write-host "Attempting to remove from inventory:"} -Write-Output ($deleteMachine.base.Name -join "`n") -$bye = $machineService.Machine_DeleteMachines($services,$deleteMachine.id,$deleteSpec) - -[System.gc]::collect() - + } + End { + [System.gc]::collect() + } } function Get-HVHealth { @@ -10610,10 +10596,7 @@ function Get-HVHealth { PowerShell Version : 5.0 #> - [CmdletBinding( - SupportsShouldProcess = $true, - ConfirmImpact = 'High' - )] + [CmdletBinding()] param( @@ -10772,7 +10755,7 @@ function remove-hvpodfederation { [System.gc]::collect() } -function get-hvpodfederation { +function Get-HVPodFederation { <# .Synopsis Returns information about a Horizon View Pod Federation (Cloud Pod Architecture) @@ -10785,7 +10768,7 @@ function get-hvpodfederation { first element from global:DefaultHVServers would be considered in-place of hvServer .EXAMPLE - get-hvpodfederation + Get-HVPodFederation Returns information about a Horizon View Pod Federation .NOTES @@ -10801,7 +10784,7 @@ function get-hvpodfederation { [CmdletBinding( SupportsShouldProcess = $false, - ConfirmImpact = 'High' + ConfirmImpact = 'None' )] param( @@ -11053,7 +11036,7 @@ function set-hvpodfederation { $podservicehelper=$podservice.read($services) $podservicehelper.getDatahelper().setdisplayname($name) $podservice.update($services, $podservicehelper) - get-hvpodfederation + Get-HVPodFederation [System.gc]::collect() } @@ -11480,7 +11463,6 @@ function New-HVHomeSite { } process { - $confirmFlag = Get-HVConfirmFlag -keys $PsBoundParameters.Keys $groupinfo = Get-UserInfo -UserName $Group $UserOrGroupName = $groupinfo.Name $Domain = $groupinfo.Domain