С помощью сообщества я, наконец, завершил базовый сценарий, который создаст группы работников, политики, параметры политики, а затем свяжет политики с группами работников.Оптимизация скрипта для создания политик фермы Citrix выполняется слишком медленно
У меня есть много write-hosts
, чтобы увидеть, что происходит, и чтобы увидеть, где скрипт держится больше всего, будет удален по дороге.
Когда он устанавливает настройки set-ctxgrouppolicyconfiguration
, он вялый. Скрипт занимает около 8-10 минут, что очень медленно. Центр приложений Citrix по своей сути медленный, когда вручную записывает каждую политику в SQL-сервер, поэтому не уверен, что это можно ускорить.
import-module Citrix.GroupPolicy.Commands
add-pssnapin *Citrix*
$count = 0
$tomorrow = ConvertTo-DwordDate -date (get-date).AddDays(1)
new-xafolder 'WorkerGroups/reboot schedules'
$days = @("mon", "tues", "wed", "thurs", "fri", "sat", "sun")
foreach ($day in $days) {
write-host "processing $day"
$count = $count + 1
write-host "creating workerGroup"
new-xaworkergroup "$day - 3am" -folderpath 'WorkerGroups/reboot schedules' -description "scheduled reboot for $day - 3am"
write-host "creating policy"
new-ctxgrouppolicy "reboot $day 3am" -type computer -priority $count
write-host "linking policy to workerGroup"
add-ctxgrouppolicyfilter "reboot $day 3am" computer servergroup0 workergroup "$day - 3am"
write-host "setting reboot parameters"
set-ctxgrouppolicyconfiguration "reboot $day 3am" computer scheduledReboots enabled
set-ctxgrouppolicyconfiguration "reboot $day 3am" computer rebootWarningMessage enabled
set-ctxgrouppolicyconfiguration "reboot $day 3am" computer rebootWarningStartTime enabled -value start60MinutesBeforeReboot
set-ctxgrouppolicyconfiguration "reboot $day 3am" computer rebootWarningInterval enabled -value every10Minutes
set-ctxgrouppolicyconfiguration "reboot $day 3am" computer rebootScheduleTime enabled -value 180
set-ctxgrouppolicyconfiguration "reboot $day 3am" computer rebootScheduleFrequency enabled -value 7
set-ctxgrouppolicyconfiguration "reboot $day 3am" computer rebootDisableLogOnTime enabled -value disable15MinutesBeforeReboot
set-ctxgrouppolicyconfiguration "reboot $day 3am" computer rebootScheduleStartDate enabled -value $tomorrow
}
$count = $count + 1
set-ctxgrouppolicy -policyname unfiltered -type computer -priority $count
write-host "script complete"
#------------------------------
#functions for date conversion
#------------------------------
function convertFrom-DwordDate([int32]$DwordValue){
#ex. $DwordValue = 132055314
#convert to hex
$hex = $DwordValue.ToString('X8')
#$Ex. $hex = 0x07df0112 = 0x07df (year) 0x01(month) 0x12 (day)
#Convert to date string
$datestring = '{0:D4}\{1:D2}\{2:D2}' -f [convert]::ToUInt32($hex.Substring(0,4),16), [convert]::ToUint32($hex.Substring(4,2),16), [convert]::ToUInt32($hex.Substring(6,2),16)
#convert to datetime and output
$datetime = [datetime]::ParseExact($datestring,'yyyy\\MM\\dd',$null)
#output
$datetime
}
function ConvertTo-DwordDate([datetime]$Date) {
#convert to combined hex
$combinedhex = '{0:X}{1:X2}{2:X2}' -f $Date.Year, $Date.Month, $Date.Day
#convert to decimal
$decimal = [convert]::ToUInt32($combinedhex,16)
#output
$decimal
}
$ Frode F. Это заняло около минуты 90 секунд от сценария. Те, кто пишет о политике, просто требуют времени, но улучшение в 90 секунд плохое! – soMuch2Learn
Я добавил следующее, и скрипт пошел с 8.5 минут до 35 секунд! '(get-psdrive LocalFarmGPO) .autowriteback = $ false' был вставлен до того, как я установил параметры политики, и когда закончите, я добавил' (get-psdrive LocalFarmGPO) .Save() (get-psdrive LocalFarmGPO) .autowriteback = $ true' и удаляется при завершении 'Remove-PSDrive -Name NewFarm'. Просто FYI на тот случай, если кто-то еще столкнется с присущей вялостью написанием политик citrix с PS. – soMuch2Learn