Modifier les Stratégies Citrix avec Powershell

Devant recréer un plan de maintenance sur 4 jours, j’ai cherché du coté de powershell pour ne pas avoir à recréer chaque stratégie. En chargeant le snapins Citrix, nous créons automatiquement la 3 PSDrive, provisionné avec CitrixGroupPolicy, accessible avec un set-location.

PS C:\> get-psdrive -PSProvider CitrixGroupPolicy

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
LocalFa...                             CitrixGrou... LocalFarmGpo:\
LocalGpo                               CitrixGrou... LocalGpo:\
Templates                              CitrixGrou... Templates:\

Sous computer, je retrouve toutes les stratégies ordinateurs avec comme propriété Name, Description, Enabled, Priority (…).

PS LocalFarmGpo:\> ls computer | select name
Name
----
Default-conf
Reboot-monday
Unfiltered

PS LocalFarmGpo:\computer> get-itemproperty reboot-monday


Name         : Reboot-Monday
Description  : Policy Reboot on Mondau
Enabled      : True
Priority     : 5
PSPath       : Citrix.Common.GroupPolicy\CitrixGroupPolicy::LocalFarmGpo:\Computer\Reboot-Monday
PSParentPath : Citrix.Common.GroupPolicy\CitrixGroupPolicy::LocalFarmGpo:\Computer
PSChildName  : Reboot-Monday
PSDrive      : LocalFarmGpo
PSProvider   : Citrix.Common.GroupPolicy\CitrixGroupPolicy

Si je veux passer une politique en priorité une, plutôt que de cliquer de nombreuse fois pour augmenter sa priorité, je peux simplement lui affecter la priorité que je souhaite avec set-itemproperty

set-itemproperty MyPolicy –name priority –value 1

Les paramètres sont sous l’arborescence Settings, si je veux récupérer la valeur « LoadEvaluator » d’une stratégie LE-Evaluator

PS > get-itemproperty LocalfarmGPO:/Computer/LE-Evaluator/Settings/ServerSettings/Loadevaluator

State        : Enabled
Value        : LE-Evaluator
PSPath       : Citrix.Common.GroupPolicy\CitrixGroupPolicy::LocalFarmGpo:\Computer\LE-Evaluator\Settings\ServerSettings\LoadEvaluator
PSParentPath : Citrix.Common.GroupPolicy\CitrixGroupPolicy::LocalFarmGpo:\Computer\LE-Evaluator\Settings\ServerSettings
PSChildName  : LoadEvaluator
PSDrive      : LocalFarmGpo
PSProvider   : Citrix.Common.GroupPolicy\CitrixGroupPolicy

De la même façon que pour la priorité je peux setter la valeur du loadevaluator avec un set-itemproperty

set-itemproperty  LocalfarmGPO:/Computer/LE-Evaluator/Settings/ServerSettings -Name LoadEvaluator -Value "LE-EVALUATOR"

Voici un exemple avec une création de plan de maintenance, ou l’on duplique la première stratégie existante et ensuite nous adaptons chaque stratégie ainsi obtenue :

If( -not (get-psdrive –name localfarmgpo)){ New-PSDrive -Name LocalFarmGpo -PSProvider CitrixGroupPolicy -Root \ -FarmGpo localhost }
Cd localfarmgpo:\Computer
Cp reboot-monday reboot-tuesday
Cp reboot-monday reboot-wednesday
Cp reboot-monday reboot-thursday
$priority = (get-itemproperty localfarmgpo:/computer/reboot-monday).priority
set-itemproperty reboot-tuesday–name priority –value ($priority + 1)
set-itemproperty reboot-wednesday–name priority –value ($priority + 2)
set-itemproperty reboot-thursday–name priority –value ($priority + 3)

cd LocalFarmGpo:\Computer\Reboot-Mardi\Settings\ServerSettings\rebootBehavior
set-itemproperty RebootScheduleStartDate -Name startdate -value "$(get-date (get-date).AddDays(2 - (get-date -UFormat %u)) -UFormat "%D 00:00:00")" 
cd LocalFarmGpo:\Computer\Reboot-Mardi\Settings\ServerSettings\rebootBehavior
set-itemproperty RebootScheduleStartDate -Name startdate -value "$(get-date (get-date).AddDays(3 - (get-date -UFormat %u)) -UFormat "%D 00:00:00")"
cd LocalFarmGpo:\Computer\Reboot-Mardi\Settings\ServerSettings\rebootBehavior
set-itemproperty RebootScheduleStartDate -Name startdate -value "$(get-date (get-date).AddDays(4 - (get-date -UFormat %u)) -UFormat "%D 00:00:00")"