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 11 ans 4 mois #15455
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
A propos de la propriété
Count
ou l'avancée, à l'usage, de la marche arrière.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Auteur du sujet
- Hors Ligne
- Membre platinium
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 11 ans 4 mois #15457
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
Laurent Dardenne écrit:
Ba j'aime beaucoup Jaykul
Bref, intéressant
Nous avançons <br><br>Message édité par: Matthew BETTON, à: 29/07/13 21:54
A propos de la propriété Count ou l'avancée, à l'usage, de la marche arrière.
Ba j'aime beaucoup Jaykul
Bref, intéressant
Nous avançons <br><br>Message édité par: Matthew BETTON, à: 29/07/13 21:54
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 11 ans 3 mois #15611
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
Une évolution du cmdlet Set-StrictMode, le code suivant :
[code:1]
& { $a = 1..3; $a[4]; Set-StrictMode -v latest; $a[4] }
[/code:1]
Ne pose pas de pb en v2, mais avec la v3 il génère l'exception System.IndexOutOfRangeException :
[code:1]
& { $a = 1..3; $a[4]; Set-StrictMode -v latest; $a[4] }
[/code:1]
Ne pose pas de pb en v2, mais avec la v3 il génère l'exception System.IndexOutOfRangeException :
L'index se trouve en dehors des limites du tableau.
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 10 ans 6 mois #17518
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
En consultant ce
bug
, on trouve cette astuce :
[code:1]
$a = [pscustomobject]@{
pstypename='Monype'
a = 1
b = 2
}
$a|fl
$a.pstypenames
$a.PSObject.Typenames
[/code:1]
Sur ce sujet, il existe également un attribut [PSTypeName('Montype')], mais pour le moment je ne sais comment l'utiliser...
[edit]
L'attribut PSTypeName est un attribut de contrainte de type, utilisé en C#.
Les deux constructions suivantes sont identiques :
[code:1]function new-Montype{
param(
[int]$A
)
}
function new-Montype{
param(
[pstypename('System.int32')]
$A
)
}[/code:1]
Message édité par: Laurent Dardenne, à: 20/05/14 20:31<br><br>Message édité par: Laurent Dardenne, à: 14/06/14 14:30
[code:1]
$a = [pscustomobject]@{
pstypename='Monype'
a = 1
b = 2
}
$a|fl
$a.pstypenames
$a.PSObject.Typenames
[/code:1]
Sur ce sujet, il existe également un attribut [PSTypeName('Montype')], mais pour le moment je ne sais comment l'utiliser...
[edit]
L'attribut PSTypeName est un attribut de contrainte de type, utilisé en C#.
Les deux constructions suivantes sont identiques :
[code:1]function new-Montype{
param(
[int]$A
)
}
function new-Montype{
param(
[pstypename('System.int32')]
$A
)
}[/code:1]
Message édité par: Laurent Dardenne, à: 20/05/14 20:31<br><br>Message édité par: Laurent Dardenne, à: 14/06/14 14:30
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 10 ans 5 mois #17628
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Qu'y a t'il de nouveau sous PowerShell V3 ?
Suite à une discussion sur la mailing list MVP, l'attribut PSTypename, qui n'est pas documenté, sert bien à typer un paramètre avec un nom de type 'personnel' :
[code:1]
function Test {
param(
[Parameter(Mandatory=$true,ValueFromPipeline = $true)]
[PSTypeName('MonTypePerso')]
#v2 [ValidateScript({$_.PsObject.TypeNames[0] -eq \"MonTypePerso\"})]
$InputObject,
[Parameter(position=0,Mandatory=$true)]
[String] $B
)
}
$Object=[pscustomobject]@{PSTypeName='MonTypePerso';Nom='test'}
Test a -InputObject 1
#erreur
Test a -InputObject $Object
$Object|Test a
1|Test a
#erreur
[/code:1]
Dans le dernier appel, le message d'erreur n'est pas assez précis, mais il concerne bien l'échec de la validation du type.
L'attribut PSTypename est utilisé par le système de type (ETS) :
[code:1]
<Type>
<Name>System.Management.ManagementObject#root\cimv2\Win32_Process</Name>
[/code:1]
Extrait du fichier types.ps1xml.
Ici le nom de type ne référence pas un type dotnet, mais un nom de classe WMI :
[code:1]
$p=gwmi Win32_Process
$p[0].pstypenames
# System.Management.ManagementObject#root\cimv2\Win32_Process
# System.Management.ManagementObject#root\cimv2\CIM_Process
# System.Management.ManagementObject#root\cimv2\CIM_LogicalElement
# System.Management.ManagementObject#root\cimv2\CIM_ManagedSystemElement
# System.Management.ManagementObject#Win32_Process
# System.Management.ManagementObject#CIM_Process
# System.Management.ManagementObject#CIM_LogicalElement
# System.Management.ManagementObject#CIM_ManagedSystemElement
# System.Management.ManagementObject
# System.Management.ManagementBaseObject
# System.ComponentModel.Component
# System.MarshalByRefObject
# System.Object
[/code:1]
Il permet également ceci :
[code:1]
Get-Command -ParameterType MonTypePerso
# CommandType Name ModuleName
#
----
# Function Test
[/code:1]
C'est à dire, retrouver les commandes utilisant un type particulier.
Message édité par: Laurent Dardenne, à: 14/06/14 14:46
[Edit]
correction du code de la fonction Test
[int]$InputObject en $InputObject<br><br>Message édité par: Laurent Dardenne, à: 3/06/17 17:14
[code:1]
function Test {
param(
[Parameter(Mandatory=$true,ValueFromPipeline = $true)]
[PSTypeName('MonTypePerso')]
#v2 [ValidateScript({$_.PsObject.TypeNames[0] -eq \"MonTypePerso\"})]
$InputObject,
[Parameter(position=0,Mandatory=$true)]
[String] $B
)
}
$Object=[pscustomobject]@{PSTypeName='MonTypePerso';Nom='test'}
Test a -InputObject 1
#erreur
Test a -InputObject $Object
$Object|Test a
1|Test a
#erreur
[/code:1]
Dans le dernier appel, le message d'erreur n'est pas assez précis, mais il concerne bien l'échec de la validation du type.
L'attribut PSTypename est utilisé par le système de type (ETS) :
[code:1]
<Type>
<Name>System.Management.ManagementObject#root\cimv2\Win32_Process</Name>
[/code:1]
Extrait du fichier types.ps1xml.
Ici le nom de type ne référence pas un type dotnet, mais un nom de classe WMI :
[code:1]
$p=gwmi Win32_Process
$p[0].pstypenames
# System.Management.ManagementObject#root\cimv2\Win32_Process
# System.Management.ManagementObject#root\cimv2\CIM_Process
# System.Management.ManagementObject#root\cimv2\CIM_LogicalElement
# System.Management.ManagementObject#root\cimv2\CIM_ManagedSystemElement
# System.Management.ManagementObject#Win32_Process
# System.Management.ManagementObject#CIM_Process
# System.Management.ManagementObject#CIM_LogicalElement
# System.Management.ManagementObject#CIM_ManagedSystemElement
# System.Management.ManagementObject
# System.Management.ManagementBaseObject
# System.ComponentModel.Component
# System.MarshalByRefObject
# System.Object
[/code:1]
Il permet également ceci :
[code:1]
Get-Command -ParameterType MonTypePerso
# CommandType Name ModuleName
#
----
# Function Test
[/code:1]
C'est à dire, retrouver les commandes utilisant un type particulier.
Message édité par: Laurent Dardenne, à: 14/06/14 14:46
[Edit]
correction du code de la fonction Test
[int]$InputObject en $InputObject<br><br>Message édité par: Laurent Dardenne, à: 3/06/17 17:14
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 10 ans 3 mois #17930
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 v3 enrichi le cmdlet Update-TypeData afin de créer des extensions de type (ETS) sans passer par un fichier .ps1xml.
Celui-ci facilite l'extension des types génériques :
[code:1]
$List_String = new-object 'Collections.Generic.List[String]'
$List_Int = new-object 'Collections.Generic.List[Int]'
,$List_String|gm -MemberType scriptmethod
,$List_Int|gm -MemberType scriptmethod
$TypeFullname=$List_String.GetType().FullName
Update-TypeData -TypeName $TypeFullname -MemberType ScriptMethod -MemberName MyMethod -Value {
Param(
[Object[]] $ArgumentList
)
Write-host \"MyMethod $ArgumentList\"
}
,$List_String|gm -MemberType scriptmethod
,$List_Int|gm -MemberType scriptmethod
[/code:1]
Ici seule la classe Collections.Generic.List[String] possédera la méthode nommée 'MyMethod'. Cette déclaration étant dynamique, il ne sera pas nécessaire de la versionner pour cibler PS v3 ou v4 (framework 4.0) ou v5 (framework 4.5).
Message édité par: Laurent Dardenne, à: 11/08/14 12:35<br><br>Message édité par: Laurent Dardenne, à: 27/01/16 10:40
Celui-ci facilite l'extension des types génériques :
[code:1]
$List_String = new-object 'Collections.Generic.List[String]'
$List_Int = new-object 'Collections.Generic.List[Int]'
,$List_String|gm -MemberType scriptmethod
,$List_Int|gm -MemberType scriptmethod
$TypeFullname=$List_String.GetType().FullName
Update-TypeData -TypeName $TypeFullname -MemberType ScriptMethod -MemberName MyMethod -Value {
Param(
[Object[]] $ArgumentList
)
Write-host \"MyMethod $ArgumentList\"
}
,$List_String|gm -MemberType scriptmethod
,$List_Int|gm -MemberType scriptmethod
[/code:1]
Ici seule la classe Collections.Generic.List[String] possédera la méthode nommée 'MyMethod'. Cette déclaration étant dynamique, il ne sera pas nécessaire de la versionner pour cibler PS v3 ou v4 (framework 4.0) ou v5 (framework 4.5).
Message édité par: Laurent Dardenne, à: 11/08/14 12:35<br><br>Message édité par: Laurent Dardenne, à: 27/01/16 10:40
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.125 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Discussions générales
- Qu'y a t'il de nouveau sous PowerShell V3 ?