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

MS SQL Server Discussion :

Job-Powershell pour SharePoint


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 69
    Par défaut Job-Powershell pour SharePoint
    Bonjour,

    je cherche actuellement à écrire un script powershell qui exécute une requête SQL sur un serveur SQL-Server pour faire le backup des fichiers de log d'une ferme SharePoint.

    Je vous mets en copie le script complet :

    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
    C:\Program` Files\Common` Files\Microsoft` Shared\Web` Server` Extensions\14\CONFIG\POWERSHELL\Registration\\sharepoint.ps1 2>$null
     
    Get-SPDatabase | foreach {
        $cmd1 = "DECLARE @time varchar(2)
    	        DECLARE @name varchar(256)
    	        DECLARE @dbname varchar(256)
     
    	        SET @dbname = '"
        $cmd2 = $_.name
        $cmd3 ="'
    	        SET @time = replace(convert(varchar, getdate(), 108), ':', '.')
    	        SET @name = 'E:\Backup\H'+@time+'_'+@dbname+'_log'
     
    	        BACKUP LOG @dbname
    	        TO DISK = @name
        "
        sqlcmd -s localhost -Q "$cmd1$cmd2$cmd3"
    }
    Au début je n'avais que sqlcmd -s localhost -Q "la requête" et faisait '$($_.name)' dans la requête (au niveau de cmd2). Ce qui marchait bien en ISE et invite de commande, mais retournait une erreur de nom sur SQL-Server.

    Le script tourne très bien sur PS ISE, tout aussi bien sur PS.
    MAIS, quand il tourne en job sur SQL-Server, il me dit que Get-SPDatabase n'est pas reconnu...

    Et j'avoue ne pas du tout comprendre pourquoi alors que le script tourne très bien sur un invite PS standard.

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Ce qui est normal puisque lorsque vous exécutez du powershell avec l'agent SQL c'est l'environnement powershell de SQL Server qui est chargé (SQLPS.exe).

    Votre cmdlet Get-SPDatabase n'existe pas dans le contexte SQL Server. Il faut charger le snapin correspondant au préalable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Add-PSSnapin Microsoft.SharePoint.PowerShell
    ++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 69
    Par défaut
    Ce qu'est censé faire la première ligne justement !

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Vous pouvez le vérifier en lançant une fenêtre de commande powershell depuis SQL Server management studio, lancer votre première ligne et voir si le cmdlet Get-SPDatabases fonctionne.

    ++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 69
    Par défaut
    Le terme << Add-PSSnapin >> n'est pas reconnu.


    Je vais devoir passer par un curseur en SQL on dirait.

  6. #6
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Vous pouvez faire votre foreach sur le resultat d'une commande invoke-sqlcmd qui retourne le nom des bases a backuper.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 69
    Par défaut
    Très juste.
    Vu que c'est une instance dédiée à SharePoint, c'est pas trop chiant.

    Mais si j'avais eu d'autres bases non relatives à SP je crois que je n'aurai pas pu me passer du Get-SPDatabase quitte à exécuter le script autrement qu'avec un job.

    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
    sqlcmd -s localhost -Q "
        select DATABASE_NAME   = db_name(s_mf.database_id)
        from sys.master_files s_mf
    	-- ONLINE
        where s_mf.state = 0 
    		-- Not master, msdb, tempdb or model
    		and db_name(s_mf.database_id) not in ('Master','tempdb','model','msdb')
        group by s_mf.database_id
    " | foreach {
        if ( ("$_" -match "^[A-Za-z]") -and ("$_" -notmatch "^DATABASE") ) {
            sqlcmd -s localhost -Q "
                    DECLARE @time varchar(2)
        	        DECLARE @name varchar(256)
        	        DECLARE @dbname varchar(256)
     
        	        SET @dbname = '$_'
        	        SET @time = replace(convert(varchar, getdate(), 108), ':', '.')
        	        SET @name = 'E:\Backup\H'+@time+'_'+@dbname
     
        	        BACKUP LOG @dbname
        	        TO DISK = @name
        	"
        }
    }

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

Discussions similaires

  1. WebPart pour SharePoint 2003
    Par Belfils dans le forum SharePoint
    Réponses: 0
    Dernier message: 20/02/2008, 11h43
  2. Création de webparts pour Sharepoint
    Par placebomuse dans le forum SharePoint
    Réponses: 10
    Dernier message: 15/06/2007, 16h04
  3. Réponses: 3
    Dernier message: 20/03/2007, 22h46

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