Question Qu'y a t'il de nouveau sous PowerShell V3 ?

Plus d'informations
il y a 11 ans 6 mois #12811 par Laurent Dardenne
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 :whistle:

Qui a dit que le scripting ce n'était pas du dev ?
Et si c'est vrai, cela y ressemble fortement :lol:

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 6 mois #12814 par Laurent Dardenne
Un complément à ma dernière remarque.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 6 mois #12834 par Laurent Dardenne
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

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 6 mois #12849 par Laurent Dardenne
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.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 6 mois #12852 par Laurent Dardenne
Je simplifie, tu simplifies...
Dans la série, j'aime bien la doc :

#Where-object
-Property &lt;String&gt;
Specifies the name of an object property.

The parameter name (-Property) is optional.

This parameter is introduced in Windows PowerShell 3.0.

Obligatoire ? true

:lol:

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.

Plus d'informations
il y a 11 ans 6 mois #12876 par Laurent Dardenne
La variable automatique $PSScriptRoot est désormais accessible dans les scripts et plus seulement dans les modules :
[code:1]$path=\&quot;C:\temp\&quot;
$File=\&quot;$Path\TestPSScriptRoot.ps1\&quot;
@'
# $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 (\&quot;Script '{0}' exécuté à partir de '{1}'\&quot;-F $MyInvocation.MyCommand,$PSScriptRoot) -fore green
'@&gt; $File
Set-Location $Path
&amp;$File [/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.090 secondes
Propulsé par Kunena