Wednesday, May 18, 2011

Script PowerShell pour Monitoring et pré - chargement Sharepoint

Contexte :


On veut profiter d’un script de ‘warmup’ au démarrage du serveur pour
1) lister les sites crées sur le serveur et
2) tester leur accessibilité.

On va stocker le résultat dans une liste SharePoint dans la console d’admin.



Le script teste des sites SharePoint, mais pourrait tester d’autres choses, évidemment.




Il détectera automatiquement les nouveaux sites crées par les utilisateurs.

Il sera utile pour un inventaire automatique, en cas de PRA, ou tout simplement après un IISRESET journalier pour précompiler les sites.


Capture écran :




Liste :



Créer une liste standard, la colonne « title » servira pour l’url, une colonne OK ? O/N, et une colonne « Erreur » pour le code d’erreur. On peut aussi ajouter des informations fonctionnelles, comme l’administrateur à prévenir en cas de défaillance.


Si on veut une trace, simplement activer le versioning


Installation du script :

Créer une tache planifiée avec le script et le compte de ferme (ou un compte avec accès en lecture)
Le host doit avoir WSS et powershell 1.0 installé !
Plus un path vers stsadm :




#

# Code : Emmanuel ISSALY - version 1.0 - 05/05/2011

#



[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null;



function get-webpage([string]$url,[System.Net.NetworkCredential]$cred=$null)

{

$wc = new-object net.webclient

if($cred -eq $null)

{

$cred = [System.Net.CredentialCache]::DefaultCredentials;

}

$wc.credentials = $cred;

return $wc.DownloadString($url);

}



#credentials windows par défaut



$cred = [System.Net.CredentialCache]::DefaultCredentials;

#$cred = new-object System.Net.NetworkCredential("username","password","machinename")



# liste sharepoint qui va stocker les infos



$docliburl="http://vpt-hanoi-01.ds.cdcam.com:22222/Lists/SiteState";

$reportsite=new-object Microsoft.SharePoint.SPSite($docliburl);

$reportweb=$reportsite.openweb();

$reportlist=$reportweb.GetList($docliburl);



# Pour chaque AAM de type "default"



[xml]$x=stsadm -o enumzoneurls

foreach ($zone in $x.ZoneUrls.Collection) {

[xml]$sites=stsadm -o enumsites -url $zone.Default;

foreach ($site in $sites.Sites.Site) {



write-host $site.Url;



#recherche l'url dans la liste

$item = $reportlist.Items
Where { $_["Title"] -eq $site.url }



# crée la ligne si n'existe pas

if ($item -eq $null) {$item = $reportlist.Items.Add();}



$item["Title"] = $site.url;

$item["OK?"]= $True;

$item["Erreur"]="";



trap

{

$item["OK?"]= $False;

$item["Erreur"]= $error[0].exception.innerexception.message;

continue;

}



$html=get-webpage -url $site.Url -cred $cred;



$item.Update();



}

}



$reportweb.dispose()

$reportsite.dispose()

No comments: