Доброго времени суток,
коллеги.
В данной статье
рассмотрим корректное обновление клиента Citrix Receiver, с полным вычищением пользовательских настроек.
По теории возможно
корректно удалить Citrix Receiver воспользовавшись утилитой Receiver Clean-Up Utility,
которая корректно не только удалит само приложение, но и вычистит все
пользовательские настройки Receiver'а, а потом спокойно установить новую версию
Receiver'a с необходимыми параметрами. Это идеальный случай, когда на данном
компьютере работает только один пользователь, обладающий правами локального
администратора. В реалии все бывает немного по-другому.
В данной статье
рассмотрим три случая обновления Citrix Receiver'а:
- Простое обновление Receiver используя CMD.
- Обновление Receiver с вычищением настроек пользователей используя PowerShell.
- Обновление Receiver с вычищением настроек пользователей используя PowerShell запущенный под пользовательской учетной записью.
Необходимые требования:
- PowerShell
- Включенный параметр "Set-ExecutionPolicy Unrestricted" разрешающий выполнение PowerShell скриптов.
1. Рассмотрим
простейший пример скрипта корректной установки Receiver,
используя командную строку CMD.
Логика:
- Корректное удаление предыдущего Ресивера посредством утилиты Receiver Clean-Up Utility
- Установка Ресивера с необходимыми нам параметрами
Поместим приложения Ресивер
"CitrixReceiver.exe" и "ReceiverCleanupUtility.exe" в одну папку, там же создадим файл CMD со следующим содержанием:
"%~dp0ReceiverCleanupUtility.exe" /silent
#где %~dp0 это путь к
текущей директории
"%~dp0CitrixReceiver.exe" /includeSSON ENABLE_SSON="Yes" /ALLOWADDSTORE=a STORE0="TEST;http://ven-tst-sf01/Citrix/PNAgent1/config.xml;on;" /silent
"%~dp0CitrixReceiver.exe" /includeSSON ENABLE_SSON="Yes" /ALLOWADDSTORE=a STORE0="TEST;http://ven-tst-sf01/Citrix/PNAgent1/config.xml;on;" /silent
Описание параметров можно
посмотреть тут.
Данный скрипт корректно
вычистит все параметры старого плагина Citrix и установит новый Citrix Receiver
с новыми необходимыми настройками.
2.Обновление Receiver с вычищением настроек пользователей используя PowerShell.
Если за данным
компьютером работают несколько пользователей, например, это компьютер кассиров,
операционистов и т.п., то данный скрипт вычистит все параметры только текущего
пользователя, а остальные пользователи, войдя в данный компьютер под своими
учетными данными увидят "удвоенные" учетные записи, фантомные ярлыки
приложений и т.п.
Для этого придется усовершенствовать
скрипт, используя PowerShell.
Логика скрипта:
- Узнаем количество пользователей на локальном компьютере
- Загружаем реестр каждого пользователя, удаляем необходимые нам ветки реестра, выгружаем реестр.
- Удаляем ресивер, используя Receiver Clean-Up Utility.
- Устанавливаем Citrix Receiver с необходимыми параметрами
- Удаляем настройки пользователя текущего пользователя, не обладающего административными привилегиями.
Приведу листинг скрипта:
1. Узнаем количество
пользователей на локальном компьютере
#Используя класс "win32_userprofile"
наполняем переменную $Profile_Path
списком localPath пользователей. Шаблон C:\Users\%username%.
Подробнее тут (Тут https://msdn.microsoft.com/en-us/library/ee886409(v=vs.85).aspx)
$Profile_Path=gwmi win32_userprofile | select localpath
#Выводим значение переменной $Profile_Path
$Profile_Path
$Profile_Path
#Узнаем количество профилей на данном
компьютере и приравниваем переменной $NUM
$NUM=$Profile_Path.count
$NUM=$Profile_Path.count
#Удаляем сервисные учетные записи Windows
$NUM -= 3
$NUM -= 3
#Выводим значение переменной
$NUM
2. Запускаем цикл, который перебирает
каждого пользователя, вычищая старые настройки.
for
($i = 0; $i -lt $NUM; $i++)
{
{
$i
#Присваиваем переменной $username имя
пользователя соответствующее значению номера строки переменной
"$Profile_Path" взятое по столбцу "Name
$username=($Profile_Path[$i].Name)
$username=($Profile_Path[$i].Name)
#Присвоиваем переменной "$LAOD"
значение загрузки куста HKEY_USERS реестра пользователя
$LOAD = '"HKEY_USERS\'+$username+'" "'+$Profile_Path[$i].localpath+'\NTUSER.DAT"'
$LOAD = '"HKEY_USERS\'+$username+'" "'+$Profile_Path[$i].localpath+'\NTUSER.DAT"'
#Присваиваем переменной "$DELETE_ST"
значение ветви реестра пользователя с настройками учетных записей Receiver,
которую нужно удалить
$DELETE_ST = '"HKEY_USERS\'+$username+'\Software\Citrix\Dazzle\Sites"'
$DELETE_ST = '"HKEY_USERS\'+$username+'\Software\Citrix\Dazzle\Sites"'
#Присваиваем переменной "$DELETE_RS"
значение ветви реестра пользователя с настройками учетных записей Receiver,
которую нужно удалить
$DELETE_RS = '"HKEY_USERS\'+$username+'\Software\Citrix\Receiver\RS"'
$DELETE_RS = '"HKEY_USERS\'+$username+'\Software\Citrix\Receiver\RS"'
#Присваиваем переменной "$DELETE_CS"
значение ветви реестра пользователя с настройками избранных приложений,
добавленных на рабочую панель Receiver’а, которую нужно удалить
$DELETE_CS = '"HKEY_USERS\'+$username+'\Software\Microsoft\Windows\CurrentVersion\Uninstall"'
#Выгружаем куст.
$DELETE_CS = '"HKEY_USERS\'+$username+'\Software\Microsoft\Windows\CurrentVersion\Uninstall"'
#Выгружаем куст.
$UNLOAD
= '"HKEY_USERS\'+$username+'"'
#Выполняем
#Выполняем
Reg load $LOAD
$LOAD
Reg delete $DELETE_ST /f
$DELETE_ST
Reg delete $DELETE_RS /f
$DELETE_RS
Reg delete $DELETE_CS /f
$DELETE_CS
Reg unload $UNLOAD
$UNLOAD
}
$LOAD
Reg delete $DELETE_ST /f
$DELETE_ST
Reg delete $DELETE_RS /f
$DELETE_RS
Reg delete $DELETE_CS /f
$DELETE_CS
Reg unload $UNLOAD
$UNLOAD
}
Если установлена ОС ниже Windows Vista, можно использовать командлет "Get-ChildItem", подробнее тут.
#Присваиваем переменной "$Profile_Path
" значения списка папок пользователей по пути "C:\Users". Для
WinXP - "C:\Documents and Settings"
$Profile_Path = Get-ChildItem -force "C:\Users"
#Далее по аналогии
#Далее по аналогии
$Profile_Path | select Name
$NUM=$Profile_Path.count
$NUM
$NUM=$Profile_Path.count
$NUM
for
($i = 0;
$i -lt $NUM; $i++)
{
$i
$username=($Profile_Path[$i].Name)
$LOAD = '"HKEY_USERS\'+$username+'" "'+$Profile_Path[$i].localpath+'\NTUSER.DAT"'
$DELETE = '"HKEY_USERS\'+$username+'\Software\Citrix\Dazzle\Sites"'
$DELETE_RS = '"HKEY_USERS\'+$username+'\Software\Citrix\Receiver\RS"'
$DELETE_CS = '"HKEY_USERS\'+$username+'\Software\Microsoft\Windows\CurrentVersion\Uninstall"'
$UNLOAD = '"HKEY_USERS\'+$username+'"'
Reg load $LOAD
$LOAD
Reg delete $DELETE /f
$DELETE
Reg delete $DELETE_RS /f
$DELETE_RS
Reg delete $DELETE_CS /f
$DELETE_CS
Reg unload $UNLOAD
$UNLOAD
}
{
$i
$username=($Profile_Path[$i].Name)
$LOAD = '"HKEY_USERS\'+$username+'" "'+$Profile_Path[$i].localpath+'\NTUSER.DAT"'
$DELETE = '"HKEY_USERS\'+$username+'\Software\Citrix\Dazzle\Sites"'
$DELETE_RS = '"HKEY_USERS\'+$username+'\Software\Citrix\Receiver\RS"'
$DELETE_CS = '"HKEY_USERS\'+$username+'\Software\Microsoft\Windows\CurrentVersion\Uninstall"'
$UNLOAD = '"HKEY_USERS\'+$username+'"'
Reg load $LOAD
$LOAD
Reg delete $DELETE /f
$DELETE
Reg delete $DELETE_RS /f
$DELETE_RS
Reg delete $DELETE_CS /f
$DELETE_CS
Reg unload $UNLOAD
$UNLOAD
}
3. Удаляем ресивер, используя Clean-Up Utility.
#Присваиваем переменной "$Loc"
значение пути до текущей папки
$Loc = Get-Location
$Loc = Get-Location
#Присваиваем переменной "$Location"
значение выборки переменной "$Loc" взятое по столбцу "path"
$Location = $Loc.path
$Location = $Loc.path
#Выводим строку 'Uninstall Receiver'
$Log = 'Uninstall Receiver'
$Log
#Запускаем утилиту ReceiverCleanupUtility
$ClenUp = $Location+'\ReceiverCleanupUtility.exe'
$ClenUp
$CleanUPArg = '/silent'
& $ClenUp $CleanUPArg
$Log = 'Uninstall Receiver'
$Log
#Запускаем утилиту ReceiverCleanupUtility
$ClenUp = $Location+'\ReceiverCleanupUtility.exe'
$ClenUp
$CleanUPArg = '/silent'
& $ClenUp $CleanUPArg
4. Устанавливаем Receiver с определенными параметрами
$Log
= 'Install Receiver'
$Log
$Receiver = $Location+'\CitrixReceiver.exe'
$Receiver
$Receiverarg1 = '/includeSSON'
$Receiverarg2 = 'ENABLE_SSON="Yes"'
$Receiverarg3 = '/ALLOWADDSTORE=a'
$Receiverarg4 = 'STORE0="TEST; http://ven-tst-sf01/Citrix/PNAgent1/config.xml;on;"'
$Receiverarg5 = '/silent'
& $Receiver $Receiverarg1 $Receiverarg2 $Receiverarg3 $Receiverarg4 $Receiverar5
$Log
$Receiver = $Location+'\CitrixReceiver.exe'
$Receiver
$Receiverarg1 = '/includeSSON'
$Receiverarg2 = 'ENABLE_SSON="Yes"'
$Receiverarg3 = '/ALLOWADDSTORE=a'
$Receiverarg4 = 'STORE0="TEST; http://ven-tst-sf01/Citrix/PNAgent1/config.xml;on;"'
$Receiverarg5 = '/silent'
& $Receiver $Receiverarg1 $Receiverarg2 $Receiverarg3 $Receiverarg4 $Receiverar5
Сохраним скрипт в файл под
именем «Install.ps1»
5. Для удаления и установки Receiver'а требуются
административные права. Поэтому очень часто технические специалисты запускают
скрипты, находясь под окружением обычного пользователя, повышая его привилегию,
используя инструмент «Run As».
В этом случае настройки текущего пользователя не будут сброшены. Для очистки
настроек необходимо запустить еще один скрипт под правами текущего
пользователя:
#Убиваем процессы Receiver'а
Stop-Process -processname Receiver*
Stop-Process -processname SelfService*
Stop-Process -processname wfcrun32*
#Присваиваем переменной "$objUser" значение имени текущего пользователя, используя параметр "Whoami"
Stop-Process -processname Receiver*
Stop-Process -processname SelfService*
Stop-Process -processname wfcrun32*
#Присваиваем переменной "$objUser" значение имени текущего пользователя, используя параметр "Whoami"
$objUser = New-Object System.Security.Principal.NTAccount(whoami)
#Присваиваем переменной "$strSID" значение SID'а текущего пользователя
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
#Присваиваем переменной "$strSID" значение SID'а текущего пользователя
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
#Присваиваем переменной "$UserSID"
значение SID'а теущего пользователя по столбцу "Value"
$UserSID=$strSID.Value
$UserSID
#Удаляем Ветки реестра текущего пользователя
$DELETE = '"HKEY_USERS\'+$UserSID+'\Software\Citrix\Dazzle\Sites"'
$DELETE_Curr = '"HKEY_CURRENT_USER\Software\Citrix\Dazzle\Sites"'
$DELETE_Rec = '"HKEY_CURRENT_USER\Software\Citrix\Receiver\SR"'
$DELETE_sidrec = '"HKEY_USERS\'+$UserSID+'\Software\Citrix\Receiver\SR"'
$DELETE_cach = '"HKEY_USERS\'+$UserSID+'\Software\Microsoft\Windows\CurrentVersion\Uninstall"'
Reg delete $DELETE_cach /f
$DELETE_cach
Reg delete $DELETE_sidrec /f
$DELETE_sidrec
Reg delete $DELETE /f
$DELETE
Reg delete $DELETE_Rec /f
$DELETE_Rec
Reg delete $DELETE_Curr /f
$DELETE_Curr
$UserSID=$strSID.Value
$UserSID
#Удаляем Ветки реестра текущего пользователя
$DELETE = '"HKEY_USERS\'+$UserSID+'\Software\Citrix\Dazzle\Sites"'
$DELETE_Curr = '"HKEY_CURRENT_USER\Software\Citrix\Dazzle\Sites"'
$DELETE_Rec = '"HKEY_CURRENT_USER\Software\Citrix\Receiver\SR"'
$DELETE_sidrec = '"HKEY_USERS\'+$UserSID+'\Software\Citrix\Receiver\SR"'
$DELETE_cach = '"HKEY_USERS\'+$UserSID+'\Software\Microsoft\Windows\CurrentVersion\Uninstall"'
Reg delete $DELETE_cach /f
$DELETE_cach
Reg delete $DELETE_sidrec /f
$DELETE_sidrec
Reg delete $DELETE /f
$DELETE
Reg delete $DELETE_Rec /f
$DELETE_Rec
Reg delete $DELETE_Curr /f
$DELETE_Curr
3.
Упростим скрипт до одного исполняемого файла.
Логика работы:
- Скрипт вычищает настройки Receiver текущего пользователя
- Повышает административные привилегия, запрашивая логин и пароль
- Под административными привилегиями запускается скрипт для удаления, вычищения и установки Receiver
#Запуск скрипта от имени текущего пользователя
Stop-Process -processname Receiver*
Stop-Process -processname SelfService*
Stop-Process -processname wfcrun32*
$objUser = New-Object System.Security.Principal.NTAccount(whoami)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$UserSID=$strSID.Value
$UserSID
$DELETE = '"HKEY_USERS\'+$UserSID+'\Software\Citrix\Dazzle\Sites"'
$DELETE_Curr = '"HKEY_CURRENT_USER\Software\Citrix\Dazzle\Sites"'
$DELETE_Rec = '"HKEY_CURRENT_USER\Software\Citrix\Receiver\SR"'
$DELETE_sidrec = '"HKEY_USERS\'+$UserSID+'\Software\Citrix\Receiver\SR"'
Reg delete $DELETE /f
$DELETE
Reg delete $DELETE_Curr /f
$DELETE_Curr
Reg delete $DELETE_Rec /f
$DELETE_Rec
Reg delete $DELETE_sidrec /f
$DELETE_sidrec
Stop-Process -processname Receiver*
Stop-Process -processname SelfService*
Stop-Process -processname wfcrun32*
$objUser = New-Object System.Security.Principal.NTAccount(whoami)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$UserSID=$strSID.Value
$UserSID
$DELETE = '"HKEY_USERS\'+$UserSID+'\Software\Citrix\Dazzle\Sites"'
$DELETE_Curr = '"HKEY_CURRENT_USER\Software\Citrix\Dazzle\Sites"'
$DELETE_Rec = '"HKEY_CURRENT_USER\Software\Citrix\Receiver\SR"'
$DELETE_sidrec = '"HKEY_USERS\'+$UserSID+'\Software\Citrix\Receiver\SR"'
Reg delete $DELETE /f
$DELETE
Reg delete $DELETE_Curr /f
$DELETE_Curr
Reg delete $DELETE_Rec /f
$DELETE_Rec
Reg delete $DELETE_sidrec /f
$DELETE_sidrec
#Запускаем PowerShell с
указанием пути до второго скрипта от имени введенных административных учетных
данных.
#Узнаем путь до текущей папки
#Узнаем путь до текущей папки
#Присваиваем переменной
"$Loc" значение пути до текущей папки
$Loc = Get-Location
$Loc = Get-Location
#Присваиваем переменной
"$Location" значение выборки переменной "$Loc" взятое по
столбцу "path"
$Location = $Loc.path
$Location = $Loc.path
#Присваиваем переменной
"$inst" путь до скрипта «Install.ps1»
$inst = '-File "'+$Location+'\Install.ps1"'
$inst
$inst = '-File "'+$Location+'\Install.ps1"'
$inst
#Присваиваем переменной
"$usr" значение учетных данных, введенных администратором.
$usr
= Get-Credential
#Запускаем консоль
PowerShell под учетными данными администратора
Start-Process powershell.exe -Credential $usr -ArgumentList $inst -NoNewWindow
Start-Process powershell.exe -Credential $usr -ArgumentList $inst -NoNewWindow
Скрипт "Install.ps1" приведён выше. Сохраним скрипт в файл под именем «CleanReg.ps1»
Теперь для простоты запуска создадим файл "Install.cmd" с содержанием:
powershell.exe -file .\CleanReg.ps1
Итого, в папке должно находиться пять файлов:
"Install.cmd" - Файл запуска скрипта PowerShell
"CleanReg.ps1" - Скрипт, очищающий
настройки Receiver'a текущего пользователя
"Install.ps1" - Скрипт, очищающий
настройки Receiver'а всех пользователей на данном компьютере, удаление и установка Receiver'а
"CitrixReceiver.exe" - Дистрибутив установки Citrix Receiver
"ReceiverCleanupUtility.exe"
- Дистрибутив удаления Citrix Receiver: Citrix CleanUp Utility
Архив можно скачать отсюда.
На этом предлагаю закончить.
Вопросы, замечания и предложения пишите в комментариях или на почту.
Удачного тестирования!