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

SharePoint .NET Discussion :

Exécuter script powershell depuis Sharepoint


Sujet :

SharePoint .NET

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut Exécuter script powershell depuis Sharepoint
    Bonjour,

    Je suis débutant en SharePoint et PowerShell, et je me retrouve face à un petit problème.

    Contexte:
    Je doit créer un formulaire InfoPath qui permet, après un workflow d'approbation, de créer un ou plusieurs site(s). Cette création de site je souhaiterais la faire via un script PowerShell qui serait lancé à la fin du workflow et qui récupérerait les données du formulaire.

    Mon problème est le suivant: est-il possible d'exécuter le script automatiquement après l'approbation (positive) du formulaire? et si oui comment est-ce réalisable?

    Environnement de travail:
    SharePoint 2010
    InfoPath 2010
    Designer 2010

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Lancer un script PowerShell directement depuis SharePoint, je ne suis pas sûr que ce soit faisable, et encore moins à faire.
    Peux-tu nous expliquer pourquoi tu tiens à le faire via PS ?

    Je pense que le plus simple serait de faire un itemReceiver sur ta liste afin de pouvoir effectuer ta création de site lorsque ton formulaire est rempli et ton workflow fini...
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Bonjour,

    Je ne tiens pas particulièrement à le faire via PS, c'est juste que PS offre a priori la possibilité de modifier certains éléments lors de la création d'un site (ex: nom d'une bibliothèque par défaut, enlever certaine liste/bibliothèque...).

    Est-ce que ta solution offre ces possibilités?

    Sinon j'ai trouvé comment faire, je ne trouve pas ça vraiment propre, mais il me semble que cela répond à mes besoins.

    Je crée une page html, qui me permet à son chargement via un objet ActiveX de lancer PS avec mon script.

    J'appelle cette page depuis mon formulaire via un hyperlien.

    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
    17
    18
    19
    20
    21
    22
    23
     
    <html>
        <head>
            <script language="javascript">
                function LaunchApp(appPath){
                    try{
                        <!-- Launch application -->
                        WSH = new ActiveXObject("WScript.Shell");
                        WSH.run(appPath);
                    }
                    catch (ex){
                        errMsg = "An error occured while lauching the application.\n\n";
                        alert(errMsg);
                    }
                    <!-- Close window -->
                    window.open('', '_self', '');
                    window.close();
                }
            </script>
        </head>
            <body onLoad="LaunchApp('cheminVersPS cheminVersScript')">
            </body>
        </html>
    Il faut également penser à régler les autorisations de sécurité de IE pour que cela fonctionne.

    J'ai trouvé cette solution sur deux autres sites:
    http://social.technet.microsoft.com/...f-4028fabdf574
    et
    http://www.olavaukan.com/2010/02/usi...om-sharepoint/

  4. #4
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par thibautK Voir le message
    Est-ce que ta solution offre ces possibilités?
    Absolument !
    Citation Envoyé par thibautK Voir le message
    Je crée une page html, qui me permet à son chargement via un objet ActiveX de lancer PS avec mon script.
    En effet ce n'est pas propre du tout et en plus cela va dépendre de la configuration de ton navigateur !

    La solution la plus simple, il me semble, est d'attacher un eventReceiver à ta liste. A la fin de ton workflow, tu mets à jour la valeur d'un champ (un flag) qui te permettra de savoir que tu peux créer ton site à partir des données du formulaire.

    Dans ton eventReceiver tu t'abonnes aux événements "ItemCreated" et "ItemUpdated" dans lesquels tu implémentes ta logique métier. Très simple au vu de l'expression de besoin...

    Si tu as besoin d'aide pour sa réalisation, n'hésite pas à demander !
    Au cas, tu trouvera ici un très détaillé sur le sujet.
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Ok merci je vais regarder ça alors!

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Bonjour,

    Je viens de finir d'installer Visual Studio 2012 pro.
    Première difficulté je me rend compte que le modèle de création des events receiver disponible sous VS2010, ne l'est plus dans VS 2012.

    A priori il faut créer un projet SharePoint 2010, chose que j'ai faite, on saisit l'URL du site et le niveau de confiance, le projet est alors créé. Ensuite on va dans le menu "PROJET" et "Ajouter un élément" on sélectionne "events receiver".

    A ce moment j'ai une erreur qui me dit que l'URL du site configuré pour le projet n'est pas bonne.
    Il faut bien indiquer l'URL du site qui héberge la bibliothèque à laquelle on veut attacher l'event receiver? Et il faut mettre l'adresse racine du site: http://<racine>/ , c'est bien ça?

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Voici la boite de dialogue qui s'affiche
    Images attachées Images attachées  

  8. #8
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Par défaut
    Bonjour,

    Le site sharepoint est sur le même serveur visual studio?

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Oui visual studio est sur le serveur et est à jour

  10. #10
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Par défaut
    Bonjour,

    autre piste, essayer les différentes écritures.

    http://localhost:[NumeroPort]
    ou

    Aussi, le site réponds bien?

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Bonjour,

    On a réussi à trouver d'où cela venait, l'utilisateur avec lequel je travaillais n'avait pas les droits nécessaire, malgrès qu'il soit admin de batterie et d'autres autorisation ><

    J'en utilise un autre et ça fonctionne je vais pouvoir me mettre dans les events receiver maintenant!

    merci pour ton implication lapinpanda

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Bonjour,

    Alors voilà où j'en suis:
    code de l'event receiver:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /// <summary>
            /// Un élément a été mis à jour.
            /// </summary>
            public override void ItemUpdated(SPItemEventProperties properties)
            {
                Log log = new Log();
                log.ecritureFichier("Activation de l'event");
                base.ItemUpdated(properties);
     
     
                //on vérifie que l'élément est bien issue de la bibliothèque DemandeCreationSite
                if (properties.ListTitle == "DemandeCreationSite")
                {
                    //on vérifie que la colonne "approbation" de l'élément est bien "Approuvee" 
                    string approbation = Convert.ToString(properties.AfterProperties["Approbation"]);
                    log.ecritureFichier(approbation);
                    if (approbation.Equals("Approuvee"))
                    {
                        //exécution du script de création de site
                        string formName = properties.FileSystemObjectTypePropertyName;
                        log.ecritureFichier(formName);
                        CreationSite cs = new CreationSite(formName);
                        Boolean success = cs.creationDuSite();
                    }
                }
            }
    En somme je vérifie que l'event provient d'une certaine bibliothèque (ici DemandesCreationSite) puis que la colonne "Approbation" a bien la valeur approuvee. Si on est dans ce cas de figure je récupère le nom de mon fomulaire et je le passe à la classe qui va s'occupée de traiter la création du site (j'ai également mis en place un système de fichier de log pour "voir" où des erreurs peuvent-être levées).

    Le problème c'est que j'ai l'impression que je ne rentre jamais dans l'event receiver... En effet le fichier de log n'est jamais créé alors que c'est la première chose qui doit se passer lorsque l'on entre dans l'event...
    (l'utilisateur que j'utilise à bien les droits pour créer ce fichier de log)

    Avez-vous une idée d'où peut venir mon problème?

    Pour rendre la solution disponible je suis allé dans l'administration centrale et dans solution j'ai uploadé le fichier ".wsp" généré par VS2012 et j'ai ensuite activée cette solution.

    Pour info voici l'arborescence de ma solution:
    arborescence de la solution

  13. #13
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Par défaut
    Bonjour,

    je t'arrête tout de suite, les event receiver sont liés à une liste.
    Cette ligne de code ne sert a rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                //on vérifie que l'élément est bien issue de la bibliothèque DemandeCreationSite
                if (properties.ListTitle == "DemandeCreationSite")
    Si ta liste est provisionné par tes soins, tu peux le faire dans la déifnition XML. Sinon, si elle est déjà présente, tu dois dans une feature rajouter un code qui fait l'association via l'API.

    http://stackoverflow.com/questions/1...ogrammatically

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Bonjour,
    Tout d'abord merci pour ta réponse!

    Citation Envoyé par Lapinpanda Voir le message
    je t'arrête tout de suite, les event receiver sont liés à une liste.
    Quand/où est-ce que l'on définit cela, lors de la création de l'event receiver?
    (Est-ce dans le fichier Elements.xml où l'on trouve cette balise : <Receivers ListTemplateId="107"> ?)

    Citation Envoyé par Lapinpanda Voir le message
    Si ta liste est provisionné par tes soins, tu peux le faire dans la déifnition XML
    Le fichier Elements.xml que je cite plutot, c'est ça?

    Pour apporter quelques précisions, j'avais tout d'abord un message d'erreur "Impossible de charger le fichier ou l'assembly '...' Le fichier spécifié est introuvable".

    C'est maintenant résolu (en tout cas à priori car je ne l'ai plus), en déployant le fichier ".wsp" dans le site racine de ma collection "sandbox".

    Par dépit j'ai suivi un "tuto" msdn, même lui ne fonctionne pas donc là je ne sais vraiment plus quoi faire...

  15. #15
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Re,

    Alors je te conseil dans un premier temps de faire ton projet en mode Farm et non Sandbox. Le mode sandbox apporte beaucoup de limitations qui compliquent vraiment le travail.

    Si tu veux savoir si ton code est exécuté ou non, il te suffit de te mettre en mode debug et de placer un point d'arrêt dans ta fonction. Soit en déployant ta solution via la touche "F5" soit en attachant le processus SharePoint "W3WP.exe".

    je t'arrête tout de suite, les event receiver sont liés à une liste.
    C'est l'étape 7 du tutoriel que tu as suivit (fonctionne très bien chez moi pour l'info)
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Re,

    Je viens de refaire le tuto et effectivement ça fonctionne... j'ai dû faire une erreur de manip tout à l'heure...

    je t'arrête tout de suite, les event receiver sont liés à une liste.
    J'avais mal saisi le sens de ta phrase, étant donnée que dans la liste déroulante de la boite de dialogue on a des "bibliothèques", j'ai pensé que l'on pouvait lier un event receiver sur une bibliothèque ou liste.

    Du coup j'ai une question, on peut sélectionner une liste de type "liste personnalisé", seulement j'en ai plusieurs de liste personnalisé du coup comment je peux faire en sorte que seulement une liste ne soit concerné?

    En faisant comme ça?
    Citation Envoyé par thibautK Voir le message
    // on vérifie que l'élément est bien issue de la bibliothèque liste DemandeCreationSite
    if (properties.ListTitle == "DemandeCreationSite")

  17. #17
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par thibautK Voir le message
    Du coup j'ai une question, on peut sélectionner une liste de type "liste personnalisé", seulement j'en ai plusieurs de liste personnalisé du coup comment je peux faire en sorte que seulement une liste ne soit concerné?
    L'Event Receiver est lié à la liste que tu sélectionnes à la création, par conséquent il est forcément lié à une seule liste/bibliothèque.

    Après il est possible d'en faire un de façon générique et de l'utiliser sur plusieurs liste. Mais cela ne correspond pas à ton besoin.
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  18. #18
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Ok,

    Donc un event receiver s'applique bien à une liste ou à une bibliothèque.

    Maintenant le truc c'est que lorsque je dois choisir cette liste/bibliothèque, la bibliothèque que j'ai créé n'est pas disponible dans les choix proposés...

    Du coup étant donné que ma bibliothèque est une bibliothèque de formulaires, à laquelle j'ai rajouté des colonnes, j'avais sélectionné le choix 'Bibliothèque de formulaires", mais évidemment ça ne fonctionne pas (étant donné que ce choix correspond à la bibliothèque présente par défaut dans le site d'équipe).

    Du coup comment faire pour lier ma bibliothèque "DemandeCreationSite" à mon event receiver étant donné qu'elle n'est pas présente dans la liste proposée...

  19. #19
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Par défaut
    Bon ok j'ai eu du mal à comprendre mais j'ai compris

    Pour ceux qui rencontrerais toutes les questions que je me pose, en sélectionnant "Bibliothèque de formulaires" dans les choix proposés, cela fonctionne pour les bibliothèques de formulaires personnalisé. (Je suppose que ça fonctionne de la même manière pour les autres bibliothèques)

    Donc mon event se lance maintenant reste plus qu'à débug...

  20. #20
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Tu devrais essayer de suivre ce tutoriel

    Tu y trouvera la réponse au chapitre 3, cependant, je t'invite fortement à le suivre dans son ensemble !
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

Discussions similaires

  1. Exécuter script SQL depuis Eclipse
    Par marvin6303 dans le forum Eclipse Java
    Réponses: 14
    Dernier message: 13/07/2015, 11h46
  2. Exécuter script php depuis un autre serveur ?
    Par truser dans le forum Langage
    Réponses: 2
    Dernier message: 25/04/2014, 11h57
  3. Exécuter un script PowerShell depuis PHP
    Par user007 dans le forum Langage
    Réponses: 7
    Dernier message: 07/04/2014, 16h05
  4. exécuter script R depuis C#
    Par khubal dans le forum C#
    Réponses: 6
    Dernier message: 12/01/2012, 01h40
  5. [Système] Exécuter script python depuis php
    Par philpython dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2007, 13h57

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