Question reduire les parametres d'une function
- usopp
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 34
- Remerciements reçus 0
encore moi ...
j'ai une fonction
[code:1]Function Object {
[CmdletBinding()]
Param ( [Parameter(Mandatory=$true)][string]$ServerName)
$Hash =@{\"SERVERNAME\" = $ServerName}
$Object = New-Object PSObject -Property $hash
$Object
} [/code:1]
dans ce cas la c'est assez simple c'est qu'un parametre..
mais imaginons que j'ai 30 services a checker par serveurs et que pour chaques services je dois checker
-la presence de chaque service (true / false)
-le status de chaque service (true / false)
ca me fait une function object avec en theorie 61 parametres ..
sachant que je veux retourner une collection d'objet
avez vous une astuce a me proposer ?
merci
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
usopp écrit:
Non, dans ce cas il faut choisir une structure de donnée appropriée :ca me fait une function object avec en theorie 61 parametres ..
[code:1]
$Server=@{
ServiceName1=[PSCustomObject]@{isExist=true/false,Status=true/false)
ServiceNameN=@(idem)
}
[/code:1]
On manipule un objet possédant une collection d'objet (imbrication).
usopp écrit:
Tu veux dire un objet personnalisé (PSObject)?sachant que je veux retourner une collection d'objet
avez vous une astuce a me proposer ?
Rien ne t'empêche de récupérer une structure de donnée et de retarder la construction de chaque objet à partir de la collection.<br><br>Message édité par: Laurent Dardenne, à: 21/10/14 18:17
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- usopp
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 34
- Remerciements reçus 0
oui je fais des collections de PSObject
[code:1]Function serveur {
[CmdletBinding()]
Param ( [Parameter(Mandatory=$true)][string]$ServerName,
[Parameter(Mandatory=$true)][Boolean]isServiceExist,
[Parameter(Mandatory=$true)][Boolean]isServiceRunning)
$Hash =@{\"SERVERNAME\" = $ServerName
\"isServiceExist\" = $isServiceExist
\"isServiceRunning\" = $isServiceRunning}
$Object = New-Object PSObject -Property $hash
$Object
} [/code:1]
et je construit ma collection via
[code:1]Serveur -ServerName Servername -isServiceExist (CheckService Service1) -isServiceRunning (get-ServiceStatus Service1)[/code:1]
Rien ne t'empêche de récupérer une structure de donnée et de retarder la construction de chaque objet à partir de la collection.
pas compris
$Server=@{
ServiceName1=[PSCustomObject]@{isExist=true/false,Status=true/false)
ServiceNameN=@(idem)
}
idem je ne vois pas trop comment l'utiliser je vais avoir une sous collection ?
si tu pouvais m'expliquer stp
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Probablement, ensuite il faut déterminer ce qu'est un débutant, et sans retour de lecteur difficile de corriger la démarche. Ceci dit j'ai indiqué le niveau sur chacun. As-tu un exemple en particulier ?tes super cours sur développez.com sont hard pour un débutant
usopp écrit:
Exemple: On peut dans un premier temps récupérer des informations d'une base de donnée, et dans un second temps construire un objet que l'on passe à un traitement :pas compris
[code:1]Get-Datas|New-MyObject|Traitement[/code:1]
Un exemple, ici on construit un objet contenant une collection d'objet:
[code:1]
Function Get-ServicesStatus {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true)]
[string]$ServerName,
[String[]] $Services
)
#Niveau 1: porte une collection
$Properties =@{
Name=$ServerName
ServicesStatus=New-Object System.Collections.Arraylist
}
$Object = New-Object PSObject -Property $Properties
$Services|
Foreach {
$ServiceName=$_
$CurrentService=Get-Service $ServiceName -ea SilentlyContinue
$isExist=$CurrentService -ne $null
#Niveau 1.1: crée un nouvel objet
$Service=New-Object PSObject -Property @{
Name=$ServiceName;
Exist=$isExist;
State=if ($isExist) {$CurrentService.Status} else {$null}
}
#Niveau 2: Ajoute l'objet dans la collection
[void] $Object.ServicesStatus.Add($Service)
}
Write-Output $Object
}#Get-ServicesStatus
$Srv=Get-ServicesStatus localhost winrm,Power,bthserv,NotExist
$Srv
$Srv.ServicesStatus
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- usopp
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 34
- Remerciements reçus 0
c'est vrai que c'est dur de définir un débutant...
ceci dit tu as indiqué le niveau sur chacun donc tu vas peut être pouvoir me donner ta définition ?
j'ai plus au moins lu tout tes cours dont certains quand je débutais et je me demandais même si ca parlait vraiment de powerShell
maintenant ca fait env 1ans que je m'intéresse au dev et que j'ai un peu progressé..j'ai l'occasion de pouvoir plus scripter en ce moment au boulot donc j'espère pouvoir rapidement progresser
je me suis un peu penché sur le C/C++/C# qui m'a aidé a comprendre un peu plus le powershell mais c'est pas encore ca pour produire du code de qualité..
j'essayerai de te faire un retour la prochaine fois que je trouve du temps pour relire tes cours
ps : sinon j'avais pensé a ajouter une \"colonne\" a la collection déjà existante pour chaque object mais je sais pas si c'est possible
j'ai essayé de jouer avec add-member mais soit j'ai pas réussi soit c'est pas fait pour ca<br><br>Message édité par: usopp, à: 21/10/14 20:19
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Effectivement, il faut un peu de pratique de Powershell et en connaitre les principes de base. Celui-ci n'est pas pour débutant, sans pour autant être complexe.car a la lecture j'avoue que j'ai du mal la
usopp écrit:
Oui, par exemple voici qq questions que je posais à mes collègues :c'est vrai que c'est dur de définir un débutant...
Cela ne définit pas la notion de débutant, mais permet d'avoir un petit avis sur ce que la personne connait ou pas et quelles compétences de base elle posséde.Connaissez-vous :
- le fonctionnement et la gestion des exceptions dans un langage de programmation?
Oui &#9744; Non &#9744;
- le framework dotnet (objet, Garbage Collector, type de données, managed code) ?
Oui &#9744; Non &#9744;
- WMI (Classe, namespace) ?
Oui &#9744; Non &#9744;
- les principes du pipeline ?
Oui &#9744; Non &#9744;
- les principes de base de la programmation objet (POO) : objet, méthode, propriété, héritage (classe), Polymorphisme ?
Oui &#9744; Non &#9744;
- ceux de la programmation événementielle : gestion d’événement et traitement asynchrone ?
Oui &#9744; Non &#9744;
- les expressions régulières (appelés aussi regex) ?
Oui &#9744; Non &#9744;
- le principe de gestion de version de code source, tel Subversion ou CVS ?
Oui &#9744; Non &#9744;
De mon côté je m'efforce d'expliquer, là ou certains veulent juste savoir faire. C'est peut être une des raisons qui fait que mes doc nécessitent plus d'efforts.
Sur le net on peut trouver à la pelle des infos sur 'comment faire' ceci ou cela. Ne serait-ce que lire la doc et les fichiers About_xxx.
Enfin il y a une un autre aspect qui est la difficulté contenu dans un tuto qui permet de franchir une étape. Si on lit ce que l'on connait déjà, c'est juste de la révision.
usopp écrit:
Fallait pas. Mais celui sur les closures ou les runspaces je veux bien te croirej'ai plus au moins lu tout tes cours dont certains quand je débutais et je me demandais même si ca parlait vraiment de powerShell.
usopp écrit:
De connaitre les bases de la programmation ça facilite les choses.maintenant ca fait env 1ans que je m'intéresse au dev et que j'ai un peu progressé
usopp écrit:
Le truc c'est qu'avec PS on ne fait pas attention aux détails, comme avec ces langages. A moins d'écrire des outils pour des admins.je me suis un peu penché sur le C/C++/C#
usopp écrit:
Un seul suffira, reste à le choisir.j'essayerai de te faire un retour la prochaine fois que je trouve du temps pour relire tes cours
usopp écrit:
Autre point lorsqu'on débute, acquérir les termes appropriéssinon j'avais pensé a ajouter une \"colonne\" a la collection déjà existante pour chaque object
Add-Member ajoute une propriété ou une méthode, cela dépend de ce que tu veux faire avec tes objets et si tu comptes réutiliser la fonction de création.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- reduire les parametres d'une function