Upload
jonathanmedd
View
8.593
Download
4
Embed Size (px)
DESCRIPTION
PowerShell in XenDesktop 5
Citation preview
POWERSHELL IN CITRIX XENDESKTOP 5
Jonathan Medd
What is Citrix XenDesktop?
What is Citrix XenDesktop?
How Does It Work?
XenDesktop 5 and PowerShell
XenDesktop Management built on top of PowerShell
Desktop Studio Management tool issues PowerShell commands behind the scenes
Replaces the MFCOM scripting of previous versions (Same story in XenApp 6)
Pre-Requisites for Management Workstation
Install Desktop Studio on an admin workstation
http://support.citrix.com/article/CTX127527
Consists of….PSSnapins and Providers
Consists of….PSSnapins and Providers
Total of 330 Cmdlets across all PSSnapins
http://support.citrix.com/static/kc/CTX127254/help/index.htm
Hypervisor Connections and Hosting Units Provider
Supports the major hypervisors: Citrix XenServer VMware vSphere Microsoft Hyper-V
Hypervisor Connections and Hosting Units Provider
Hypervisor Connections and Hosting Units Provider
Manage with standard PowerShell cmdlets: Get-Childitem, Get-Item New-Item Set-Item Rename-Item Remove-Item
Hypervisor Connections and Hosting Units Provider
Give slightly more cmdlet feel with these functions: Function Get-HypervisorConnection
{Get-ChildItem xdhyp:\Connections} Function Get-HostingUnit {Get-Childitem
xdhyp:\HostingUnits}
Demo: Create a Hypervisor Connection and a Hosting Unit $HypConn = New-Item -Path xdhyp:\Connections -Name
vCenter01 -HypervisorAddress http://vcenter01.sunnydale.local/sdk -UserName XenDesktop -Password Password01 -ConnectionType vCenter –Persist
New-Item -Path xdhyp:\HostingUnits -Name pESX02 -HypervisorConnectionName vCenter01 -RootPath XDHyp:\Connections\vCenter01\HQ.datacenter\Physical.folder\pesx02.sunnydale.local.computeresource -NetworkPath "XDHyp:\Connections\vCenter01\HQ.datacenter\Physical.folder\pesx02.sunnydale.local.computeresource\VM Network 20.network" -StoragePath "XDHyp:\Connections\vCenter01\HQ.datacenter\Physical.folder\pesx02.sunnydale.local.computeresource\pESX02_Local.storage“
New-BrokerHypervisorConnection -HypHypervisorConnectionUid $HypConn.HypervisorConnectionUid
Demo: Create a Hypervisor Connection and a Hosting Unit
All actions in Desktop Studio Run PowerShell Under the Hood
Demo: All actions in Desktop Studio Run PowerShell Under the Hood
• Remove Hypervisor Connection
Managing Administrators
• New-BrokerAdministrator -BrokerAdmin $False -Enabled $True -FullAdmin $True -Name 'SUNNYDALE\XenDesktopAdmins' -ProvisioningAdmin $False -ReadOnly $False -AdminAddress 'DDC01.sunnydale.local:80‘
• Set-BrokerAdministrator -Name 'SUNNYDALE\XenDesktopAdmins' -BrokerAdmin $False -Enabled $False -FullAdmin $True -ProvisioningAdmin $False -ReadOnly $False -AdminAddress 'DDC01.sunnydale.local:80'
Demo: Managing Administrators
Create a Catalog$CatalogName = "Windows 7 Catalog“ #Name of the catalog that will be created$CatalogDescription = "Windows 7 MCS Catalog" #Description given to the catalog$DeviceNamingScheme = "Win7-#" #Naming scheme for the MCS-created VMs$DeviceNamingSchemeType = "Numeric" #Naming scheme type for the MCS-created VMs$DeviceOU = "OU=Workstations,DC=sunnydale,DC=local" #Active Directory OU where the MCS-created VMs will be placed$DeviceDomain = "sunnydale.local" #Active Directory Domain where the MCS-created VMs will be managed$MasterVMName = "Win7Image" #Name of the "Master VM" that will be used with MCS$NumDeviceAccounts = 1 #Create 1 VM with MCS using the naming scheme defined above$DeviceStartIndex = 1 #VM names should start with an index of 1$VMCpuCount = 1 #Two vcpu's for each MCS-created VM$VMMemoryMB = 1024 #1GB ram for each MCS-created VM$HostUnitName = "pESX02" #vSphere "host" as listed in the Hosts node of the Desktop Studio Console$DDCAddress = “DDC01.sunnydale.local:80" #DDC the cmdlets will connect to
http://blogs.citrix.com/2011/03/24/xendesktop-5-powershell-sdk-primer-part-3-creating-pooled-catalogs-that-leverage-machine-creation-services/
Create a Catalog
During Catalog creation you will see the below in Desktop Studio until Catalog has been created
Create a Catalog
#Create the catalog container$Catalog = New-BrokerCatalog -AllocationType 'Random' -CatalogKind 'SingleImage' -Name $CatalogName -Description $CatalogDescription -PvsForVM @() -AdminAddress $DDCAddress#Create an identity pool to store the AD computer account info for this catalog.#We are giving the identity pool the same name as the catalog to keep better track$IdentityPool = New-AcctIdentityPool -IdentityPoolName $CatalogName -NamingScheme $DeviceNamingScheme -NamingSchemeType $DeviceNamingSchemeType -OU $DeviceOU -Domain $DeviceDomain -AllowUnicode -AdminAddress $DDCAddress$IdentityPool
Create a Catalog
#Get reference to the broker service group$BrokerServiceGroup = Get-ConfigServiceGroup -ServiceType "Broker" -AdminAddress $DDCAddress$BrokerServiceGroup
#Add metadata to the broker service group to tie the catalog with the identity pool it is using$MetadataPropertyName = "Citrix_DesktopStudio_BrokerCatalogIdentityPoolReferencePrefix_" + $Catalog.Uid$MetadataPropertyValue = $IdentityPool.IdentityPoolUid
$NewMetadata = Add-ConfigServiceGroupMetadata -ServiceGroupUid $BrokerServiceGroup.ServiceGroupUid -Property $MetadataPropertyName -Value $MetadataPropertyValue -AdminAddress $DDCAddress
Create a Catalog
#Get reference to the hosting unit and hypervisor connection it uses$HostUnitPath = 'xdhyp:\hostingunits\' + $HostUnitName$HostUnit = Get-Item -Path $HostUnitPath
$HypConnection = Get-BrokerHypervisorConnection -Name $HostUnit.HypervisorConnection.HypervisorConnectionName -AdminAddress $DDCAddress
Create a Catalog
#Create a snapshot of the master VM image$SnapshotName = "Citrix_XD_" + $CatalogName$MasterVMPath = "XDHyp:\hostingunits\" + $HostUnit.HostingUnitName + "\" + $MasterVMName + ".vm"$Snapshot = New-HypVMSnapshot -SnapshotName $SnapshotName -LiteralPath $MasterVMPath -AdminAddress $DDCAddress
Create a Catalog
#Create a provisioning scheme that defines the details of the MCS cloned VMs.#This process creates a copy of the snapshot and can take several minutes to complete.#Note: New-ProvScheme returns a GUID that represents the TaskID for the copy task.$ProvSchemeName = $CatalogName + "_" + $HostUnit.HostingUnitName$SnapshotPath = $MasterVMPath + "\" + $SnapshotName + ".snapshot“
$ProvSchemeTask = New-ProvScheme -ProvisioningSchemeName $ProvSchemeName -HostingUnitName $HostUnit.HostingUnitName -IdentityPoolName $IdentityPool.IdentityPoolName -VMCpuCount $VMCpuCount -VMMemoryMB $VMMemoryMB -CleanOnBoot -MasterImageVM $SnapshotPath -RunAsynchronously -AdminAddress $DDCAddress
Nearly there!
Create a Catalog
#Update the catalog with what provisioning scheme and hosting unit it is using$ProvScheme = Get-ProvScheme -ProvisioningSchemeName $ProvSchemeName -AdminAddress $DDCAddress$PvsForVM = $ProvScheme.ProvisioningSchemeUid.ToString() + ":" + $ProvScheme.HostingUnitUid.ToString()Set-BrokerCatalog -Name $strCatalogName -PvsForVM $strPvsForVM -AdminAddress $strDDCAddress
Create a Catalog
#Create machine accounts in Active Directory from info stored in the identity pool.#After running this command, the machine accounts should be visible within the Active Directory "Users and Computers" snap-in.$Accounts = New-AcctADAccount -IdentityPoolName $IdentityPool.IdentityPoolName -Count $NumDeviceAccounts -StartCount $DeviceStartIndex -AdminAddress $DDCAddress
Create a Catalog
#Associate controllers (DDC Servers) to the provisioning scheme.$ProvScheme = Add-ProvSchemeControllerAddress -ProvisioningSchemeName $ProvScheme.ProvisioningSchemeName -ControllerAddress $DDCAddress -AdminAddress $DDCAddress
#Create virtual desktop VMs from the info specified by the provisioning scheme. After executing this command, the VMs will show up in the hypervisor.$ProvVMTask = New-ProvVM -ProvisioningSchemeName $ProvScheme.ProvisioningSchemeName -ADAccountName $Accounts.SuccessfulAccounts -RunAsynchronously -AdminAddress $DDCAddress
Create a Catalog#Loop though the newly provisioned VMs, "lock" them, and add them to the catalog$ProvVMs = Get-ProvVM -ProvisioningSchemeName $ProvScheme.ProvisioningSchemeName -AdminAddress $strDDCAddressif ($ProvVMs -ne $null) { foreach ($ProvVM in $ProvVMs) {
#Lock VM in the provisioning scheme with a tag called "Brokered" (so it cannot be removed without being unlocked first) $LockVM = Lock-ProvVM -ProvisioningSchemeName $ProvScheme.ProvisioningSchemeName -VMID $ProvVM.VMId -Tag "Brokered" -AdminAddress $DDCAddress
#Add VM to the catalog created above $BrokerMachine = New-BrokerMachine -CatalogUid $Catalog.Uid -HostedMachineId $ProvVM.VMId -HypervisorConnectionUid $HypConnection.Uid -MachineName $ProvVM.ADAccountSid -AdminAddress $DDCAddress
if ($BrokerMachine -ne $null){ Write-Host "Successfully added" $ProvVM.ADAccountName "to the"
$Catalog.Name "catalog..."}else{
Write-Host "ERROR: Could not add" $ProvVM.ADAccountName "to the" $Catalog.Name "catalog..."
} }}
Create a Catalog – Finished!
Bonus: Automate the DDC Install
http://www.jonathanmedd.net/2012/06/automating-the-install-of-xendesktop-ddc-with-powershell.html
Resources
Windows PowerShell Bible 2.0 - XenDesktop chapter
Citrix Blog Series – XenDesktop 5 PowerShell SDK PrimerPart 1 – Getting StartedPart 2 – Creating Hypervisor Connections a
nd HostsPart 3 – Creating Pooled Catalogs with MCSPart 4 – Creating Pool Physical Catalogs