SharePoint 2010 PowerShell: UID finder

En environnement SharePoint et projectServer 2010, les messages d’erreurs font presque tout le temps référence aux UID des objets et pas leur nom. Retrouver la nature de l’objet est parfois long et rébarbatif dans tous les cas.

Exemple:

Impossible de démarrer la file d’attente. Fournisseur de services partagés : ffaa66dd-8dcf-4a19-a24e-db16cd87ed67, UID du site : 79be68b6-87df-4431-9c32-bae0173c8ad0, URL : , File d’attente : ProjectQ

La traduction en Français ajoute encore un peu plus de difficulté.

Je me suis fait un script powershell qui cherche un uid ou un nom d’objet dans tout SharePoint 🙂

$id="<UID ou texte a chercher ici>"
$search=@()
$search+='Get-SPWebApplication -IncludeCentralAdministration | select Name,ID'
$search+='Get-SPManagedAccount| select Name,ID'
$search+='get-SPSiteAdministration -Limit ALL | select Name,ID'
$search+='Get-SPWebApplication -IncludeCentralAdministration | Get-SPSite -Limit All | Get-SPWeb -Limit All|Sort-Object Url|Format-List Title, Url,ID'
$search+='Get-SPSite -LIMIT ALL | select url,id'
$search+='Get-SPDatabase| select Name,ID'
$search+='Get-SPContentDatabase| select Name,ID'
$search+='Get-SPServiceApplication | select Name,ID'
$search+='Get-SPFeature | select Name,ID'
$search+='Get-SPSolution | select Name,ID'
$search+='Get-SPServiceApplication |% {$_.SiteCollection| select Name,ID}'
$search+='Get-SPTimerJob | select Name,ID'
foreach ($command in $search) 
{ 
 if ((Invoke-Expression $command) -match $id) 
 { 
 Write-Host"found $id"
 Write-Host"display it with $command" 
 } 
}

SharePoint 2010 PowerShell : renommer une Application Web

Une recherche google semble indiquer que renommer une application Web SharePoint est compliqué et passe par un backup/suppression/création/Restore.

Etant de nature un peu…Opiniatre ? j’y suis allé « au flanc » en PowerShell…Et ca marche 🙂

Les commandes:

$a=Get-SPWebApplication | where {$_.Name -match "Demo"#on vérifie que l'on a bien que l'application à modifier
$a
#On change le nom
$a.Name="[Demo] demo blah blah"
#On pousse la modification
$a.Update()

#on vérifie que le nom a bien changé
Get-SPWebApplication | where {$_.Name -match "Demo"}

Enterprise Vault PowerShell: Unable to clear backup mode on vault store

En voulant sortir Enterprise Vault du backup mode via PowerShell, j’ai eu le message d’erreur suivant:

Unable to clear backup mode on vault store…Check sthat storage service is running on computer

C’est un bug:

  • Le service est bien démarré
  • Quand on refait un Get-VaultStoreBackupMode on est bien sorti du mode backup

En fait EV est planté. Il faut quand même redémarré le storage service EV.

SharePoint 2010 PowerShell – New-SPProjectWebInstance : URI non valide : Impossible de déterminer le format de l’URI

En voulant créer une instance Web SharePoint (project) via Powershell, j’ai eu le message suivant:

New-SPProjectWebInstance : URI non valide : Impossible de déterminer le format de l'URI.

Le message d’erreur induit en erreur.
Ce n’est pas l’argument « -url » le problème, mais « -HostHeaderWebapplicationUrl ».
Je lui donnais un argument de la forme « monsite.mondomaine.com » alors qu’il lui faut un argument de la forme « http://monsite.mondomaine.com »

PowerShell: Measure-Command et Write-Output

Measure-Command permet de mesurer le temps d’exécution d’un bloc de code PowerShell, de façon simple et efficace. Cependant, cela génère une contrainte:

Measure-Command n’affiche aucun write-output à l’écran!

Il faut alors utiliser par exemple write-host, qui lui envoi le texte directement à la console, et n’est donc pas impacté. Utiliser write-host peut générer des impact:

  • Une redirection de la sortie écran vers un fichier ne fonctionnera pas ( > monlog.txt).
  • L’ordonnanceur ORSYP ne gère pas bien les sorties faites par Write-host, alors que les write-output ne posent pas de problème

Voici un script pour illustrer le sujet (ou à télécharger ici lotp_test_measure-command):

#******************************************************************************
#
#
Titre: lotp_test_measure-command.ps1
#
#
Description: test de measure-command
#
#
Prérequis: désactiver la signature des scripts PowerShell: Set-ExecutionPolicy remotesigned
#
#
Auteur: Mathieu Chateau – LOTP
#
mathieu.chateau@lotp.fr
#
Version: 0.1
#
******************************************************************************

#purge de l’écran
Clear

#Objectif du script: stocker plusieurs valeurs pour chaque ligne du tableau

Write-Output « Test 01: fait un sleep de 2s dans un measure-command« 
$temps=Measure-Command { sleep -Seconds 2}
Write-Output « temps d’exécution du test 01: $temps« 
Write-Output « ############« 

Write-Output « Test 02: fait un write-output dans un measure-command« 
$temps=Measure-Command {Write-Output « ce message est supprimé par measure-command, vous ne le verrez pas« }
Write-Output « le message n’est pas apparu mais la commande est exécutée quand même« 
Write-Output « temps d’exécution du test 02: $temps« 
Write-Output « ############« 

Write-Output « Test 03: fait un write-host dans un measure-command« 
$temps=Measure-Command {Write-host « ce message est envoyé à la console, vous le voyez même dans un measure-command« }
Write-Output « temps d’exécution du test 03: $temps« 

Powershell : tableau multidimensionnel (array de array)

J’ai dû récemment stocker des valeurs dans des tableaux (array) multidimensionnel en PowerShell. J’ai quelques peu galéré, et je me suis dit que je ne devais pas être le seul. Mes recherches d’infos via Google ne ramenaient pas grand chose, il est donc temps d’y remédier… 🙂

L’objectif est de stocker plusieurs ensembles de valeurs dans un tableau, afin de pouvoir les appeler dans une boucle for.

Ce qui m’a induit en erreur: Si on ne met pas une virgule au départ, cela ne fonctionne pas….Sauf si on met plus d’un élément lors de l’initialisation du tableau de tableau…Tout se complique quand on change et ne met plus qu’un seul élément… Patatras!

Voici un script qui explicite les différents cas, le dernier étant celui qu’il faut utiliser:

Egalement en téléchargement ici: lotp_test_array_of_array

#******************************************************************************
#
# Titre: lotp_test_array_of_array.ps1
#
# Description: test sur des array
#
# Prérequis: désactiver la signature des scripts PowerShell: Set-ExecutionPolicy remotesigned
#
# Auteur: Mathieu Chateau – LOTP
# mathieu.chateau@lotp.fr
# Version: 0.1
#******************************************************************************

#purge de l’écran
Clear

#Objectif du script: stocker plusieurs valeurs pour chaque ligne du tableau
Function afficherTableau($array)
{

for ($i=0;$i -lt $array.Length;$i++)
{
Write-Output « boucle N°: $i »
Write-Output $array[$i][0]
Write-Output $array[$i][1]
Write-Output $array[$i][2]
Write-Output « ——–« 
}

}

#Ce tableau ne fonctionne pas du tout comme prévu (il manque la virgule au début pour cela)
$tableauMauvais=(« Mathieu »,« Chateau »,« mathieu.chateau@lotp.fr »)
Write-Output « Affichage mauvais tableau »
afficherTableau $tableauMauvais

#Ce tableau fonctionne mais la construction n’est pas correcte (pas de virgule au début, mais ok car 2 éléments)
$tableauPasCorrect=(« Mathieu »,« Chateau »,« mathieu.chateau@lotp.fr »),(« Microsoft »,« Réseau »,« Sécurité »)
Write-Output « Affichage tableau qui fonctionne mais mal construit »
afficherTableau $tableauPasCorrect

#Tableau multidimensionnel construit correctement
#creation du tableau avec un seul élément (virgule avant la parenthèse)
$tableauCorrect=,(« Mathieu »,« Chateau »,« mathieu.chateau@lotp.fr »)
#Ajout d’un élément
$tableauCorrect+=,(« Microsoft »,« Réseau »,« Sécurité »)
Write-Output « Affichage tableau qui fonctionne et bien construit »
afficherTableau $tableauCorrect

Pour la coloration syntaxique dans le blog, j’ai utilisé le script PowerShell proposé ici:
http://helgeklein.com/blog/2010/01/syntax-highlighting-powershell-code-in-html-with-a-powershell-script/

PowerGUI 1.5.2 est RTM!

http://dmitrysotnikov.wordpress.com/2008/09/18/powergui-152-rtms/

Nouveautés:

  1. We added 3 new languages (Chinese, Greek, and Polish).
  2. [Admin console] The grid performance has been significantly improved so simple nodes like Process or Services take 1-2 seconds to load.
  3. [Admin console] You can now assign icons to any nodes/links/actions: in the properties dialog box simply click the Icon picture and browse to the ico file.
  4. [Admin console] Fixed a lot of the grid issues: handling of $null properties, multivalued properties, PSCustomObject properties, etc.
  5. [Admin console] Node deletes now have a confirm dialog box. ;)
  6. [Editor] Significantly improved highlighting performance for large scripts (1000-2000 lines of code).
  7. [Debugger] Fixed some compatibility issues with Microsoft’s current v2 builds.
  8. Multiple bugfixes for the issues reported by the online community.

Et bien sûr toujours en français, merci lotp ! 😉