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

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01