XenApp 6 PowerShell SDK Released
Author: Frank-Peter (77 Articles)
About two weeks ago Citrix has released the XenApp 6 PowerShell SDK that enables people to manage XenApp 6 farms using Microsoft PowerShell scripting. The modules included in the SDK are Citrix XenApp Commands (aka XenApp cmdlets), Citrix Group Policy Provider, and Citrix Common Commands. The Citrix Principal Design Engineer Tom M Kludy wrote some nice blogs about the XenApp 6 SDK.
Reading the XenApp cmdlets reference I found the following information for those of you who are familiar with MFCOM:
Starting in XenApp 6.0, MFCOM as a publically supported programming and scripting interface will no longer be available. All existing MFCOM-based code no longer works on XenApp 6.0. No doubt that the absence of MFCOM will be something that requires additional effort to the adoption of XenApp 6.0.
Take a deep breath and don’t panic! Most of MFCOM scripts can be replaced by one-liners meaning that most of the short MFCOM scripts are obsolete as they’ve been replaced by PowerShell cmdlets.
For example adding a Citrix admin with the XenApp 6 PowerShell SDK is a one-liner:
New-XAAdministrator –AdministratorName ctxadmin –AdministratorType Full
In MFCOM, an administrator would need to write a script with dozens lines of code like below to accomplish the same task. So after all, it was definitely a good idea to discontinue MFCOM Support.
function Test-IsCitrixAdministrator(){
$MetaFrameWinFarmObject = 1
$MFCOM = New-Object -ComObject 'MetaframeCOM.MetaFrameFarm'
if (!$MFCOM)
{
$result = $false
}
else
{
$MFCOM.Initialize($MetaFrameWinFarmObject)
$result = [boolean] $MFCOM.WinFarmObject.IsCitrixAdministrator
$MFCOM = $null
}
$result
}
function Test-ADGroup(){
param(
$name = $(throw "No AD group name specified.")
)
$domainRoot = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().RootDomain.Name
$searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]"GC://$domainRoot")
$searcher.Filter = "(&(objectClass=Group)(name=$name))"
$result = $searcher.FindOne()
[boolean] $result
}
function Add-CitrixAdmins(){
param(
$accounts = $(throw "No comma-seperated list of Citrix Admin accounts specified."),
$adminType = $(throw "No Admin Type specified. (Full or ViewOnly?)")
)
$MetaFrameWinFarmObject = 1
$MFAdminPermissionViewOnly = 1
$MFAdminPermissionFullAdmin = 3
$MFAccountAuthorityADS = 3
$MFAccountGlobalGroup = 4
$MFAccountEnable = 1
switch($adminType)
{
"Full"
{
$MFAdminPermission = $MFAdminPermissionFullAdmin
}
"ViewOnly"
{
$MFAdminPermission = $MFAdminPermissionViewOnly
}
default
{
throw "This function supports only the Citrix Admin Privilege levels Full and ViewOnly."
}
}
$MFCOM = New-Object -ComObject 'MetaframeCOM.MetaFrameFarm'
$MFCOM.Initialize($MetaFrameWinFarmObject)
$currentAdmins = $MFCOM.Admins | %{$_.FriendlyName}
$newAdmins = $accounts.Split(",")
$defaultDomain = $env:USERDOMAIN
foreach($account in $newAdmins)
{
$newAdmin = $account.Split("\")
if($newAdmin.Count -eq 1)
{
$accountDomain = $defaultDomain
$accountName = $account
if (-not (Test-ADGroup $accountName)){throw "Group does not exist in $accountDomain - $accountName"}
}
else
{
$accountDomain = $newAdmin[0]
$accountName = $newAdmin[1]
}
if($currentAdmins -notcontains "$accountDomain\$accountName")
{
$mfAdmin = $MFCOM.AddAdmin()
$mfAdmin.AdminType = $MFAdminPermission
$mfAdmin.AAType = $MFAccountAuthorityADS
$mfAdmin.AAName = $accountDomain
$mfAdmin.AccountType = $MFAccountGlobalGroup
$mfAdmin.AccountName = $accountName
$mfAdmin.Enable = $MFAccountEnable
$mfAdmin.SaveData()
$mfAdmin = $null
}
}
}
Sunday, 9. May 2010 21:36
I don’t know if it helps, but anyways – Citrix has published a utility called “MFCOM to Powershell Script Searcher” that can help by providing corresponding XenApp Powershell commands from an existing MFCOM object or method: http://support.citrix.com/article/CTX125089
Monday, 17. May 2010 12:37
[...] Citrix has released the XenApp 6 PowerShell SDK [...]
Wednesday, 9. June 2010 15:01
[...] I wrote here about the release of the Citrix XenApp 6 PowerShell SDK and that XenApp 6 neither supports nor [...]