-
Notifications
You must be signed in to change notification settings - Fork 206
/
Copy pathNew-CTXMachine.ps1
151 lines (131 loc) · 5.99 KB
/
New-CTXMachine.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#Requires -Version 5.0
<#
.SYNOPSIS
Adds a machine that can be used to run desktops and applications
.DESCRIPTION
.NOTES
This PowerShell script was developed and optimized for ScriptRunner. The use of the scripts requires ScriptRunner.
The customer or user is authorized to copy the script from the repository and use them in ScriptRunner.
The terms of use for ScriptRunner do not apply to this script. In particular, ScriptRunner Software GmbH assumes no liability for the function,
the use and the consequences of the use of this freely available script.
PowerShell is a product of Microsoft Corporation. ScriptRunner is a product of ScriptRunner Software GmbH.
© ScriptRunner Software GmbH
.COMPONENT
Requires the library script CitrixLibrary.ps1
Requires PSSnapIn Citrix*
.LINK
https://github.com/scriptrunner/ActionPacks/blob/master/Citrix/Administration
.Parameter SiteServer
[sr-en] Specifies the address of a XenDesktop controller.
This can be provided as a host name or an IP address
[sr-de] Name oder IP Adresse des XenDesktop Controllers
.Parameter MachineNames
[sr-en] Name of the machines to create (in the form 'domain\machine')
[sr-de] Namen der Maschinen (Domäne\Maschinenname)
.Parameter MachineName
[sr-en] Name of the machine to create (in the form 'domain\machine')
[sr-de] Name der Maschine (Domäne\Maschinenname)
.Parameter CatalogUid
[sr-en] Catalog to which this machine will belong
[sr-de] UId des Maschinenkatalogs, für diese Maschine
.Parameter AssignedClientName
[sr-en] Client name to which this machine will be assigned
[sr-de] Client-Name, dem dieses Gerät zugewiesen wird
.Parameter AssignedIPAddress
[sr-en] Client IP address to which this machine will be assigned
[sr-de] Client-IP-Adresse, der dieses Gerät zugewiesen wird
.Parameter HostedMachineId
[sr-en] Unique ID by which the hypervisor recognizes the machine
[sr-de] Eindeutige ID der Maschine beim Hypervisor
.Parameter HypervisorConnectionUid
[sr-en] Hypervisor connection that runs the machine
[sr-de] Hypervisor-Verbindung, auf der die Maschine läuft
.Parameter InMaintenanceMode
[sr-en] Machine is initially in maintenance mode
[sr-de] Maschine zunächst in den Wartungsmodus versetzen
.Parameter IsReserved
[sr-en] Machine should be reserved for special use
[sr-de] Maschine wird für spezielle Verwendung reserviert
#>
param(
[Parameter(Mandatory = $true,ParameterSetName = 'Single')]
[string]$MachineName,
[Parameter(Mandatory = $true,ParameterSetName = 'Multi')]
[string[]]$MachineNames,
[Parameter(Mandatory = $true,ParameterSetName = 'Single')]
[Parameter(Mandatory = $true,ParameterSetName = 'Multi')]
[Int64]$CatalogUid,
[Parameter(ParameterSetName = 'Single')]
[string]$AssignedClientName,
[Parameter(ParameterSetName = 'Single')]
[string]$AssignedIPAddress,
[Parameter(ParameterSetName = 'Single')]
[string]$HostedMachineId,
[Parameter(ParameterSetName = 'Single')]
[int]$HypervisorConnectionUid,
[Parameter(ParameterSetName = 'Single')]
[bool]$InMaintenanceMode,
[Parameter(ParameterSetName = 'Single')]
[bool]$IsReserved,
[Parameter(ParameterSetName = 'Single')]
[Parameter(ParameterSetName = 'Multi')]
[string]$SiteServer
)
$LogID = $null
[bool]$success = $false
[string[]]$ret = @()
try{
[string[]]$Properties = @('MachineName','PowerState','FaultState','MaintenanceModeReason','SessionCount','SessionState','CatalogName','DesktopGroupName','IPAddress','ZoneName','Uid','SessionsEstablished','SessionsPending')
StartCitrixSessionAdv -ServerName ([ref]$SiteServer)
[hashtable]$cmdArgs = @{'ErrorAction' = 'Stop'
'AdminAddress' = $SiteServer
'CatalogUid' = $CatalogUid
'LoggingID' = $LogID
}
if($PSCmdlet.ParameterSetName -eq 'Single'){
StartLogging -ServerAddress $SiteServer -LogText "Create machine $($MachineName)" -LoggingID ([ref]$LogID)
$cmdArgs.Add('MachineName' , $MachineName)
if($PSBoundParameters.ContainsKey('AssignedClientName') -eq $true){
$cmdArgs.Add('AssignedClientName',$AssignedClientName)
}
if($PSBoundParameters.ContainsKey('AssignedIPAddress') -eq $true){
$cmdArgs.Add('AssignedIPAddress',$AssignedIPAddress)
}
if($PSBoundParameters.ContainsKey('HostedMachineId') -eq $true){
$cmdArgs.Add('HostedMachineId',$HostedMachineId)
}
if($PSBoundParameters.ContainsKey('InMaintenanceMode') -eq $true){
$cmdArgs.Add('InMaintenanceMode',$InMaintenanceMode)
}
if($PSBoundParameters.ContainsKey('HypervisorConnectionUid') -eq $true){
$cmdArgs.Add('HypervisorConnectionUid',$HypervisorConnectionUid)
}
if($PSBoundParameters.ContainsKey('IsReserved') -eq $true){
$cmdArgs.Add('IsReserved',$IsReserved)
}
$ret += New-BrokerMachine @cmdArgs | Select-Object $Properties
$success = $true
}
else{
foreach($machine in $MachineNames){
StartLogging -ServerAddress $SiteServer -LogText "Create machine $($machine)" -LoggingID ([ref]$LogID)
$ret += New-BrokerMachine @cmdArgs -MachineName $machine | Select-Object $Properties
$success = $true
StopLogging -LoggingID $LogID -ServerAddress $SiteServer -IsSuccessful $success
$LogID = $null
}
}
if($SRXEnv) {
$SRXEnv.ResultMessage = $ret
}
else{
Write-Output $ret
}
}
catch{
throw
}
finally{
StopLogging -LoggingID $LogID -ServerAddress $SiteServer -IsSuccessful $success
CloseCitrixSession
}