Update KISHorizon.psm1
This commit is contained in:
1 parent
a3badc4f9e
commit
8ca2a1bd4b
1 file changed
+187
-92
+187
-92
@@ -124,12 +124,16 @@ function Get-HorizonMachine {
|
||||
)
|
||||
$token = $Horizon.access_token
|
||||
$server = $Horizon.server_name
|
||||
|
||||
|
||||
$request_header = $global:request_header
|
||||
$request_header += @{"authorization"="Bearer $token"}
|
||||
|
||||
$machineUri = "https://$server/rest/inventory/v5/machines?sort_by=name&order_by=ASC"
|
||||
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host $MyInvocation.MyCommand.Name Starting
|
||||
}
|
||||
|
||||
try {
|
||||
$machines = Invoke-RestMethod -Method Get -Uri $machineUri -Headers $request_header -SkipCertificateCheck
|
||||
} catch {
|
||||
@@ -406,18 +410,23 @@ function Get-HorizonDesktopPool {
|
||||
$pools | Add-Member -MemberType NoteProperty -Name cluster -Value ""
|
||||
$pools | Add-Member -MemberType NoteProperty -Name GpuEnabled -Value 0
|
||||
$pools | Add-Member -MemberType NoteProperty -Name Entitlements -Value @()
|
||||
$pools.provisioning_settings | Add-Member -MemberType NoteProperty -Name base_vm_name -Value ""
|
||||
$pools.provisioning_settings | Add-Member -MemberType NoteProperty -Name snapshot_path -Value ""
|
||||
$pools.provisioning_settings | Add-Member -MemberType NoteProperty -Name datacenter_name -Value ""
|
||||
$pools.provisioning_settings | Add-Member -MemberType NoteProperty -Name resource_pool_name -Value ""
|
||||
$pools.provisioning_settings | Add-Member -MemberType NoteProperty -Name base_folder_path -Value ""
|
||||
$pools.storage_settings.datastores | Add-Member -MemberType NoteProperty -Name name -Value ""
|
||||
|
||||
$machines = $Horizon | Get-HorizonMachine
|
||||
$sessions = $Horizon | Get-HorizonSession
|
||||
|
||||
$counter = 1
|
||||
foreach ($pool in $pools) {
|
||||
if ($null -ne $pool.provisioing_settings) {
|
||||
$pool.provisioning_settings | Add-Member -MemberType NoteProperty -Name base_vm_name -Value ""
|
||||
$pool.provisioning_settings | Add-Member -MemberType NoteProperty -Name snapshot_path -Value ""
|
||||
$pool.provisioning_settings | Add-Member -MemberType NoteProperty -Name datacenter_name -Value ""
|
||||
$pool.provisioning_settings | Add-Member -MemberType NoteProperty -Name resource_pool_name -Value ""
|
||||
$pool.provisioning_settings | Add-Member -MemberType NoteProperty -Name base_folder_path -Value ""
|
||||
}
|
||||
if ($null -ne $pool.storage_settings.datastores) {
|
||||
$pool.storage_settings.datastores | Add-Member -MemberType NoteProperty -Name name -Value ""
|
||||
}
|
||||
|
||||
Write-Progress -Activity "Processing Pools" -Status "Processing $counter of $($pools.length) - $($pool.name)" -PercentComplete (($counter / $pools.length) *100) -Id 1
|
||||
$mymachines = $machines | where {$_.desktop_pool_id -eq $pool.id}
|
||||
$pool.machines += $mymachines
|
||||
@@ -429,52 +438,54 @@ function Get-HorizonDesktopPool {
|
||||
$session | Add-Member -MemberType NoteProperty -Name machine_name -Value $machineName
|
||||
$session | Add-Member -MemberType NoteProperty -Name machine_dns_name -Value $machineDNSName
|
||||
}
|
||||
$pool.vCenter = ($hzconn | Get-HorizonVcenter | where-object {$_.id -eq $pool.vcenter_id}).server_name
|
||||
$pool.vCenter = (Get-HorizonVcenter -Horizon $Horizon | where-object {$_.id -eq $pool.vcenter_id}).server_name
|
||||
if (-not ($global:DefaultVIServer.Name -contains $pool.vCenter)) {
|
||||
throw "Not Connected to vCenter $($pool.vCenter)"
|
||||
}
|
||||
$pool.cluster = (Get-Cluster | where {$_.id -eq "ClusterComputeResource-$($pool.provisioning_settings.host_or_cluster_id)"}).name
|
||||
$pool.provisioning_settings.base_vm_name = (Get-View -Id "VirtualMachine-$($pool.provisioning_settings.parent_vm_id)").Name
|
||||
$snappath = ""
|
||||
$goldVM = Get-VM $pool.provisioning_settings.base_vm_name
|
||||
$thissnap = $goldVM | Get-Snapshot | Where-Object {$_.Id -eq "VirtualMachineSnapshot-$($pool.provisioning_settings.base_snapshot_id)"}
|
||||
while ($thissnap.parentsnapshotid.length -gt 0) {
|
||||
if ($null -ne $pool.provisioning_settings.base_vm_name) {
|
||||
$pool.provisioning_settings.base_vm_name = (Get-View -Id "VirtualMachine-$($pool.provisioning_settings.parent_vm_id)").Name
|
||||
$snappath = ""
|
||||
$goldVM = Get-VM $pool.provisioning_settings.base_vm_name
|
||||
$thissnap = $goldVM | Get-Snapshot | Where-Object {$_.Id -eq "VirtualMachineSnapshot-$($pool.provisioning_settings.base_snapshot_id)"}
|
||||
while ($thissnap.parentsnapshotid.length -gt 0) {
|
||||
if ($snappath -eq "") {
|
||||
$snappath = $thissnap.Name
|
||||
} else {
|
||||
$snappath = $thissnap.Name + "\" + $snappath
|
||||
}
|
||||
$thissnap = Get-VM $pool.provisioning_settings.base_vm_name | Get-Snapshot | Where-Object {$_.Id -eq $thissnap.ParentSnapshotId}
|
||||
}
|
||||
if ($snappath -eq "") {
|
||||
$snappath = $thissnap.Name
|
||||
} else {
|
||||
$snappath = $thissnap.Name + "\" + $snappath
|
||||
}
|
||||
$thissnap = Get-VM $pool.provisioning_settings.base_vm_name | Get-Snapshot | Where-Object {$_.Id -eq $thissnap.ParentSnapshotId}
|
||||
}
|
||||
if ($snappath -eq "") {
|
||||
$snappath = $thissnap.Name
|
||||
} else {
|
||||
$snappath = $thissnap.Name + "\" + $snappath
|
||||
}
|
||||
$pool.provisioning_settings.snapshot_path = $snappath
|
||||
$pool.provisioning_settings.resource_pool_name = $goldVM.ResourcePool
|
||||
$pool.provisioning_settings.datacenter_name = (Get-View "Datacenter-$($pool.provisioning_settings.datacenter_id)").Name
|
||||
$basefolderpath = ""
|
||||
$thisfolder = Get-View "Folder-$($pool.provisioning_settings.vm_folder_id)"
|
||||
while ($thisfolder.parentsnapshotid.length -gt 0) {
|
||||
$pool.provisioning_settings.snapshot_path = $snappath
|
||||
$pool.provisioning_settings.resource_pool_name = $goldVM.ResourcePool
|
||||
$pool.provisioning_settings.datacenter_name = (Get-View "Datacenter-$($pool.provisioning_settings.datacenter_id)").Name
|
||||
$basefolderpath = ""
|
||||
$thisfolder = Get-View "Folder-$($pool.provisioning_settings.vm_folder_id)"
|
||||
while ($thisfolder.parentsnapshotid.length -gt 0) {
|
||||
if ($basefolderpath -eq "") {
|
||||
$basefolderpath = $thisfolder.Name
|
||||
} else {
|
||||
$basefolderpath = $thisfolder.Name + "\" + $basefolderpath
|
||||
}
|
||||
$thisfolder = Get-View "Folder-$($thisfolder.Parent)"
|
||||
}
|
||||
if ($basefolderpath -eq "") {
|
||||
$basefolderpath = $thisfolder.Name
|
||||
} else {
|
||||
$basefolderpath = $thisfolder.Name + "\" + $basefolderpath
|
||||
}
|
||||
$thisfolder = Get-View "Folder-$($thisfolder.Parent)"
|
||||
}
|
||||
if ($basefolderpath -eq "") {
|
||||
$basefolderpath = $thisfolder.Name
|
||||
} else {
|
||||
$basefolderpath = $thisfolder.Name + "\" + $basefolderpath
|
||||
}
|
||||
$pool.provisioning_settings.base_folder_path = $basefolderpath
|
||||
$datastores = @()
|
||||
foreach ($datastore in $pool.storage_settings.datastores) {
|
||||
$thisds = Get-View -Id "Datastore-$($datastore.datastore_id)"
|
||||
$datastore.name = $thisds.Name
|
||||
$datastores += $thisds.Name
|
||||
$pool.provisioning_settings.base_folder_path = $basefolderpath
|
||||
$datastores = @()
|
||||
foreach ($datastore in $pool.storage_settings.datastores) {
|
||||
$thisds = Get-View -Id "Datastore-$($datastore.datastore_id)"
|
||||
$datastore.name = $thisds.Name
|
||||
$datastores += $thisds.Name
|
||||
}
|
||||
}
|
||||
|
||||
$pool.GpuEnabled = ($pool.display_protocol_settings.vgpu_grid_profile.Length -gt 0);
|
||||
@@ -554,7 +565,7 @@ Function Get-HorizonADUser {
|
||||
if ($Name -ne "") {
|
||||
$extension = "?group_only=false&filter={`"type`":`"Equals`",`"name`":`"user_principal_name`",`"value`":`"$Name`"}"
|
||||
}
|
||||
|
||||
|
||||
$userlookupURI += $extension
|
||||
|
||||
if ($global:kishorizondebug) {
|
||||
@@ -562,7 +573,14 @@ Function Get-HorizonADUser {
|
||||
}
|
||||
|
||||
try {
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host URI: $userlookupURI
|
||||
Write-Host body: $body
|
||||
}
|
||||
$users = Invoke-RestMethod -Method Get -Uri $userlookupURI -Headers $request_header -SkipCertificateCheck
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host $users
|
||||
}
|
||||
} catch {
|
||||
throw "ERROR accessing $userlookupURI`nStatusCode: $($_.Exception.Response.StatusCode.value__)`nStatusDescription: $($_.Exception.Response.StatusDescription)"
|
||||
}
|
||||
@@ -570,58 +588,6 @@ Function Get-HorizonADUser {
|
||||
return $users
|
||||
}
|
||||
|
||||
<# Function Get-HorizonADGroup {
|
||||
param (
|
||||
[parameter(Mandatory = $true, ValueFromPipeline = $true)] $Horizon,
|
||||
[string]$Domain = "",
|
||||
[string]$Id = "",
|
||||
[string]$Name = "",
|
||||
[int]$Page = 0,
|
||||
[int]$PageSize = 0
|
||||
)
|
||||
$token = $Horizon.access_token
|
||||
$server = $Horizon.server_name
|
||||
|
||||
$request_header = $global:request_header
|
||||
$request_header += @{"authorization"="Bearer $token"}
|
||||
|
||||
$grouplookupURI = "https://$server/rest/external/v1/ad-users-or-groups"
|
||||
|
||||
$extension = "";
|
||||
|
||||
if ($domain -ne "") {
|
||||
$extension = "?group_only=true&filter={`"type`":`"Equals`",`"name`":`"domain`",`"value`":`"$domain`"}"
|
||||
if ($Page -ne 0) {
|
||||
$extension += "&page=$Page"
|
||||
if ($PageSize -ne 0) {
|
||||
$extension += "&size=$PageSize"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($Id -ne "") {
|
||||
$extension = "/$($Id)?group_only=true"
|
||||
}
|
||||
|
||||
if ($Name -ne "") {
|
||||
$extension = "?group_only=true&filter={`"type`":`"Equals`",`"name`":`"name`",`"value`":`"$Name`"}"
|
||||
}
|
||||
|
||||
$grouplookupURI += $extension
|
||||
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host $MyInvocation.MyCommand.Name Starting
|
||||
}
|
||||
|
||||
try {
|
||||
$users = Invoke-RestMethod -Method Get -Uri $grouplookupURI -Headers $request_header -SkipCertificateCheck
|
||||
} catch {
|
||||
throw "ERROR accessing $grouplookupURI`nStatusCode: $($_.Exception.Response.StatusCode.value__)`nStatusDescription: $($_.Exception.Response.StatusDescription)"
|
||||
}
|
||||
|
||||
return $users
|
||||
} #>
|
||||
|
||||
function Invoke-SSHCommand {
|
||||
param (
|
||||
[Parameter(Mandatory)]
|
||||
@@ -671,6 +637,133 @@ function Get-HorizonSessionConnectedLength {
|
||||
return $retval;
|
||||
}
|
||||
|
||||
function Add-HorizonMachineToPool {
|
||||
param (
|
||||
[parameter(Mandatory = $true, ValueFromPipeline = $true)] $Horizon,
|
||||
[parameter(Mandatory = $true)][string[]] $MachineName,
|
||||
[parameter(Mandatory = $true)] $PoolName
|
||||
)
|
||||
$token = $Horizon.access_token
|
||||
$server = $Horizon.server_name
|
||||
|
||||
$request_header = $global:request_header
|
||||
$request_header += @{"authorization"="Bearer $token"}
|
||||
|
||||
$PoolID = (Get-HorizonDesktopPool -Horizon $Horizon -PoolName $PoolName).id
|
||||
|
||||
$machineAddURI = "https://$server/rest/inventory/v1/desktop-pools/$PoolID/action/add-machines-by-name"
|
||||
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host $MyInvocation.MyCommand.Name Starting
|
||||
}
|
||||
|
||||
$body = @{
|
||||
machine_names = $MachineName
|
||||
} | ConvertTo-Json
|
||||
|
||||
try {
|
||||
$result = Invoke-RestMethod -Method Post -Uri $machineAddURI -body $body -Headers $request_header -SkipCertificateCheck
|
||||
} catch {
|
||||
throw "ERROR accessing $machineAddURI`nStatusCode: $($_.Exception.Response.StatusCode.value__)`nStatusDescription: $($_.Exception.Response.StatusDescription)"
|
||||
}
|
||||
|
||||
return $result
|
||||
}
|
||||
|
||||
function Grant-HorizonDesktop {
|
||||
param (
|
||||
[parameter(Mandatory = $true, ValueFromPipeline = $true)] $Horizon,
|
||||
[parameter(Mandatory = $true)] $MachineName,
|
||||
[parameter(Mandatory = $true)] $UserUPN
|
||||
)
|
||||
$token = $Horizon.access_token
|
||||
$server = $Horizon.server_name
|
||||
|
||||
$request_header = $global:request_header
|
||||
$request_header += @{"authorization"="Bearer $token"}
|
||||
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host $MyInvocation.MyCommand.Name Starting
|
||||
}
|
||||
|
||||
$MachineID = (Get-HorizonMachine -Horizon $Horizon | where {$_.name -eq $MachineName}).id
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host MachineID: $MachineID
|
||||
}
|
||||
if ($MachineID -eq $null) {
|
||||
return [PSCustomObject]@{
|
||||
Success = $false
|
||||
Message = Machine $MachneName does not exist in any desktop pool.
|
||||
}
|
||||
}
|
||||
$UserID = (Get-HorizonAdUser -Horizon $Horizon -Name $UserUPN).id
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host UserID: $UserID
|
||||
}
|
||||
if ($UserID -eq $null) {
|
||||
return [PSCustomObject]@{
|
||||
Success = $false
|
||||
Message = User $UserUPN cannot be found.
|
||||
}
|
||||
}
|
||||
|
||||
$desktopAssignURI = "https://$server/rest/inventory/v1/machines/$MachineID/action/assign-users"
|
||||
|
||||
$body = "[ ""$UserID"" ]"
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host body: $body
|
||||
}
|
||||
|
||||
try {
|
||||
$result = Invoke-RestMethod -Method Post -Uri $desktopAssignURI -body $body -Headers $request_header -SkipCertificateCheck
|
||||
} catch {
|
||||
throw "ERROR accessing $desktopAssignURI`nStatusCode: $($_.Exception.Response.StatusCode.value__)`nStatusDescription: $($_.Exception.Response.StatusDescription)"
|
||||
}
|
||||
|
||||
return $result
|
||||
}
|
||||
|
||||
function Revoke-HorizonDesktop {
|
||||
param (
|
||||
[parameter(Mandatory = $true, ValueFromPipeline = $true)] $Horizon,
|
||||
[parameter(Mandatory = $true)] $MachineName
|
||||
)
|
||||
$token = $Horizon.access_token
|
||||
$server = $Horizon.server_name
|
||||
|
||||
$request_header = $global:request_header
|
||||
$request_header += @{"authorization"="Bearer $token"}
|
||||
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host $MyInvocation.MyCommand.Name Starting
|
||||
}
|
||||
|
||||
$MachineID = (Get-HorizonMachine -Horizon $Horizon | where {$_.name -eq $MachineName}).id
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host MachineID: $MachineID
|
||||
}
|
||||
if ($MachineID -eq $null) {
|
||||
return [PSCustomObject]@{
|
||||
Success = $false
|
||||
Message = Machine $MachneName does not exist in any desktop pool.
|
||||
}
|
||||
}
|
||||
|
||||
$desktopRevokeURI = "https://$server/rest/inventory/v1/machines/$MachineID/action/assign-users"
|
||||
|
||||
$body = "[ ""$UserID"" ]"
|
||||
if ($global:kishorizondebug) {
|
||||
Write-Host body: $body
|
||||
}
|
||||
|
||||
try {
|
||||
$result = Invoke-RestMethod -Method Post -Uri $desktopAssignURI -body $body -Headers $request_header -SkipCertificateCheck
|
||||
} catch {
|
||||
throw "ERROR accessing $desktopAssignURI`nStatusCode: $($_.Exception.Response.StatusCode.value__)`nStatusDescription: $($_.Exception.Response.StatusDescription)"
|
||||
}
|
||||
|
||||
return $result
|
||||
}
|
||||
|
||||
Export-ModuleMember -Function Connect-HorizonServer
|
||||
Export-ModuleMember -Function Get-HorizonVcenter
|
||||
@@ -685,4 +778,6 @@ Export-ModuleMember -Function Get-HorizonSessionLength
|
||||
Export-ModuleMember -Function Get-HorizonKeyAgreement
|
||||
Export-ModuleMember -Function Get-HorizonEntitlements
|
||||
Export-ModuleMember -Function Get-HorizonEntitlementDetail
|
||||
Export-ModuleMember -Function Add-HorizonMachineToPool
|
||||
Export-ModuleMember -Function Grant-HorizonDesktop
|
||||
|
||||
Reference in new issue
Block a user