Project

General

Profile

New-Sequence

Cette fonction crée un objet séquence similaire à une séquence Oracle .
Le rôle d’une séquence est de fournir une suite de nombres entiers, suite déterminée par la valeur de certains paramètres.
Les valeurs produite par une séquence peuvent être négatives ou positives, être unique ou pas (voir le paramètre -Cycle).

Dans l'exemple suivant, l'usage d'une séquence permet de créer des noms de fichier unique à des fins de tests :

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "G:\PS\temp" 
...
$Seq=Create-Sequence "FileWatcher" 

"test"> "$($watcher.Path)\File$($Seq.CurrVal).txt" 
Del "$($watcher.Path)\File$($Seq.CurrVal).txt" 
$Seq.NextVal()

Le fonctionnement de cet objet séquence est similaire à celui d'une séquence Oracle sans pour autant être identique.

Si vous ne spécifiez aucun paramètre, autre que le nom obligatoire, alors vous créez une séquence ascendante qui débute à 1 et est incrémentée de 1 jusqu'à sa limite supérieure ([int]::MaxValue).
Si vous spécifiez seulement INCREMENT_BY -1 vous créez une séquence descendante qui débute à -1 et est décrémentée de 1 jusqu'à sa limite inférieure ([int]::MinValue).

Pour créer une séquence ascendante qui incrémente sans limite (autre que celle du type .NET INT), omettez le paramètre MAXVALUE.
Pour créer une séquence descendante qui décrémente sans limite, omettez le paramètre MINVALUE.

Pour créer une séquence ascendante qui s'arrête à une limite prédéfinie, spécifiez une valeur pour le paramètre MAXVALUE.
Pour créer une séquence descendante qui s'arrête à une limite prédéfinie, spécifiez une valeur pour le paramètre MINVALUE.
Si vous ne précisez pas le paramètre -CYCLE, n'importe quelle tentative de produire un numéro de séquence une fois que la séquence
a atteint sa limite déclenchera une erreur.

Pour créer une séquence qui redémarre/boucle après avoir atteint une limite prédéfinie, indiquez le paramètre CYCLE.

Valeur par défaut d'une séquence ascendante :

$Sq=New-Sequence "SEQ_Test"  ;$Sq

Name         : SEQ_Test
CurrVal      : 1
Increment_By : 1
MaxValue     : 2147483647
MinValue     : 1
Start_With   : 1
Cycle        : False
Comment      :

Valeur par défaut d'une séquence descendante :

$Sq=New-Sequence "SEQ_Test" -inc -1 ; $Sq

Name         : SEQ_Test
CurrVal      : -1
Increment_By : -1
MaxValue     : -1
MinValue     : -2147483648
Start_With   : -1
Cycle        : False
Comment      :

Exemple :

$DebugPreference = "Continue" 
$Sq= New-Sequence "SEQ_Test" 
$Sq.Currval
$Sq.NextVal()
$Sq.Currval

Propriétés en lecture seule :

Name : Nom de la séquence.

CurrVal : Contient la valeur courante.

Increment_By : Spécifie l'intervalle entre les numéros de la séquence.
Cette valeur entière peut être n'importe quel nombre entier positif ou négatif de type .NET INT, mais elle ne peut pas être 0.
L'absolu de cette valeur doit être moins (ou égal) que la différence de MAXVALUE et de MINVALUE.
Si cette valeur est négative, alors le séquence est descendante (ordre décroissant).
Si la valeur est positive, alors la séquence est ascendante (ordres croissant).
Si vous omettez ce paramètre la valeur de l'intervalle est par défaut de 1.

Start_With : Spécifie le premier nombre de la séquence à produire.
Employez ce paramètre pour démarrer une séquence ascendante à une valeur plus grande que son minimum ou pour
démarrer une séquence descendante à une valeur moindre que son maximum. Pour des séquences ascendantes,
la valeur par défaut est la valeur minimum de la séquence. Pour des séquences descendantes, la valeur par défaut
est la valeur maximum de la séquence.
Note :
Cette valeur n'est pas nécessairement la valeur à laquelle une séquence ascendante cyclique redémarre une fois
sa valeur maximum ou minimum atteinte.

MaxValue : Spécifie la valeur maximum que la séquence peut produire.
MAXVALUE doit être égal ou plus grand que la valeur du paramètre START_WITH et doit être plus grand que MINVALUE.

MinValue : Spécifie la valeur minimum de la séquence.
MINVALUE doit être inférieur ou égal à la valeur du paramètre START_WITH et doit être inférieure à MAXVALUE.

Cycle : Indique que la séquence continue à produire des valeurs une fois atteinte sa valeur maximum ou minimum.
Une fois qu'une séquence ascendante a atteint sa valeur maximum, elle reprend à sa valeur minimum.
Une fois qu'une séquence descendante a atteint sa valeur minimum, elle reprend à sa valeur maximum.
Par défaut une séquence ne produit plus de valeurs une fois atteinte sa valeur maximum ou minimum.
La valeur de Start_With n'est pas pris en compte lors du cycle.
La séquence suivante génére des valeurs de 1 à 10, puis de -10 à 10, puis de -10 à 10, etc

                 $Sq=New-Sequence "SEQ_Test"  -min (-10) -max 10  -start 1 -Cycle

Comment : Champ de commentaires.

Méthodes

NextVal: Incrémente la séquence et retourne la nouvelle valeur.

Exemple :

 # Valeur pas défaut
  #Séquence ascendante
$Sq=New-Sequence "SEQ_Test" 
$Sq=New-Sequence "SEQ_Test" "" 
$Sq=New-Sequence "SEQ_Test" "Séquence de test" 
$Sq=New-Sequence "SEQ_Test" "Séquence de test" -cycle
 #Valeur pas défaut d'une séquence ascendante
$Sq=New-Sequence "SEQ_Test" "Séquence de test" -min 1 -max ([int32]::MaxValue) -inc 1 -start 1
 #Valeur pas défaut d'une séquence descendante
$Sq=New-Sequence "SEQ_Test" "Séquence de test" -min ([int32]::MinValue) -max -1 -inc -1 -start -1

 #Incrément de 2
$Sq=New-Sequence "SEQ_Test" "Séquence de test" -inc 2
 #Incrément négatif
$Sq=New-Sequence "SEQ_Test" "Séquence de test" -inc -1

$N="SEQ_Test" 
$C="Séquence de test" 

 #Suite ascendante maximum, de [int32]::MinValue à [int32]::MaxValue débutant à [int32]::MinValue
$Sq=New-Sequence $N $C -min ([int32]::MinValue+1) -start ([int32]::MinValue+1)
 #Suite descendante maximum, de [int32]::MinValue à [int32]::MaxValue débutant à [int32]::MaxValue
$Sq=New-Sequence $N $C -min ([int32]::MinValue+1) -max ([int32]::MaxValue) -start ([int32]::MaxValue) -inc -1

 #suite ascendante débutant à 0 et finissant à 255
$Sq=New-Sequence $N $C -min 0 -max 255

 #Valeur minimum
  #suite ascendante de 2 nombres 
$Sq=New-Sequence $N $C -minvalue 0 -maxvalue 1
  #suite descendante de 2 nombres  
$Sq=New-Sequence $N $C -minvalue 0 -maxvalue 1  -inc -1
  #suite de 2 nombres positifs avec un pas de 2 
$sq=New-Sequence $N $C -min 1 -max 3 -inc 2

 #"suite" de 1 nombre : 2 
$sq=New-Sequence $N $C -min 1 -max 2 -start 2
 #"suite" de 1 nombre : 5
$Sq=New-Sequence $N $C -min 0 -max 5 -inc 1 -start 5
 #"suite" de 1 nombre : 0
$Sq=New-Sequence $N $C -min 0 -max 2 -inc -1 -start 0

 #suite cyclique ascendante débutant à 2, ensuite chaque cycle débutera à 1, c'est à dire la valeur de MinValue
$sq=New-Sequence $N $C -min 1 -max 2 -start 2 -cycle
 #suite cyclique ascendante  débutant à 5, ensuite chaque cycle débutera à 0
$Sq=New-Sequence $N $C -min 0 -max 5 -inc 1 -start 5 -cycle
 #suite cyclique descendante débutant à 0, ensuite chaque cycle débutera aussi à 0
$Sq=New-Sequence $N $C -min 0 -max 2 -inc -1 -start 0 -cycle

  #MaxValue à 0, pour une suite descendante uniquement 
$Sq=New-Sequence $N $C -maxvalue 0 -inc -1

  #suite descendante débutant à -1 jusqu'à [int32]::MinValue
$Sq=New-Sequence $N $C -maxvalue -1 -inc -1
 #suite ascendante négative débutant [int32]::MinValue jusqu'à -1 
$Sq=New-Sequence $N $C -min -2147483648 -max -1 -inc 1 -start -2147483648

L'affichage dans la console de cet objet personnalisé se fait grâce à une configuration dynamique de la définition de son formatage, on évite ainsi l'usage d'un fichier de type .ps1xml.

  #From http://poshoholic.com/2008/07/05/essential-powershell-define-default-properties-for-custom-objects/
 $DefaultProperties =@(
  'Name',
  'CurrVal', 
  'Increment_By',
  'MaxValue',
  'MinValue',
  'Start_With',
  'Cycle',
  'Comment')
 $DefaultPropertySet=New-object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$DefaultProperties)
 $PSStandardMembers=[System.Management.Automation.PSMemberInfo[]]@($DefaultPropertySet)
 $Sequence|Add-Member MemberSet PSStandardMembers $PSStandardMembers