Question [Fonction]Opérateurs Linq à la PowerShell
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 5 mois #5473
par Laurent Dardenne
Tutoriels PowerShell
[Fonction]Opérateurs Linq à la PowerShell a été créé par Laurent Dardenne
Linq utilise le principe des pipelines dans un langage compilé, certains de ses opérateurs seraient les bienvenues dans PowerShell, en voici deux :
[code:1]
function Skip-While() {
# Jared Parsons, jaredpar's WebLog
# Skip while the condition is true
#Example Usage:
#
# 1..10 | Skip-While { $_ -lt 6 } renvoi 6 à 10
#Ignore des éléments dans une séquence tant que la condition spécifiée a la valeur true, puis retourne les éléments restants.
param ( [scriptblock]$pred = $(throw \"Need a predicate\"«») )
begin {
$skip = $true
}
process {
if ( $skip ) {
$skip = &$pred
}
if ( -not $skip ) {
$_
}
}
end {}
}
function Take-While() {
#jaredpar's WebLog
# Take elements from the pipeline while the predicate is true
#Example
#
# 1..10 | take-while {$_ -lt 6} renvoi 1..5
#Retourne des éléments d'une séquence tant que la condition spécifiée a la valeur true, puis ignore les éléments restants.
param ( [scriptblock]$pred = $(throw \"Need a predicate\"«») )
begin {
$take = $true
}
process {
if ( $take ) {
$take = &$pred
if ( $take ) {
$_
}
}
}
}
[/code:1]
Ici Skip-While permet de sélectionner le texte à afficher à partir d'une certaine ligne.
Ici on affiche la documentation, placée en fin de fichier, concernant les paramètres dynamiques des providers :
[code:1]Get-PSProvider|
Foreach {
Write-Host \"`r`nProvider: $($_.Name)\"
(get-help $_.Name -Category Provider|out-String).split(\"`r`n\",[StringSplitOptions]::RemoveEmptyEntries)|
#Ignore des éléments d'une séquence tant que la condition spécifiée a la valeur true,
#puis retourne les éléments restants.
Skip-While {$_ -notmatch \"^PARAMÈTRES DYNAMIQUES$\"}
}
[/code:1]
Take-While peut être utile pour supprimer le bloc de signature d'un script signé :
[code:1] gc Take-While.ps1|
#Retourne des éléments d'une séquence tant que la condition spécifiée a la valeur true,
#puis ignore les éléments restants.
Take-While {$_ -notmatch \"^# SIG # Begin signature block$\"}
[/code:1]
Le cmdlet Where-Object effectue un test sur chaque élément du pipeline, ici une fois la condition remplie, le test n'est plus effectué pour le reste de la collection.
[edit]
Pour récupérer un extrait de la documentation limité par deux bornes, on combinera les opérateurs Skip-While et Take-While :
[code:1]
Get-PSProvider|
Foreach {
Write-Host \"`r`nProvider: $($_.Name)\"
(get-help $_.Name -Category Provider|out-String).split(\"`r`n\",[StringSplitOptions]::RemoveEmptyEntries)|
Skip-While {$_ -notmatch \"^TÂCHES$\"}|
Take-While {$_ -notmatch \"^PARAMÈTRES DYNAMIQUES$\"}
}[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 17/10/09 18:06
[code:1]
function Skip-While() {
# Jared Parsons, jaredpar's WebLog
# Skip while the condition is true
#Example Usage:
#
# 1..10 | Skip-While { $_ -lt 6 } renvoi 6 à 10
#Ignore des éléments dans une séquence tant que la condition spécifiée a la valeur true, puis retourne les éléments restants.
param ( [scriptblock]$pred = $(throw \"Need a predicate\"«») )
begin {
$skip = $true
}
process {
if ( $skip ) {
$skip = &$pred
}
if ( -not $skip ) {
$_
}
}
end {}
}
function Take-While() {
#jaredpar's WebLog
# Take elements from the pipeline while the predicate is true
#Example
#
# 1..10 | take-while {$_ -lt 6} renvoi 1..5
#Retourne des éléments d'une séquence tant que la condition spécifiée a la valeur true, puis ignore les éléments restants.
param ( [scriptblock]$pred = $(throw \"Need a predicate\"«») )
begin {
$take = $true
}
process {
if ( $take ) {
$take = &$pred
if ( $take ) {
$_
}
}
}
}
[/code:1]
Ici Skip-While permet de sélectionner le texte à afficher à partir d'une certaine ligne.
Ici on affiche la documentation, placée en fin de fichier, concernant les paramètres dynamiques des providers :
[code:1]Get-PSProvider|
Foreach {
Write-Host \"`r`nProvider: $($_.Name)\"
(get-help $_.Name -Category Provider|out-String).split(\"`r`n\",[StringSplitOptions]::RemoveEmptyEntries)|
#Ignore des éléments d'une séquence tant que la condition spécifiée a la valeur true,
#puis retourne les éléments restants.
Skip-While {$_ -notmatch \"^PARAMÈTRES DYNAMIQUES$\"}
}
[/code:1]
Take-While peut être utile pour supprimer le bloc de signature d'un script signé :
[code:1] gc Take-While.ps1|
#Retourne des éléments d'une séquence tant que la condition spécifiée a la valeur true,
#puis ignore les éléments restants.
Take-While {$_ -notmatch \"^# SIG # Begin signature block$\"}
[/code:1]
Le cmdlet Where-Object effectue un test sur chaque élément du pipeline, ici une fois la condition remplie, le test n'est plus effectué pour le reste de la collection.
[edit]
Pour récupérer un extrait de la documentation limité par deux bornes, on combinera les opérateurs Skip-While et Take-While :
[code:1]
Get-PSProvider|
Foreach {
Write-Host \"`r`nProvider: $($_.Name)\"
(get-help $_.Name -Category Provider|out-String).split(\"`r`n\",[StringSplitOptions]::RemoveEmptyEntries)|
Skip-While {$_ -notmatch \"^TÂCHES$\"}|
Take-While {$_ -notmatch \"^PARAMÈTRES DYNAMIQUES$\"}
}[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 17/10/09 18:06
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 5 mois #5476
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Fonction]Opérateurs Linq à la PowerShell
Correction du code, à l'origine l'auteur utilise $Args[0] et pas le pipeline...
[edit]
L'opérateur Sum peut être simulé à l'aide du cmdlet Measure-Object:
[code:1]
Dir *.ps1|Measure-Object -property Length -sum
[/code:1]
La propriété peut être un type string ou boolean,...
Dans ce cas le cmdlet tentera une conversion.<br><br>Message édité par: Laurent Dardenne, à: 27/10/09 16:49
[edit]
L'opérateur Sum peut être simulé à l'aide du cmdlet Measure-Object:
[code:1]
Dir *.ps1|Measure-Object -property Length -sum
[/code:1]
La propriété peut être un type string ou boolean,...
Dans ce cas le cmdlet tentera une conversion.<br><br>Message édité par: Laurent Dardenne, à: 27/10/09 16:49
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.053 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [Fonction]Opérateurs Linq à la PowerShell