I ran into an issue with a Citrix XenDesktop environment where application settings had to be recovered but unfortunately none of the Encoded Icon Data was available so all applications had the default citrix application icon with Uid of 1.
I had to get a little creative with PowerShell to get the application's icon data back. Unfortunately if there were custom icons, this wouldn't work - but in a time of recovery beggars can't be choosers.
The below script will take each application located on a server from a delivery group (I only had one here, but this could be upgraded to walk multiple) and extract the first available icon from the executable of the published application, create the encoded icon data, and then assign the application to that new icon. In my case this took care of most of the applications. I had a couple published batch files that I tweaked after the fact - but this was much nicer than going through the GUI and manually adjusting every application in the environment.
Add-PSSnapin *Cit*
$applications = $null
$applications = Get-BrokerApplication * | Where-Object {$_.IconUid -eq 1}
$sessionhost = $null
$sessionhost = Get-BrokerDesktop * | where-object {$_.MachineUid -eq 1}
$manuallyfix = $null
foreach($app in $applications){
if($app.CommandLineExecutable -like "C:*")
{
$localpath=$null
$localpath=$app.CommandLineExecutable.TrimStart("C",":")
$path = $null
$path = "\\"+$sessionhost.HostedMachineName+"\C$"+$localpath
$icon = $null
$icon =get-ctxicon $path -index 0
$newicon = new-brokericon -EncodedIconData $icon.EncodedIconData
write-host $app.browsername "changing to Icon Uid: " $newicon.uid
Get-BrokerApplication $app.browsername | Set-BrokerApplication -IconUid $newicon.uid
}else
{$manuallyfix+=$app.name+"`n"}
}
write-host "`n`nManually fix these apps: `n"
$manuallyfix
No comments:
Post a Comment