Update KISHorizon.psm1
This commit is contained in:
1 parent
a3badc4f9e
commit
8ca2a1bd4b
1 file changed
+185
-90
+185
-90
@@ -130,6 +130,10 @@ function Get-HorizonMachine {
|
|||||||
|
|
||||||
$machineUri = "https://$server/rest/inventory/v5/machines?sort_by=name&order_by=ASC"
|
$machineUri = "https://$server/rest/inventory/v5/machines?sort_by=name&order_by=ASC"
|
||||||
|
|
||||||
|
if ($global:kishorizondebug) {
|
||||||
|
Write-Host $MyInvocation.MyCommand.Name Starting
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$machines = Invoke-RestMethod -Method Get -Uri $machineUri -Headers $request_header -SkipCertificateCheck
|
$machines = Invoke-RestMethod -Method Get -Uri $machineUri -Headers $request_header -SkipCertificateCheck
|
||||||
} catch {
|
} catch {
|
||||||
@@ -406,18 +410,23 @@ function Get-HorizonDesktopPool {
|
|||||||
$pools | Add-Member -MemberType NoteProperty -Name cluster -Value ""
|
$pools | Add-Member -MemberType NoteProperty -Name cluster -Value ""
|
||||||
$pools | Add-Member -MemberType NoteProperty -Name GpuEnabled -Value 0
|
$pools | Add-Member -MemberType NoteProperty -Name GpuEnabled -Value 0
|
||||||
$pools | Add-Member -MemberType NoteProperty -Name Entitlements -Value @()
|
$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
|
$machines = $Horizon | Get-HorizonMachine
|
||||||
$sessions = $Horizon | Get-HorizonSession
|
$sessions = $Horizon | Get-HorizonSession
|
||||||
|
|
||||||
$counter = 1
|
$counter = 1
|
||||||
foreach ($pool in $pools) {
|
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
|
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}
|
$mymachines = $machines | where {$_.desktop_pool_id -eq $pool.id}
|
||||||
$pool.machines += $mymachines
|
$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_name -Value $machineName
|
||||||
$session | Add-Member -MemberType NoteProperty -Name machine_dns_name -Value $machineDNSName
|
$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)) {
|
if (-not ($global:DefaultVIServer.Name -contains $pool.vCenter)) {
|
||||||
throw "Not Connected to vCenter $($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.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
|
if ($null -ne $pool.provisioning_settings.base_vm_name) {
|
||||||
$snappath = ""
|
$pool.provisioning_settings.base_vm_name = (Get-View -Id "VirtualMachine-$($pool.provisioning_settings.parent_vm_id)").Name
|
||||||
$goldVM = Get-VM $pool.provisioning_settings.base_vm_name
|
$snappath = ""
|
||||||
$thissnap = $goldVM | Get-Snapshot | Where-Object {$_.Id -eq "VirtualMachineSnapshot-$($pool.provisioning_settings.base_snapshot_id)"}
|
$goldVM = Get-VM $pool.provisioning_settings.base_vm_name
|
||||||
while ($thissnap.parentsnapshotid.length -gt 0) {
|
$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 "") {
|
if ($snappath -eq "") {
|
||||||
$snappath = $thissnap.Name
|
$snappath = $thissnap.Name
|
||||||
} else {
|
} else {
|
||||||
$snappath = $thissnap.Name + "\" + $snappath
|
$snappath = $thissnap.Name + "\" + $snappath
|
||||||
}
|
}
|
||||||
$thissnap = Get-VM $pool.provisioning_settings.base_vm_name | Get-Snapshot | Where-Object {$_.Id -eq $thissnap.ParentSnapshotId}
|
$pool.provisioning_settings.snapshot_path = $snappath
|
||||||
}
|
$pool.provisioning_settings.resource_pool_name = $goldVM.ResourcePool
|
||||||
if ($snappath -eq "") {
|
$pool.provisioning_settings.datacenter_name = (Get-View "Datacenter-$($pool.provisioning_settings.datacenter_id)").Name
|
||||||
$snappath = $thissnap.Name
|
$basefolderpath = ""
|
||||||
} else {
|
$thisfolder = Get-View "Folder-$($pool.provisioning_settings.vm_folder_id)"
|
||||||
$snappath = $thissnap.Name + "\" + $snappath
|
while ($thisfolder.parentsnapshotid.length -gt 0) {
|
||||||
}
|
if ($basefolderpath -eq "") {
|
||||||
$pool.provisioning_settings.snapshot_path = $snappath
|
$basefolderpath = $thisfolder.Name
|
||||||
$pool.provisioning_settings.resource_pool_name = $goldVM.ResourcePool
|
} else {
|
||||||
$pool.provisioning_settings.datacenter_name = (Get-View "Datacenter-$($pool.provisioning_settings.datacenter_id)").Name
|
$basefolderpath = $thisfolder.Name + "\" + $basefolderpath
|
||||||
$basefolderpath = ""
|
}
|
||||||
$thisfolder = Get-View "Folder-$($pool.provisioning_settings.vm_folder_id)"
|
$thisfolder = Get-View "Folder-$($thisfolder.Parent)"
|
||||||
while ($thisfolder.parentsnapshotid.length -gt 0) {
|
}
|
||||||
if ($basefolderpath -eq "") {
|
if ($basefolderpath -eq "") {
|
||||||
$basefolderpath = $thisfolder.Name
|
$basefolderpath = $thisfolder.Name
|
||||||
} else {
|
} else {
|
||||||
$basefolderpath = $thisfolder.Name + "\" + $basefolderpath
|
$basefolderpath = $thisfolder.Name + "\" + $basefolderpath
|
||||||
}
|
}
|
||||||
$thisfolder = Get-View "Folder-$($thisfolder.Parent)"
|
$pool.provisioning_settings.base_folder_path = $basefolderpath
|
||||||
}
|
$datastores = @()
|
||||||
if ($basefolderpath -eq "") {
|
foreach ($datastore in $pool.storage_settings.datastores) {
|
||||||
$basefolderpath = $thisfolder.Name
|
$thisds = Get-View -Id "Datastore-$($datastore.datastore_id)"
|
||||||
} else {
|
$datastore.name = $thisds.Name
|
||||||
$basefolderpath = $thisfolder.Name + "\" + $basefolderpath
|
$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);
|
$pool.GpuEnabled = ($pool.display_protocol_settings.vgpu_grid_profile.Length -gt 0);
|
||||||
@@ -562,7 +573,14 @@ Function Get-HorizonADUser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if ($global:kishorizondebug) {
|
||||||
|
Write-Host URI: $userlookupURI
|
||||||
|
Write-Host body: $body
|
||||||
|
}
|
||||||
$users = Invoke-RestMethod -Method Get -Uri $userlookupURI -Headers $request_header -SkipCertificateCheck
|
$users = Invoke-RestMethod -Method Get -Uri $userlookupURI -Headers $request_header -SkipCertificateCheck
|
||||||
|
if ($global:kishorizondebug) {
|
||||||
|
Write-Host $users
|
||||||
|
}
|
||||||
} catch {
|
} catch {
|
||||||
throw "ERROR accessing $userlookupURI`nStatusCode: $($_.Exception.Response.StatusCode.value__)`nStatusDescription: $($_.Exception.Response.StatusDescription)"
|
throw "ERROR accessing $userlookupURI`nStatusCode: $($_.Exception.Response.StatusCode.value__)`nStatusDescription: $($_.Exception.Response.StatusDescription)"
|
||||||
}
|
}
|
||||||
@@ -570,58 +588,6 @@ Function Get-HorizonADUser {
|
|||||||
return $users
|
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 {
|
function Invoke-SSHCommand {
|
||||||
param (
|
param (
|
||||||
[Parameter(Mandatory)]
|
[Parameter(Mandatory)]
|
||||||
@@ -671,6 +637,133 @@ function Get-HorizonSessionConnectedLength {
|
|||||||
return $retval;
|
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 Connect-HorizonServer
|
||||||
Export-ModuleMember -Function Get-HorizonVcenter
|
Export-ModuleMember -Function Get-HorizonVcenter
|
||||||
@@ -685,4 +778,6 @@ Export-ModuleMember -Function Get-HorizonSessionLength
|
|||||||
Export-ModuleMember -Function Get-HorizonKeyAgreement
|
Export-ModuleMember -Function Get-HorizonKeyAgreement
|
||||||
Export-ModuleMember -Function Get-HorizonEntitlements
|
Export-ModuleMember -Function Get-HorizonEntitlements
|
||||||
Export-ModuleMember -Function Get-HorizonEntitlementDetail
|
Export-ModuleMember -Function Get-HorizonEntitlementDetail
|
||||||
|
Export-ModuleMember -Function Add-HorizonMachineToPool
|
||||||
|
Export-ModuleMember -Function Grant-HorizonDesktop
|
||||||
|
|
||||||
Reference in new issue
Block a user