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

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

Plus d'informations
il y a 10 ans 7 mois #15457 par Matthew BETTON
Laurent Dardenne écrit:

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 :unsure:<br><br>Message édité par: Matthew BETTON, à: 29/07/13 21:54

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

Plus d'informations
il y a 10 ans 7 mois #15611 par Laurent Dardenne
Une évolution du cmdlet Set-StrictMode, le code suivant :
[code:1]
&amp; { $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.

Plus d'informations
il y a 9 ans 10 mois #17518 par Laurent Dardenne
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

Tutoriels PowerShell

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

Plus d'informations
il y a 9 ans 9 mois #17628 par Laurent Dardenne
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 \&quot;MonTypePerso\&quot;})]
$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]
&lt;Type&gt;
&lt;Name&gt;System.Management.ManagementObject#root\cimv2\Win32_Process&lt;/Name&gt;
[/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.

Plus d'informations
il y a 9 ans 7 mois #17930 par Laurent Dardenne
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 \&quot;MyMethod $ArgumentList\&quot;
}

,$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.090 secondes
Propulsé par Kunena