Question
Qu'y a t'il de nouveau sous PowerShell V3 ?
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 2 mois #12811
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
Je profite du poste de Matthew, pour attirer votre attention sur la partage de code entre les versions N et N+1.
Soit vous figez votre code sur une version, soit vous l'adapter selon la version $PSVersionTable.
Cela fait qq temps déjà qu'il me manque des directives de compilation conditionnelle sous PS, une raison de plus pour les regretter...
Pour moi la syntaxe Where PSIsContainer -ne $True n'est pas portable, par contre pour un usage en ligne de commande ça facilite l'écriture, d'où l'expression 'sucre'
Ceci fait Richard que, à mon avis, les problèmes liés à l'apprentissage de ces évolutions sont, bien que réels, tout de suite limités.
Sans compter que tu peux aussi avoir du code qui bypass des bugs spécifiques à une version
Qui a dit que le scripting ce n'était pas du dev ?
Et si c'est vrai, cela y ressemble fortement
Soit vous figez votre code sur une version, soit vous l'adapter selon la version $PSVersionTable.
Cela fait qq temps déjà qu'il me manque des directives de compilation conditionnelle sous PS, une raison de plus pour les regretter...
Pour moi la syntaxe Where PSIsContainer -ne $True n'est pas portable, par contre pour un usage en ligne de commande ça facilite l'écriture, d'où l'expression 'sucre'
Ceci fait Richard que, à mon avis, les problèmes liés à l'apprentissage de ces évolutions sont, bien que réels, tout de suite limités.
Sans compter que tu peux aussi avoir du code qui bypass des bugs spécifiques à une version
Qui a dit que le scripting ce n'était pas du dev ?
Et si c'est vrai, cela y ressemble fortement
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 2 mois #12814
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
Un complément
à ma dernière remarque.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 2 mois #12834
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
Un autre code sur la simplification du langage :
[code:1]
(Get-Process notepad).CloseMainWindow()
$Tableau=@(\"un\",\"deux\",\"trois\"«»)
$Tableau.ToUpper()
$Tableau.PSBase|Get-Member|Where name -eq 'ToUpper'
[/code:1]
L'itération implicite fonctionne sur les propriètés et sur les méthodes, mais aussi sur les tableaux.
C'est très pratique, mais au niveau du code on lie tout de suite le type contenu dans le tableau à la méthode utilisée (normal), ceci ne fonctionne pas :
[code:1]
$Tableau=@(\"un\",2,(get-process -name Powershell))
$Tableau.ToUpper()
[/code:1]
En codant comme ceci, on risque des erreurs à l'exécution, à moins de typer les collections :
[code:1]
[string]$Tableau=@(\"un\",2,(get-process -name Powershell))
$Tableau.ToUpper()
[/code:1]
La c'est le résultat obtenu qui peut ne pas correspondre. Donc cela reste une simplification de l'écriture, mais peut être pas du code.<br><br>Message édité par: Laurent Dardenne, à: 5/10/12 15:08
[code:1]
(Get-Process notepad).CloseMainWindow()
$Tableau=@(\"un\",\"deux\",\"trois\"«»)
$Tableau.ToUpper()
$Tableau.PSBase|Get-Member|Where name -eq 'ToUpper'
[/code:1]
L'itération implicite fonctionne sur les propriètés et sur les méthodes, mais aussi sur les tableaux.
C'est très pratique, mais au niveau du code on lie tout de suite le type contenu dans le tableau à la méthode utilisée (normal), ceci ne fonctionne pas :
[code:1]
$Tableau=@(\"un\",2,(get-process -name Powershell))
$Tableau.ToUpper()
[/code:1]
En codant comme ceci, on risque des erreurs à l'exécution, à moins de typer les collections :
[code:1]
[string]$Tableau=@(\"un\",2,(get-process -name Powershell))
$Tableau.ToUpper()
[/code:1]
La c'est le résultat obtenu qui peut ne pas correspondre. Donc cela reste une simplification de l'écriture, mais peut être pas du code.<br><br>Message édité par: Laurent Dardenne, à: 5/10/12 15:08
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 2 mois #12849
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
un autre aspect à prendre en compte avec certaines simplications du langage, l'usage du cmdlet Set-StrictMode, voici un exemple :
[code:1]
Set-StrictMode -Off
(Dir|Where PSIsContainer -ne $True|Select Name).FullName
#Liste de nom de fichier
($null).count
#0
Dir|Where PSIsContainer -ne $True|Select FullName
#Liste de fichiers
Set-StrictMode -Version 3.0
(Dir|Where PSIsContainer -ne $True|Select Name).FullName
#Erreur : Propriété « FullName » introuvable dans cet objet. Assurez-vous qu'elle existe.
($null).count
#Erreur : Propriété « count » introuvable dans cet objet. Assurez-vous qu'elle existe.
Dir|Where PSIsContainer -ne $True|Select FullName
#Liste de fichiers
Set-StrictMode -Off
[/code:1]
Comme j'utilise souvent le cmdlet Set-StrictMode pour mes tests unitaires je ne peux utiliser certaines simplifications du langage.
Set-StrictMode -Version 2.0 est un bon moyen pour valider que vos scripts sont compatibles avec la v2.
[code:1]
Set-StrictMode -Off
(Dir|Where PSIsContainer -ne $True|Select Name).FullName
#Liste de nom de fichier
($null).count
#0
Dir|Where PSIsContainer -ne $True|Select FullName
#Liste de fichiers
Set-StrictMode -Version 3.0
(Dir|Where PSIsContainer -ne $True|Select Name).FullName
#Erreur : Propriété « FullName » introuvable dans cet objet. Assurez-vous qu'elle existe.
($null).count
#Erreur : Propriété « count » introuvable dans cet objet. Assurez-vous qu'elle existe.
Dir|Where PSIsContainer -ne $True|Select FullName
#Liste de fichiers
Set-StrictMode -Off
[/code:1]
Comme j'utilise souvent le cmdlet Set-StrictMode pour mes tests unitaires je ne peux utiliser certaines simplifications du langage.
Set-StrictMode -Version 2.0 est un bon moyen pour valider que vos scripts sont compatibles avec la v2.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 2 mois #12852
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
Je simplifie, tu simplifies...
Dans la série, j'aime bien la doc :
Un autre test :
[code:1]
1,$null,2|? $_ -ne $null
#Where-Object : Impossible de valider l'argument sur le paramètre «Property». L'argument est null ou vide.
#Indiquez un argument qui n'est pas null ou vide et réessayez.
[/code:1]
Powershell simplifié et son nouveau jeu : Essaie encore !
On a que ça à faire
Dans ce cas on doit utiliser l'ancienne écriture, la 'pas simple', mais qui fonctionne à tous les coups :
[code:1]
1,$null,2|? {$_ -ne $null}
#1
#2
[/code:1]
J'aime bien ce jeux pour console, mais pour mes dev je reste au régime sans 'sucre'.
Dans la série, j'aime bien la doc :
#Where-object
-Property <String>
Specifies the name of an object property.
The parameter name (-Property) is optional.
This parameter is introduced in Windows PowerShell 3.0.
Obligatoire ? true
Un autre test :
[code:1]
1,$null,2|? $_ -ne $null
#Where-Object : Impossible de valider l'argument sur le paramètre «Property». L'argument est null ou vide.
#Indiquez un argument qui n'est pas null ou vide et réessayez.
[/code:1]
Powershell simplifié et son nouveau jeu : Essaie encore !
On a que ça à faire
Dans ce cas on doit utiliser l'ancienne écriture, la 'pas simple', mais qui fonctionne à tous les coups :
[code:1]
1,$null,2|? {$_ -ne $null}
#1
#2
[/code:1]
J'aime bien ce jeux pour console, mais pour mes dev je reste au régime sans 'sucre'.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 1 mois #12876
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
La variable automatique $PSScriptRoot est désormais accessible dans les scripts et plus seulement dans les modules :
[code:1]$path=\"C:\temp\"
$File=\"$Path\TestPSScriptRoot.ps1\"
@'
# $PSScriptRoot
# Contains the directory from which a script is being run. In
# Windows PowerShell 2.0, this variable is valid only in script modules
# (.psm1). Beginning in Windows PowerShell 3.0, it is valid in all scripts.
Write-host (\"Script '{0}' exécuté à partir de '{1}'\"-F $MyInvocation.MyCommand,$PSScriptRoot) -fore green
'@> $File
Set-Location $Path
&$File [/code:1]
[code:1]$path=\"C:\temp\"
$File=\"$Path\TestPSScriptRoot.ps1\"
@'
# $PSScriptRoot
# Contains the directory from which a script is being run. In
# Windows PowerShell 2.0, this variable is valid only in script modules
# (.psm1). Beginning in Windows PowerShell 3.0, it is valid in all scripts.
Write-host (\"Script '{0}' exécuté à partir de '{1}'\"-F $MyInvocation.MyCommand,$PSScriptRoot) -fore green
'@> $File
Set-Location $Path
&$File [/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.156 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Discussions générales
- Qu'y a t'il de nouveau sous PowerShell V3 ?