IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Timeout sur un SearchWindowsPrincipals [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Candidat au Club
    Homme Profil pro
    Apprenti Ingénieur Informatique et Réseaux
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique et Réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Timeout sur un SearchWindowsPrincipals
    Bonjour,

    Je tente désespérément de mettre un timeout sur un searchwindowsprincipals. J'ai essayé avec un job, mais ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Add-PSSnapin "Microsoft.Sharepoint.PowerShell"
    
    $SPUtility = [Microsoft.Sharepoint.Utilities.SPUtility]
    $SPPrincipalType = [Microsoft.Sharepoint.Utilities.SPPrincipalType]
    
    $job = Start-Job -ScriptBlock {
               param($Search,$SPUtility,$webappli,$LoginTest,$SPPrincipalType,$reach) 
                               
               $Search = $SPUtility::SearchWindowsPrincipals($webappli, $LoginTest, $SPPrincipalType::User -bor $SPPrincipalType::SecurityGroup, 20 ,[ref]$reach)
                     
               return $Search
      } -ArgumentList @($Search,$SPUtility,$webappli,$LoginTest,$SPPrincipalType,$reach)
    Wait-Job -Timeout 10 -Job $job | Receive-Job -job $job
    Remove-Job $job -Force
    et voici mon message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    The '=' operator failed: Unable to cast object of type 'System.Management.Automation.PSObject' to type 'System.Type'..
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : OperatorFailed
    Si vous avez une idée de comment corriger cette erreur ou sur comment faire un timeout d'un autre moyen, merci beaucoup par avance.

    Cordialement.

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par D3v1L Voir le message
    Si vous avez une idée de comment corriger cette erreur
    Respecter la signature du scriptblock du job.
    Pour 6 paramètres attendus passer 6 paramètres
    $SPUtility, qui un type, est affecté au paramètre $Search, qui lui n'est pas typé. Typer sous PS aide qq fois...
    Le wait-job -timeout déclenchant une exception, l'usage d'un bloc try/catch est donc nécessaire.

  3. #3
    Candidat au Club
    Homme Profil pro
    Apprenti Ingénieur Informatique et Réseaux
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique et Réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Oui pour les arguments au début j'en avait 6 mais en faisant des tests j'ai oublié de le remettre.

    Citation Envoyé par Laurent Dardenne Voir le message
    $SPUtility, qui un type, est affecté au paramètre $Search, qui lui n'est pas typé. Typer sous PS aide qq fois...
    Justement j'ai essayé de le typer mais je ne trouve pas le bon type.
    Si je fais un $Search.GetType().FullName (sans mettre ma commande dans le job), j'obtiens ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Collections.Generic.SortedList`2+ValueList[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],
    [Microsoft.SharePoint.Utilities.SPPrincipalInfo, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c]]
    Peut-être la réponse est évidente mais je débute sur powershell et tout n'est pas encore très clair.

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par D3v1L Voir le message
    Peut-être la réponse est évidente
    Pas sûr.
    Dans ce cas là simplifie ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $job=Start-Job -ArgumentList $webappli,$LoginTest,$SPPrincipalType,$reach -ScriptBlock {
      param($webappli,$LoginTest,$SPPrincipalType,$reach) 
        [Microsoft.Sharepoint.Utilities.SPUtility]::SearchWindowsPrincipals($webappli, $LoginTest, $SPPrincipalType::User -bor $SPPrincipalType::SecurityGroup, 20 ,[ref]$reach)
    Ensuite j'ai un doute que la variable $reach soit, par usage d'un ref, propagé au contexte de l'appellant, par contre que le scriptblock du job le teste peut être judicieux, mais je ne sais pas ce que tu gères : SharePoint connais pas.

    Quant à l'exception sur un timeout, c'est une erreur de ma part je confond avec un autre cmdlet
    Citation Envoyé par D3v1L Voir le message
    je débute sur powershell et tout n'est pas encore très clair.
    Je suppose que tu connais déjà le dev, mais tu ne commences pas avec le plus facile :-)

  5. #5
    Candidat au Club
    Homme Profil pro
    Apprenti Ingénieur Informatique et Réseaux
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique et Réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    J'ai fait un peu de dev déjà mais je suis plus dans les réseaux.

    En gros, ce que je souhaite faire c'est tester la connexion d'une web application à un Active Directory (AD) en renseignant un utilisateur à rechercher. Et SharePoint permet de le faire directement avec SearchWindowsPrincipals qui fonctionne très bien mais n'a pas de paramètre timeout, donc elle met plus de 30 secondes à s’arrêter quand elle ne n'arrive pas à se connecter. Sharepoint c'est une suite de produits microsoft, qui permet entre autre la mise en commun de documents pour différents projets. Biensur il y a des authentifications qui sont directement reliées à des AD et il existe une fonctionnalité appelée PeoplePicker qui recherche a partir d'un nom entré le compte AD correspondant. Et moi je souhaite tester cette connexion.

    Je testerai demain en simplifiant le code

    Et j'ai du mal avec la notion de contexte du job. Si je comprends bien un job crée une session à part avec un contexte différent. Donc je suppose que je dois utiliser le Add-PSSnapin dans le job pour pouvoir utiliser ses fonctionnalités ? Car j'ai essayé mais le job met plusieurs minutes à s’exécuter, est-ce normal ?

    J'ai aussi testé de mettre le Add-PSSnapin dans le paramètre
    -initializationscript du job mais rien y fait ça ne change rien au temps d’exécution du job.

    Pour le $reach, si la recherche dépasse les 20 résultats, il passe à $true, mais je n'ai pas pu tester s'il était retourné correctement puisque la recherche ne fonctionne pas.

    Et dernière question, le return dans un job ne sert à rien, je me trompe ?

    En tout cas merci déjà pour ton aide, j’espère pouvoir résoudre ce problème.

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par D3v1L Voir le message
    Si je comprends bien un job crée une session à part avec un contexte différent.
    Oui, un runspace.
    Citation Envoyé par D3v1L Voir le message
    Donc je suppose que je dois utiliser le Add-PSSnapin dans le job pour pouvoir utiliser ses fonctionnalités ?
    Oui.
    Citation Envoyé par D3v1L Voir le message
    Car j'ai essayé mais le job met plusieurs minutes à s’exécuter, est-ce normal ?
    Aucune idée !
    Citation Envoyé par D3v1L Voir le message
    J'ai aussi testé de mettre le Add-PSSnapin dans le paramètre
    -initializationscript du job mais rien y fait ça ne change rien au temps d’exécution du job.
    Faut consulter la doc, mais il me semble que ce paramètre n'impacte pas le job, mais le contexte de l'appelant.
    Citation Envoyé par D3v1L Voir le message
    Et dernière question, le return dans un job ne sert à rien, je me trompe ?
    Oui, car par convention PS émet dans le pipeline, ici Receive-Job, le return force un branchement (c'est similaire à un jump/goto)

  7. #7
    Candidat au Club
    Homme Profil pro
    Apprenti Ingénieur Informatique et Réseaux
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique et Réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Ok pour le moment je laisse tomber, et si j'ai un peu de temps je ferai de nouveaux tests, mais j'ai quelque chose d'un peu semblable à faire et je pense que si ça ne fonctionne pas, c'est parce que les credentials ne sont pas transmis.

    Si jamais quelqu'un a un problème similaire à celui-là et qu'il est bloqué, je lui conseille de tester le paramètre authentication avec le credSSP qui permet de faire un "double-saut", c'est à dire qu'on donne les droits pour lancer le job, et on transmet ces droits dans le job pour qu'il puisse se connecter par exemple à un AD ou une base de données SQL.

    En tous cas merci Laurent d'avoir passé du temps à m'aider, si jamais avec un peu de temps je trouve la solution je serais heureux de la poster ici

  8. #8
    Candidat au Club
    Homme Profil pro
    Apprenti Ingénieur Informatique et Réseaux
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique et Réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    J'ai trouvé la solution, vraiment par hasard, pas besoin de job du tout, je la poste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Add-PSSnapin "Microsoft.Sharepoint.PowerShell"
    $SPUtility = [Microsoft.Sharepoint.Utilities.SPUtility]
    $SPPrincipalType = [Microsoft.Sharepoint.Utilities.SPPrincipalType]
    $SearchTimeout = "00:00:10"
    $MaxUsersNumber = 20
    $LoginTest = "loginToSearch"
    $webappli = Get-SPWebApplication $WebAppUrl
    
     if($webappli.PeoplePickerSettings.ActiveDirectorySearchTimeout -ne $SearchTimeout)
            {
                $webappli.PeoplePickerSettings.ActiveDirectorySearchTimeout = $SearchTimeout
                $webappli.update()
            }  
    
     $Search = $SPUtility::SearchWindowsPrincipals($webappli, $LoginTest, $SPPrincipalType::User -bor $SPPrincipalType::SecurityGroup, $MaxUsersNumber ,[ref]$reach)
    Voilà comment mettre un timeout sur un searchwindowsprincipals d'une web application sharepoint. Il y avait un paramètre réglable, un truc tout bête mais impossible de trouver de la doc dessus...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6] Comment gérer un Timeout sur l'api HttpSendRequest
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/06/2006, 10h15
  2. Timeout sur POST formulaire avec checkbox
    Par shyangel dans le forum Langage
    Réponses: 16
    Dernier message: 11/05/2006, 12h59
  3. Comment définir un timeout sur une socket PHP ?
    Par N3odyme dans le forum Langage
    Réponses: 7
    Dernier message: 07/05/2006, 23h04
  4. Timeout sur read() avec termios et VTIME
    Par olivier857 dans le forum C
    Réponses: 9
    Dernier message: 05/04/2006, 09h30
  5. [Sockets] Timeout sur accept() ?
    Par MikB dans le forum Développement
    Réponses: 2
    Dernier message: 30/12/2003, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo