Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Blog Technique de Romelard Fabrice

Les dernières Actualités de Romelard Fabrice (Alias fabrice69 ou F___) principalement autour des technologies Microsoft

Actualités

  • Toutes les actualités et informations sur les technologies Microsoft principalement autour de .NET et SQL Server

Archives

PowerShell : Script un peu plus avancé pour le chargement des informations d’un ensemble de serveurs dans une liste SharePoint

Après l’article précédent posté sur le site ASP-PHP, voila un second exemple de script pour lister du contenu d’une liste SharePoint (en m’aidant des posts suivant):

# Function:          GetSharePointItemList
# Description:      Get all value for one given Column in a specific list

function GetSharePointItemList([string]$SiteURL, [string]$ListName,
                [string]$ColumnName)
{
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
    $site = new-object Microsoft.SharePoint.SPSite($SiteURL)
    Write-Host "SiteURL", $SiteURL

    $web = $site.openweb()

    $spList = $web.Lists[$ListName]
    Write-Host "ListName", $ListName

    foreach ($MyItem in $spList.Items)
    {
        #Write-Host "Value [" + $ColumnName + "]: ", $MyItem[$ColumnName]

        #Add your code here
    }
}

Une fois cette première fonction faite, pourquoi ne pas aller un peu plus loin ?

Ainsi, un besoin classique est d’utiliser SharePoint pour sa simplicité et y ajouter la liste des serveurs de son réseau. On ajoute donc quelques colonnes donc le nom, l’IP, …

Karine Bosh nous explique alors comment mettre à jour les données de la machine courante dans la liste, le fait est que tous les serveurs qui sont dans la liste n’ont pas forcément ni SharePoint (donc pas possible de charger les objets) ni PowerShell (donc impossible d’exécuter le script).

La solution est d’utiliser une commande DOS standard disponible sur tous les systèmes Windows (on pourrait très bien utiliser WMI d’ailleurs mais ca oblige à gérer le résultat) :

  • SYSTEMINFO

On va donc depuis notre serveur SharePoint ayant PowerShell, utiliser cette commande pour obtenir toutes les informations de chaque serveur dans un fichier texte que l’on ajoute dans les pièces jointes de chaque item (donc chaque ligne de la liste, une ligne étant un serveur).

Voila donc le script résultat (on peut au passage voir comment ajouter un fichier en Attachment d’un item SharePoint avec powerShell)

# Function:          GetAllSystemInfo
# Description:      Get all Information by  DOS SYSTEMINFO COMMAND and Upload it in the Item attachment
function GetAllSystemInfo([object]$MyItem, [string]$ServerName,
                [string]$UserName, [string]$Password)
{
#    Write-Host "ServerName", $ServerName
    $Filename = "SystemInfo-"+ $ServerName +"-"+ (get-date).tostring("yyyy-MM-dd-HH-mm") + ".txt"

    $Mycommand = "systeminfo /S " + $ServerName + " /U " + $UserName + " /P "+ $Password
    $MyResult = cmd /c $Mycommand|Out-file C:\MyTempResultForSystemInfo.txt

    $MySPAttachmentCollection = $MyItem.Attachments
    [byte[]]$AttachmentFile = Get-Content "C:\MyTempResultForSystemInfo.txt" -Encoding byte

    $MySPAttachmentCollection.Add($Filename, $AttachmentFile)
    $MyItem.Update()

    del C:\MyTempResultForSystemInfo.txt
}

# Function:          GetSharePointItemList
# Description:      Get all value for one given Column in a specific list
function GetSharePointItemList([string]$SiteURL, [string]$ListName,
                [string]$ColumnName, [string]$UserName, [string]$Password)
{
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
    $site = new-object Microsoft.SharePoint.SPSite($SiteURL)
    Write-Host "SiteURL", $SiteURL

    $web = $site.openweb()

    $spList = $web.Lists[$ListName]
    Write-Host "ListName", $ListName

    foreach ($MyItem in $spList.Items)
    {
        #Write-Host "Value [" + $ColumnName + "]: ", $MyItem[$ColumnName]

        #Add your code here
        GetAllSystemInfo $MyItem $MyItem[$ColumnName] $UserName $Password

    }
}

On pourra donc simplement ajouter en fin de fichier la ligne pour appeler correctement la fonction sous le format :

GetSharePointItemList http://MonServerSharePoint/MonSite "Ma Liste" "LeNomDeLaColonne" "DOMAIN\AdminUser" "Password"

Vous retrouverez donc dans votre liste pour un Item Donné un résultat semblable à la capture suivante (avec un fichier attaché par exécution du script) :

Vous n’aurez donc plus qu’à exécuter ce script au besoin pour avoir toutes les configurations de chaque serveur à jour. Cela fonctionne aussi parfaitement pour des postes de travail (cas de petites structures).

UPDATE:

On peut aussi effectuer un test pour la taille du fichier résultat, en effet, si on a pas les droits sur la machine cible (ou si celle-ci n'existe plus), on obtiendra toujours un fichier mais qui sera vide. Or il est ridicule de charger des fichiers vides dans les attachments.

On doit donc faire un test sur la taille de ce fichier (avec la commande -gt (ou greater than) sur la valeur des 4 Octets). Cela donnera le bloc suivant :

 $MyResult = cmd /c $Mycommand|Out-file C:\MyTempResultForSystemInfo.txt

 $b = Get-ChildItem C:\MyTempResultForSystemInfo.txt
 
 if($b.length -gt 4)
 {
  Write-Host "Servername[" + $ServerName + "] Size :", $b.length
 
  $MySPAttachmentCollection = $MyItem.Attachments
  [byte[]]$AttachmentFile = Get-Content "C:\MyTempResultForSystemInfo.txt" -Encoding byte

  $MySPAttachmentCollection.Add($Filename, $AttachmentFile)
  $MyItem.Update()
 }

 del C:\MyTempResultForSystemInfo.txt

Bonne lecture.

Romelard Fabrice [MVP]

Technorati Tags: ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: jeudi 5 juin 2008 22:03 par ROMELARD Fabrice

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le il y a 9 heures et 42 minutes

- Perspective 3.0 pour Silverlight 5.0 par Perspective le il y a 11 heures et 3 minutes

- TechDays Paris 2012 : Top 10 des Best Practices pour SQL Server par Blog Technique de Romelard Fabrice le il y a 16 heures et 39 minutes

- TechDays Paris 2012 : Kinect + Office 365 un bon geste pour votre SI par Blog Technique de Romelard Fabrice le il y a 17 heures et 2 minutes

- TechDays Paris 2012 : Pleinière du premier jour par Blog Technique de Romelard Fabrice le il y a 17 heures et 18 minutes

- [SharePoint 2010] Erreur d’analyse de contenu “L’élément SharePoint en cours d’analyse a renvoyé une erreur lors de la demande de données auprès du se... par Julien Chable le il y a 21 heures et 51 minutes

- [TechDays2012] Oui j’y serai! par Blog de Jérémy Jeanson le 02-06-2012, 22:13

- TFS Integration Tools – Suivi des synchronisations avec Reporting Services par Vivien Fabing le 02-05-2012, 17:46

- CSS Content State Selectors (Personnal Draft) par Le blog de FremyCompany le 02-04-2012, 15:38

- MBA : Pourquoi faire et comment le choisir ? par Blog Technique de Romelard Fabrice le 02-03-2012, 14:22