Question Code Besoin d'éclaircissement

Plus d'informations
il y a 12 ans 11 mois #14425 par JONDON Cyril
Bonjour,

1 - Il y ds ce code l'utilisation de cette syntaxe $($mavar) , pouvez me me préciser ce que fait cette syntaxe de plus que si je mets $mavar ?.


[code:1]$outputs = @()
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter \"IPenabled=$true\" |
foreach {
$nic = Get-WmiObject -Class Win32_NetworkAdapter -Filter \"DeviceId='$($_.Index)'\"
$output= New-Object -TypeName PSObject -Property @{
NICCardName = $nic.NetConnectionId;
DHCPEnabled = $($_.DHCPEnabled);
IPAddress = $($_.IPAddress);
SubnetMask = $($_.IPSubnet);
Gateway = $($_.DefaultIPGateway);
DHCPServer = $($_.DHCPServer);
DNSDomain = $($_.DNSDomain);
DNSDomainSuffixSearchOrder = $($_.DNSDomainSuffixSearchOrder);
DNSServerSearchOrder = $($_.DNSServerSearchOrder)
}
$outputs += $output
}
$outputs[/code:1]

2 - Pq la deuxième façon de trier me retourne $null?

$ArrayInt=@(42,0,1,7,12)
$ArrayInt | sort
$Arrayint=[System.Array]::Sort($ArrayInt)

Merci.

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

Plus d'informations
il y a 12 ans 11 mois #14426 par Laurent Dardenne
Salut,
cxvd7391 écrit:

pouvez me me préciser ce que fait cette syntaxe de plus que si je mets $mavar ?.

Ici rien de plus, la construction $() est un regroupement indiquant au parseur d'exécuter le code ainsi délimité. Dans une string c'est nécessaire pour afficher un membre ou appeler une méthode renvoyant un resultat.
Voir aussi ce tuto .
cxvd7391 écrit:

2 - Pq la deuxième façon de trier me retourne $null?

Il faut consulter la signature de la méthode statique :
[code:1]
#supprimer l'espace entre :: et S
[System.Array]:: Sort.OverloadDefinitions
static VOID Sort(array array)
static void Sort(array keys, array items)
...
[/code:1]
Le tableau est bien trié, mais la méthode ne renvoie aucun résultat( void ), comme ici :
[code:1]
[void](dir)
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 25/03/13 12:14

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 11 mois #14427 par JONDON Cyril
Merci pour ces éclaircissements je vais consulter attentivement le tuto.

Ok pour le tableau si j'enlève l'affectation ça marche mieux en effet.

Je garde précieusement cette commande magique .OverloadDefinitions

C'est vrai qu'avec ISE et IntelliSense je viens de mettre la main dessus.

[System.Array]::Sort. et une magic box apparaît.

Maintenant la question que je me pose pourquoi cette dernière commande ne fonctionne pas :

$Test = New-Object -TypeName PSOBject -Property @{Prop1=\&quot;Valeur1\&quot;}
$Test | gm -force
$Test.GetType()
[System.Object]::GetType($test)

Donc plus globalement comment faire pour jongler entre les méthodes que je trouve en faisant un GM (pourquoi Sortt n'est pas présente pour un objet de type System.Array ?) et celles que je trouve sur MSDN et que je peux utilser en faisant []::

en sachant que sur certains objets a priori ca ne marche pas [System.Object}::gettype, j'avoue que j'ai la tête à l'envers là :silly:

Peut être un tuto magique ?:) :blush:

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

Plus d'informations
il y a 12 ans 11 mois #14429 par Laurent Dardenne
cxvd7391 écrit:

Ok pour le tableau si j'enlève l'affectation ça marche mieux en effet.

Le tri fonctionne dans les deux cas, sauf qu'ici tu écrases le tableau existant par l'affectation de la valeur $null.
cxvd7391 écrit:

Donc plus globalement comment faire pour jongler entre les méthodes que je trouve en faisant un GM

Utilise le paramètre -static :
[code:1]
[System.Object]|get-member -Static

[System.Array].GetMembers()|? {$_.isStatic}|select name -Unique
[System.Object].GetMembers()|? {$_.isStatic}|select name -Unique
[/code:1]

cxvd7391 écrit:

(pourquoi Sort n'est pas présente pour un objet de type System.Array ?)

Sort est une méthode de classe, pas besoin de créer une instance ( new-object) pour l'utiliser :
[code:1]
$ArrayInt=@(42,0,1,7,12)
,$ArrayInt|Get-Member
,$ArrayInt|Get-Member -Static
[/code:1]
Par exemple la proprièté Length est présente sur l'instance de classe (un objet=une adresse sur une zone mémoire) mais pas sur la classe (pas de mémoire allouée pour mémoriser des données).
En revanche pour Sort c'est l'inverse, le code de la classe a juste besoin de connaitre les données à trier qui existent déjà.

Bien évidement la classe existe en mémoire ( Add-Type MonAssemblyAvecDesClasses.dll), mais une seule fois alors qu'une instance de classe peut exister + fois.
Schématiquement le code du tri est identique pour chaque tableau, pas besoin de le dupliquer en mémoire:
[code:1]
function Get-CurrentDomain{[AppDomain]::CurrentDomain}
function Get-Assemblies{(Get-CurrentDomain).GetAssemblies()}
#récupère un assembly de PS
$PSasm=get-assemblies|? {$_.location -match \&quot;System.Management.Automation.dll\&quot;}
#affiche ces classes
$PSasm.GetExportedTypes()|? {$_.isPublic -and ! $_.isinterface}
[/code:1]
cxvd7391 écrit:

Peut être un tuto magique ?

Celui-ci , mais tu t'attaques au fondement de Powershell à savoir le framework dotnet, ce n'est plus tout à fait le même apprentissage, et également à la POO (programmation orienté objet).

PowerShell c'est un peu comme avec les cacahuètes, on sait où ça commence jamais où ça s'arrête...
:)

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 11 mois #14434 par JONDON Cyril
Oui surtout que d'ordinaire à l'apéro j'ai du mal à m'arrêter mais là je pense que de toute façon je vais vite être freiné par ma incompréhension.

Merci en tout cas.

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

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