SharePoint 2010: Console PowerShell à distance

September 14, 2010

Beaucoup d’opérations de maintenance avec SharePoint 2010 s’effectuent depuis une console PowerShell. Voici la marche à suivre pour créer une console PowerShell sur votre Poste, plutôt que d’avoir à vous connecter sur le serveur.

Etape 1 : préparation de l’environnement pour supporter l’exécution à distance.

Il ne s’agit pas ici d’une opération spécifique à SharePoint, mais à PowerShell en général. Pour autoriser les consoles à distance, il faut tout d’abord autoriser l’exécution à distance via la commande suivante (à exécuter en tant qu’administrateur) :

Enable-PSRemoting

Cette commande va vous demander confirmation et faire le nécessaire pour autoriser la connexion à distance :

  • Démarrer le service WinRM (Windows Remote Managment) et le configurer pour démarrer automatiquement
  • Créer le port d’écoute
  • Ajouter les exceptions de FireWall nécessaires

Cette première opération n’est toutefois pas suffisante. En effet, les commandes SharePoint nécessitent l’impersonification. Il faut pour cela autoriser la délégation de jetons de sécurité, tant coté client que serveur.

Exécutez coté serveur (toujours en tant qu’administrateur):

Enable-WSManCredSSP -Role Server

Puis du coté client (encore et toujours en tant qu’administrateur) :

Enable-WSManCredSSP -Role Client -DelegateComputer *.domain.com

*.domain.com signifie ici que vous pourrez déléguer vos jetons sur tous les ordinateurs du domaine.

Un petit coup de gpupdate des deux cotés et l’environnement devrait être prêt.

Vérifiez le avec les commandes suivantes :

$cred = Get-Credential

Enter-PSSession -ComputerName sharepoint1.domain.com -Credential $cred -Authentication CredSSP

Vous verrez alors les informations du serveur et non de votre poste.

Etape 2: retrouver les fonctionnalités SharePoint dans votre console distante

Lorsque vous êtes connecté, ajoutez le snappin SharePoint via la commande

Add-PSSnapin Microsoft.SharePoint.PowerShell

Éventuellement un alias vers stsadm pour les scripts anciens :

New-Alias -name stsadm -value ((get-content Env:\CommonProgramFiles) + '\Microsoft Shared\Web server extensions\14\bin\stsadm')

Pour vérifier que tout fonctionne:

Get-SPServer

et vous verrez les serveurs de votre ferme.

Etape 3: automatiser le lancement de la console

Le plus simple est alors de créer un script PowerShell. Par exemple, j’utilise le script suivant :

# Ask the user for its credentials //
$cred = Get-Credential

# Connect to the remove computer
$session = New-PSSession -ComputerName sharepoint1.domain.com -Authentication CredSSP -Credential $cred

# Add SharePoint cmdlets
Invoke-Command -Session $session -ScriptBlock {
    Add-PSSnapin Microsoft.SharePoint.PowerShell

    # Create an alias for the legacy stsadm
    New-Alias -name stsadm -value ((get-content Env:\CommonProgramFiles) + '\Microsoft Shared\Web server extensions\14\bin\stsadm')

    # set home to SharePoint 14 Root
    Set-Location ((get-content Env:\CommonProgramFiles) + '\Microsoft Shared\Web server extensions\14')
}

Enter-PSSession -Session $session

Remplacez le nom de l’ordinateur dans le script en fonction de votre environnement.

Vous pouvez étendre le script pour par exemple autoriser l’enregistrement des Credentials, mais personnellement je préfère éviter de stocker les mots de passe de serveurs, même de manière cryptée.

Un petit raccourci Windows avec la syntaxe suivante :

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit " & 'C:\Users\steve\Documents\HandNet-ConnectToRemoteSharePointShell.ps1' "

Exécutez le en tant qu’administrateur, saisissez les credentials qui vont bien et vous vous retrouvez alors connecté à distance dans une console d’admin PowerShell SharePoint!

Conclusion

Cet article vous aura permis de voir comment avoir depuis votre poste client l’accès à une console d’administration distante de SharePoint. Ici il s’agit d’une console SharePoint 2010 mais vous pouvez bien entendu appliquer le concept à tout autre application: SharePoint 2007 bien sûr (sans le snapin powershell correspondant), mais aussi Hyper-V, SCVMM, etc.

Vous pouvez également appliquer le même principe pour exécuter à demande des scripts distants, comme par exemple l’exécution d’une sauvegarde sur un serveur de développement.