Question
Code Besoin d'éclaircissement
- JONDON Cyril
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 12 ans 11 mois #14425
par JONDON Cyril
Code Besoin d'éclaircissement a été créé 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.
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 11 mois #14426
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Code Besoin d'éclaircissement
Salut,
cxvd7391 écrit:
Voir aussi ce tuto .
cxvd7391 écrit:
[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
cxvd7391 écrit:
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.pouvez me me préciser ce que fait cette syntaxe de plus que si je mets $mavar ?.
Voir aussi ce tuto .
cxvd7391 écrit:
Il faut consulter la signature de la méthode statique :2 - Pq la deuxième façon de trier me retourne $null?
[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.
- JONDON Cyril
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 12 ans 11 mois #14427
par JONDON Cyril
Réponse de JONDON Cyril sur le sujet Re:Code Besoin d'éclaircissement
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=\"Valeur1\"}
$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à
Peut être un tuto magique ?
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=\"Valeur1\"}
$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à
Peut être un tuto magique ?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 11 mois #14429
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Code Besoin d'éclaircissement
cxvd7391 écrit:
cxvd7391 écrit:
[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:
[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 \"System.Management.Automation.dll\"}
#affiche ces classes
$PSasm.GetExportedTypes()|? {$_.isPublic -and ! $_.isinterface}
[/code:1]
cxvd7391 écrit:
PowerShell c'est un peu comme avec les cacahuètes, on sait où ça commence jamais où ça s'arrête...
Le tri fonctionne dans les deux cas, sauf qu'ici tu écrases le tableau existant par l'affectation de la valeur $null.Ok pour le tableau si j'enlève l'affectation ça marche mieux en effet.
cxvd7391 écrit:
Utilise le paramètre -static :Donc plus globalement comment faire pour jongler entre les méthodes que je trouve en faisant un GM
[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:
Sort est une méthode de classe, pas besoin de créer une instance ( new-object) pour l'utiliser :(pourquoi Sort n'est pas présente pour un objet de type System.Array ?)
[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 \"System.Management.Automation.dll\"}
#affiche ces classes
$PSasm.GetExportedTypes()|? {$_.isPublic -and ! $_.isinterface}
[/code:1]
cxvd7391 écrit:
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).Peut être un tuto magique ?
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.
- JONDON Cyril
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 12 ans 11 mois #14434
par JONDON Cyril
Réponse de JONDON Cyril sur le sujet Re:Code Besoin d'éclaircissement
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.
Merci en tout cas.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.055 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Code Besoin d'éclaircissement