Question
[Résolu] Fonction avec Arguments
- buissonneau
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 8 ans 7 mois #24016
par buissonneau
Francis
[Résolu] Fonction avec Arguments a été créé par buissonneau
Bonjour la communauté,
J'ai une question sur les fonctions avec arguments.
Alors voilà, j'ai écris une fonction (ma première) pour interroger un OpenLdap avec 2 arguments -UID ou -Login.
Cela fonctionne sans problème.
[code:1]
SearchLdap -UID 12345
[/code:1]
Maintenant j'aimerai pouvoir pousser la chose car je souhaiterais pouvoir par exemple ajouter un paramètre après qui permettrait de récupérer qu'un seul attribut spécifique.
Je m'explique. Quand je fais le SearchLdap -UID 12345 je récupère l'ensemble des attributs.
Et du coup j'aimerais pouvoir faire un truc du genre :
[code:1]
SearchLdap -UID 12345 -Mail #Récupère que le Mail
SearchLdap -UID 12345 -Service #Récupère que le nom du service.
[/code:1]
Comme ça si je cherche un attribut en particulier, j'ai pas tout le tableau qui s'affiche.
[code:1]
function SearchLDAP {
[CmdletBinding(DefaultParameterSetName=\"UID\"«»)]
Param(
[parameter(parametersetname=\"UID\"«»)]
$UID,
[parameter(parametersetname=\"Login\"«»)]
$Login
)
# INITIALISATION DES PARAMETRES DE LA REQUETE LDAP
$strNomServeur = \"Machin.fr\"
$strBaseDN = 'ou=people,dc=machin,dc=fr'
$intPortTCPUDP = 389
$strDomain = \"LDAP://\" + $strNomServeur + \":\" + $intPortTCPUDP + \"/\" + $strBaseDN
$strBindUser = \"cn=ppl,ou=connecteurs,dc=machin,dc=fr\"
$strBindPassword = \"123456\"
# initialisation de la méthode d'authentification avec le serveur openldap
$strAuthType =
System.DirectoryServices.AuthenticationTypes]::FastBind
#$strEncryptionMethod = \"no encryption\"
#instantiation du domaine à intérroger
$root = New-Object -TypeName System.DirectoryServices.DirectoryEntry($strDomain, $strBindUser, $strBindPassword, $strAuthType)
#Initialisation de la chaine de caractères représentant le filtre de recherche
$strFilter = \"(&(objectClass=Employee)(objectClass=Person))\"
#Instantiation de l'objet directory searcher avec le domaine que nous avions instancié précédemment, le filtre de recherche et la collection des proriétés à récupérer
$objMaRechercheOpenLdap = New-Object System.DirectoryServices.DirectorySearcher($root)
#définition du filtre de recherche : on recherchera dans le domaine $root tous les objets répondant à ce critère de recherche $strFilter
$objMaRechercheOpenLdap.Filter = $strFilter
#Notre recherche se fera sur l'ensemble de l'arbre donc y compris les sous-arbres
$objMaRechercheOpenLdap.SearchScope = \"Subtree\"
switch($PsCmdlet.ParameterSetName)
{
\"UID\" {$objMaRechercheOpenLdap.FindAll() | Where-Object {$_.Properties.get_item(\"uid\"«») -eq $UID}}
\"Login\" {$objMaRechercheOpenLdap.FindAll() | Where-Object {$_.Properties.get_item(\"login\"«») -eq $Login}}
}
}
[/code:1]
Je pense qu'il faudrait déclarer de nouveau paramètres (-mail, -Service.....) et du coup faire une condition si un paramètre est entré après -UID ou -Login cela exécutera un truc du genre :
[code:1]
SearchLdap -UID 12345 -Mail
#cela équivaut à faire :
SearchLdap -UID 12345 | Select-Object {$_.properties.item(\"Mail\"«»)}
[/code:1]
Mais je vois pas comment imbriquer ses seconds arguments.
Voilà, si quelqu'un à une idée ou une proposition, je suis preneur.
Bonne journée,
Francis<br><br>Message édité par: Arnaud, à: 5/09/17 15:13
J'ai une question sur les fonctions avec arguments.
Alors voilà, j'ai écris une fonction (ma première) pour interroger un OpenLdap avec 2 arguments -UID ou -Login.
Cela fonctionne sans problème.
[code:1]
SearchLdap -UID 12345
[/code:1]
Maintenant j'aimerai pouvoir pousser la chose car je souhaiterais pouvoir par exemple ajouter un paramètre après qui permettrait de récupérer qu'un seul attribut spécifique.
Je m'explique. Quand je fais le SearchLdap -UID 12345 je récupère l'ensemble des attributs.
Et du coup j'aimerais pouvoir faire un truc du genre :
[code:1]
SearchLdap -UID 12345 -Mail #Récupère que le Mail
SearchLdap -UID 12345 -Service #Récupère que le nom du service.
[/code:1]
Comme ça si je cherche un attribut en particulier, j'ai pas tout le tableau qui s'affiche.
[code:1]
function SearchLDAP {
[CmdletBinding(DefaultParameterSetName=\"UID\"«»)]
Param(
[parameter(parametersetname=\"UID\"«»)]
$UID,
[parameter(parametersetname=\"Login\"«»)]
$Login
)
# INITIALISATION DES PARAMETRES DE LA REQUETE LDAP
$strNomServeur = \"Machin.fr\"
$strBaseDN = 'ou=people,dc=machin,dc=fr'
$intPortTCPUDP = 389
$strDomain = \"LDAP://\" + $strNomServeur + \":\" + $intPortTCPUDP + \"/\" + $strBaseDN
$strBindUser = \"cn=ppl,ou=connecteurs,dc=machin,dc=fr\"
$strBindPassword = \"123456\"
# initialisation de la méthode d'authentification avec le serveur openldap
$strAuthType =
System.DirectoryServices.AuthenticationTypes]::FastBind
#$strEncryptionMethod = \"no encryption\"
#instantiation du domaine à intérroger
$root = New-Object -TypeName System.DirectoryServices.DirectoryEntry($strDomain, $strBindUser, $strBindPassword, $strAuthType)
#Initialisation de la chaine de caractères représentant le filtre de recherche
$strFilter = \"(&(objectClass=Employee)(objectClass=Person))\"
#Instantiation de l'objet directory searcher avec le domaine que nous avions instancié précédemment, le filtre de recherche et la collection des proriétés à récupérer
$objMaRechercheOpenLdap = New-Object System.DirectoryServices.DirectorySearcher($root)
#définition du filtre de recherche : on recherchera dans le domaine $root tous les objets répondant à ce critère de recherche $strFilter
$objMaRechercheOpenLdap.Filter = $strFilter
#Notre recherche se fera sur l'ensemble de l'arbre donc y compris les sous-arbres
$objMaRechercheOpenLdap.SearchScope = \"Subtree\"
switch($PsCmdlet.ParameterSetName)
{
\"UID\" {$objMaRechercheOpenLdap.FindAll() | Where-Object {$_.Properties.get_item(\"uid\"«») -eq $UID}}
\"Login\" {$objMaRechercheOpenLdap.FindAll() | Where-Object {$_.Properties.get_item(\"login\"«») -eq $Login}}
}
}
[/code:1]
Je pense qu'il faudrait déclarer de nouveau paramètres (-mail, -Service.....) et du coup faire une condition si un paramètre est entré après -UID ou -Login cela exécutera un truc du genre :
[code:1]
SearchLdap -UID 12345 -Mail
#cela équivaut à faire :
SearchLdap -UID 12345 | Select-Object {$_.properties.item(\"Mail\"«»)}
[/code:1]
Mais je vois pas comment imbriquer ses seconds arguments.
Voilà, si quelqu'un à une idée ou une proposition, je suis preneur.
Bonne journée,
Francis<br><br>Message édité par: Arnaud, à: 5/09/17 15:13
Francis
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 8 ans 7 mois #24018
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Fonction avec Arguments
Salut,
regarde la complétion d'argument si cela peut t'aider.
Et/ou les paramètres dynamique, si tu veux qu'il soit activé selon la présence d'un premier paramètre.
Un paramètre lié à un jeu de paramètre peut aussi faire l'affaire je pense.
par exemple -Property (normé) ou -Attribut(plus adapté fonctionnellement).
L'implémentation à suivre dépend de ton usage ou celui que tu veux offrir à l'utilisateur.
regarde la complétion d'argument si cela peut t'aider.
Et/ou les paramètres dynamique, si tu veux qu'il soit activé selon la présence d'un premier paramètre.
Un paramètre lié à un jeu de paramètre peut aussi faire l'affaire je pense.
par exemple -Property (normé) ou -Attribut(plus adapté fonctionnellement).
L'implémentation à suivre dépend de ton usage ou celui que tu veux offrir à l'utilisateur.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- buissonneau
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 8 ans 7 mois #24019
par buissonneau
Francis
Réponse de buissonneau sur le sujet Re:Fonction avec Arguments
Ah merci, je vais regarder cela de suite.
Merci Laurent.
Merci Laurent.
Francis
Connexion ou Créer un compte pour participer à la conversation.
- buissonneau
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 8 ans 7 mois #24027
par buissonneau
Francis
Réponse de buissonneau sur le sujet Re:Fonction avec Arguments
Re,
Bob, effectivement, les arguments dynamique seraient le bon truc de ce que je lis, mais c'est très très obscure pour la mise en place.
je vais relire et creuser.
Francis
Bob, effectivement, les arguments dynamique seraient le bon truc de ce que je lis, mais c'est très très obscure pour la mise en place.
je vais relire et creuser.
Francis
Francis
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 8 ans 7 mois #24029
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Fonction avec Arguments
Dans ce
tuto
, tu as un court exemple du principe.
Et le code du module Plaster en implémente via un fichier XML.
Ceci dit je trouve -Property 'Mail','Service' plus simple, car tu risques d'avoir bcp de paramètres de type switch et à part le splatting tu ne pourras passer un tableau de valeur (noms d'attribut).
Et le code du module Plaster en implémente via un fichier XML.
Ceci dit je trouve -Property 'Mail','Service' plus simple, car tu risques d'avoir bcp de paramètres de type switch et à part le splatting tu ne pourras passer un tableau de valeur (noms d'attribut).
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- buissonneau
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 8 ans 7 mois #24037
par buissonneau
Francis
Réponse de buissonneau sur le sujet Re:Fonction avec Arguments
Merci Laurent, je suis en pleine lecture de ton tuto.
Par contre je vois pas trop ce que tu veux dire par le -property 'mail' etc..
Ca serait une sorte de foreach-object sur laquelle je construirais ma liste d'arguments?
[code:1]
$param = searchldap -uid 12345
$param2 = $param.Properties.get_PropertyNames()
[/code:1]
du coup j'obtiens une variable avec la liste potentielle de mes arguments utilisables.
Par contre je vois pas trop ce que tu veux dire par le -property 'mail' etc..
Ca serait une sorte de foreach-object sur laquelle je construirais ma liste d'arguments?
[code:1]
$param = searchldap -uid 12345
$param2 = $param.Properties.get_PropertyNames()
[/code:1]
du coup j'obtiens une variable avec la liste potentielle de mes arguments utilisables.
Francis
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.104 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Fonction avec Arguments