none
[SharePoint 2010] - $Variable.SiteAdministrators exporter en CSV RRS feed

  • Question

  • Bonjour,

    J'ai besoin de récupérer le nom des administrateurs de plusieurs sites SharePoint, et de les stocker dans un fichier Excel.

    J'ai d'abord fais un test d'affichage sur le terminal Powershell avec ce script :

    # Ajout de la Web Application
    $WebApp = "http://maWebApp"
    $spWebApp = $rootSite.WebApplication
    # Navigue à travers toute les collections de sites
    foreach ($siteCol in $spWebApp.Sites)
    {
    # Récupère tous les sites d'une Collection de Sites
    $allSite = Get-SPSite $siteCol | Get-SPWeb
    # Navigue à travers tous les sites de la collection de site
    foreach($web in $allSite)
    {
    write-host $web.SiteAdministrators
    }
    }


    Le résultat sur le terminal PowerShell est parfait, j'obtiens bien les noms de administrateurs de chaque site.

    Mon problème arrive lorsque je veux exporter ces informations dans un fichier CSV (pour cela j'utilise un tout autre code)
    En effet, dans mon fichier CSV, au niveau de la colonne que j'ai appelé "Administrateurs", toutes les cases sont remplies avec "Microsoft.SharePoint.SPUserCollection" ou des "System.Object[]" (quand je select-objet -property UserLogin) au lieu des noms vu sur le terminal PowerShell.

    Code utilisé :

    $row.SiteAdministrator = $web.SiteAdministrators | select-object -property userlogin    
    $row.AdminEmail = $web.SiteAdministrators | select-object -property Email

    Et après j'exporte tout dans un fichier CSV.

    Ps : je ne vous ai pas mis le code entièrement car il est assez long, mais si vous le voulez, je peux le mettre dans un prochain post :)




    • Modifié MicroVal mardi 8 avril 2014 14:54
    mardi 8 avril 2014 14:50

Réponses

  • Bonjour, 

    Tu dois convertir l'Array renvoyé par le code : 

    $web.SiteAdministrators | select-object -property userlogin    

    en format string avant de l'ajouter dans ta row.

    Par exemple : 

    $array = $web.SiteAdministrators | select-object -property userlogin
    $string = $array.UserLogin -join ' - '
    $row.SiteAdministrator   = $string

    Cordialement, 


    Julian GILBERT

    • Proposé comme réponse Julian gilbert mercredi 9 avril 2014 11:09
    • Marqué comme réponse MicroVal mercredi 9 avril 2014 16:10
    mardi 8 avril 2014 18:57

Toutes les réponses

  • Le code entier (désolé, l'insertion de code est vraiment pas top...) :

    $tabName = "AuditLog" 
    #Create Table object
    $table = New-Object system.Data.DataTable “$tabName”
    #Define Columns
    $col1 = New-Object system.Data.DataColumn SiteUrl,([string])
    $col2 = New-Object system.Data.DataColumn SiteID,([string])
    $col3 = New-Object system.Data.DataColumn ItemName,([string])
    $col4 = New-Object system.Data.DataColumn ItemType,([string])
    $col5 = New-Object system.Data.DataColumn UserID,([string])
    $col6 = New-Object system.Data.DataColumn UserName,([string])
    $col7 = New-Object system.Data.DataColumn Date,([DateTime])
    $col8 = New-Object system.Data.DataColumn Event,([string])
    $col9 = New-Object system.Data.DataColumn Description,([string])
    $col10 = New-Object system.Data.DataColumn EventSource,([string])
    $col11 = New-Object system.Data.DataColumn SourceName,([string])
    $col12 = New-Object system.Data.DataColumn EventData,([string])
    $col13 = New-Object system.Data.DataColumn SiteAdministrator,([string])
    $col14 = New-Object system.Data.DataColumn AdminEmail,([string])
    #Add the Columns
    $table.columns.add($col1)
    $table.columns.add($col2)
    $table.columns.add($col3)
    $table.columns.add($col4)
    $table.columns.add($col5)
    $table.columns.add($col6)
    $table.columns.add($col7)
    $table.columns.add($col8)
    $table.columns.add($col9)
    $table.columns.add($col10)
    $table.columns.add($col11)
    $table.columns.add($col12)
    $table.columns.add($col13)
    $table.columns.add($col14)
    #=======================================================
    #=======================================================
    #Add Web Application
    $WebApp = "http://MaWebApp/"
    $rootSite = New-Object Microsoft.SharePoint.SPSite($WebApp)
    $spWebApp = $rootSite.WebApplication 
    $wssQuery = New-Object -TypeName Microsoft.SharePoint.SPAuditQuery($WebApp)
    # Navigue à travers toute les collections de sites
    foreach ($siteCol in $spWebApp.Sites)
    {
    	# Récupère tous les sites d'une Collection de Sites
    	$allSite = Get-SPSite $siteCol | Get-SPWeb
    	$site = Get-SPSite -Identity $siteCol
    	
    	# Récupération des données de chaque site d'une Collection de Sites
    	foreach($web in $allSite)
    	{
    		
    		$auditCol = $web.Audit.GetEntries($wssQuery)
    		$root = $site.RootWeb
    		for ($i=0; $i -le ($auditCol.Count)-1 ; $i++)
    		{     
    			#Get the Entry Item from the Collection     
    			$entry = $auditCol.item($i)          
    	
    			#Create a row     
    			$row = $table.NewRow()
    			
    			#find the Current UserName             
    			foreach($User in $root.SiteUsers)           
    			{     		
    				if($entry.UserId -eq $User.Id)                
    				{                     
    					$UserName = $User.UserLogin                
    				}           
    			}
    			
    			#find the Item Name           
    			foreach($List in $web.Lists)           
    			{                
    				if($entry.ItemId -eq $List.Id)                
    				{                     
    					$ItemName = $List.Title                
    				}          
    			} 
    			
    			#Define Description for the Event Property     
    			switch ($entry.Event)     
    			{            
    				AuditMaskChange{$eventName = "The audit flags are changed for the audited object."}
    				ChildDelete {$eventName = "A child of the audited object is deleted."}           
    				ChildMove {$eventName = "A child of the audited object is moved."}           
    				CheckIn {$eventName = " A document is checked in."}           
    				'Copy' {$eventName = "The audited item is copied."}           
    				Delete {$eventName = "The audited object is deleted."}           
    				EventsDeleted {$eventName = "Some audit entries are deleted from SharePoint database."}
    				'Move' {$eventName = "The audited object is moved."}           
    				Search {$eventName = "The audited object is searched."}           
    				SecGroupCreate {$eventName = "A group is created for the site collection. (This action also generates an Update event.See below.)"}           
    				SecGroupDelete {$eventName = "A group on the site collection is deleted."}           
    				SecGroupMemberAdd {$eventName = "A user is added to a group."}           
    				SecGroupMemberDelete {$eventName = "A user is removed from a group."}           
    				SecRoleBindBreakInherit {$eventName = "A subsite's inheritance of permission level definitions (that is, role definitions) is severed."}           
    				SecRoleBindInherit {$eventName = "A subsite is set to inherit permission level definitions (that is, role definitions) from its parent."}           
    				SecRoleBindUpdate {$eventName = "The permissions of a user or group for the audited object are changed."}           
    				SecRoleDefCreate {$eventName = "A new permission level (a combination of permissions that are given to people holding a particular role for the site collection) is created."}           
    				SecRoleDefDelete {$eventName = "A permission level (a combination of permissions that are given to people holding a particular role for the site collection) is deleted."}           
    				SecRoleDefModify {$eventName = "A permission level (a combination of permissions that are given to people holding a particular role for the site collection) is modified."}           
    				Update {$eventName = "An existing object is updated."}           
    				CheckOut {$eventName = " A document is checked Out."}           
    				View {$eventName = "Viewing of the object by a user."}           
    				ProfileChange {$eventName = "Change in a profile that is associated with the object."}           
    				SchemaChange {$eventName = "Change in the schema of the object."}           
    				Undelete {$eventName = "Restoration of an object from the Recycle Bin."}           
    				Workflow {$eventName = "Access of the object as part of a workflow."}           
    				FileFragmentWrite {$eventName = "A File Fragment has been written for the file."}           
    				Custom {$eventName = "Custom action or event."}        
    				default {$eventName = "The Event could not be determined."}	
    			}
    			
    			#Enter data in the row     
    			$row.SiteUrl = $web.Url      
    			$row.SiteID = $entry.SiteID     
    			$row.ItemName = $ItemName     
    			$row.ItemType = $entry.ItemType     
    			$row.UserID = $entry.UserID     
    			$row.UserName = $UserName     
    			$row.Date = $entry.Occurred     
    			$row.Event = $entry.Event     
    			$row.Description = $eventName     
    			$row.EventSource = $entry.EventSource     
    			$row.SourceName = $entry.SourceName     
    			$row.EventData = $entry.EventData     
    			$row.SiteAdministrator = $web.SiteAdministrators | select-object -property userlogin    
    			$row.AdminEmail = $web.SiteAdministrators | select-object -property Email
    			
    			#Add the row to the table     
    			$table.Rows.Add($row)
    		}
    	}
    }
    #=======================================================
    #=======================================================
     #Display the table (Optional)     
     #$table | format-table -AutoSize 
    $date = get-date -format "d-M-yyyy"
    $sDtae = [string]$date
    $FileName = "AuditLogReport_For_" + $sDtae
    #Export the CSV File to Folder Destination
    $tabCsv = $table | export-csv D:\repDest.csv -noType


    • Modifié MicroVal mardi 8 avril 2014 14:57
    mardi 8 avril 2014 14:57
  • Bonjour, 

    Tu dois convertir l'Array renvoyé par le code : 

    $web.SiteAdministrators | select-object -property userlogin    

    en format string avant de l'ajouter dans ta row.

    Par exemple : 

    $array = $web.SiteAdministrators | select-object -property userlogin
    $string = $array.UserLogin -join ' - '
    $row.SiteAdministrator   = $string

    Cordialement, 


    Julian GILBERT

    • Proposé comme réponse Julian gilbert mercredi 9 avril 2014 11:09
    • Marqué comme réponse MicroVal mercredi 9 avril 2014 16:10
    mardi 8 avril 2014 18:57
  • Bonjour,

    Merci c'est niquel, ça fonctionne :)

    Par contre, à quoi sert l'ajout de " -join '-' " ?

    mercredi 9 avril 2014 09:42
  • Bonjour, 

    Le join permet de concaténer les administrateurs avec un séparateur (dans l'exemple le séparateur est - ).

    Cordialement,  


    Julian GILBERT

    mercredi 9 avril 2014 11:12
  • D'accord, merci pour ton aide
    mercredi 9 avril 2014 16:10