Question [SP10 - Powershell] Générer un fichier excel

Plus d'informations
il y a 10 ans 1 semaine #17287 par MicroVal
Bonjour,

Je viens solliciter votre aide pour générer un fichier excel à partir d'un script PowerShell.

J'ai ce script (ci-dessous) qui permet de lister toute les collections de site SharePoint d'une Web Application, et les sites contenus dans ces collections de site.

Et, à partir de ce script, je souhaiterais obtenir diverses informations sur chaque site (titre du site, url, créateur, etc...) et les stocker dans un fichier excel.

Le script

[code:1]
function RecurseSiteAndDoSomething()
{
param([Microsoft.SharePoint.SPWeb]$SiteIdentity)

Write-Output \"Site: $($SiteIdentity.Url)\"

if($SiteIdentity.Webs.Count -gt 0)
{
foreach($subWeb in $SiteIdentity.Webs)
{
RecurseSiteAndDoSomething -SiteIdentity $subWeb
}
}
}

$webApp = \"URL de ma Web Application\"
$rootSite = New-Object Microsoft.SharePoint.SPSite($webApp)
$spWebApp = $rootSite.WebApplication

Write-Output \"Web Application: $webApp\"
foreach($siteColl in $spWebApp.Sites)
{
Write-Output \"Site Collection: $($siteColl.Url)\"
RecurseSiteAndDoSomething -SiteIdentity $($siteColl.RootWeb)
}
[/code:1]

J'ai ce script (ci-dessous) qui me permet de générer un fichier excel comme il me faut, mais quand je place la ligne $NewCSVObject += $site ... dans mon script précédent, cela ne fonctionne pas et j'ai des erreurs en retour.. cela vient peut être du fait de la fonction récursive ?

Script qui génère un fichier excel

[code:1]
$allSite = Get-SPWebApplication \"http://sp10dev7/\" | Get-SPSite

$NewCSVObject = @()
foreach ($web in $allSite)
{
foreach ($site in $web.allWebs)
{
$NewCSVObject += $site | Select-Object -Property Title,Url,author,RequestAccessEmail,Created,LastItemModifiedDate,SiteAdministrators
}
}

$NewCSVObject | export-csv d:\WebAnalytics\outputAnalytics.csv -noType
[/code:1]<br><br>Message édité par: MicroVal, à: 4/04/14 16:53

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 1 semaine #17289 par Laurent Dardenne
Salut,
MicroVal écrit:

cela ne fonctionne pas et j'ai des erreurs en retour..

Sans les messages d'erreur on ne peut t'aider, car on ne peut pas les deviner.

Si tes appels à Write-Output peuvent être remplacés par des appels à write-host voir write-debug, fait en sorte d’émettre l'objet sélectionné directement dans le pipeline :
[code:1]
$site | Select-Object -Property Title,Url,author,RequestAccessEmail,Created,LastItemModifiedDate,SiteAdministrators
[/code:1]
Ainsi ta fonction récursive n'utilise pas de tableau, et renverra une collection d'objet.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 1 semaine #17296 par MicroVal
Tout d'abord, merci pour ta réponse.

Ensuite, le problème c'est que si je met

[code:1]
$SiteIdentity | Select-Object -Property Title,Url,author,RequestAccessEmail,Created,LastItemModifiedDate,SiteAdministrators | export-csv d:\WebAnalytics\outputAnalytics.csv -noType
[/code:1]

Je n'aurais qu'une seule entrée dans mon fichier excel.

Voici l'erreur généré pour le script ci-dessous (j'ai rajouter les lignes qui généraient des erreurs)

www.hostingpics.net/viewer.php?id=601745Untitled.png

Le script
[code:1]
function RecurseSiteAndDoSomething()
{
param([Microsoft.SharePoint.SPWeb]$SiteIdentity)

Write-Output \&quot;Site: $($SiteIdentity.Url)\&quot;

$NewCSVObject += $SiteIdentity | Select-Object -Property Title,Url,author,RequestAccessEmail,Created,LastItemModifiedDate,SiteAdministrators

if($SiteIdentity.Webs.Count -gt 0)
{
foreach($subWeb in $SiteIdentity.Webs)
{
RecurseSiteAndDoSomething -SiteIdentity $subWeb
}
}
}

$webApp = \&quot;http://sp10dev7/\&quot;
$rootSite = New-Object Microsoft.SharePoint.SPSite($webApp)
$spWebApp = $rootSite.WebApplication

Write-Output \&quot;Web Application: $webApp\&quot;
foreach($siteColl in $spWebApp.Sites)
{
Write-Output \&quot;Site Collection: $($siteColl.Url)\&quot;
RecurseSiteAndDoSomething -SiteIdentity $($siteColl.RootWeb)
}

export-csv d:\WebAnalytics\outputAnalytics.csv -noType

[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 1 semaine #17298 par Laurent Dardenne
MicroVal écrit:

Je n'aurais qu'une seule entrée dans mon fichier excel.

As-tu essayé ?
[code:1]
Write-Host \&quot;Site: $($SiteIdentity.Url)\&quot;

Write-Output $SiteIdentity | Select-Object -Property Title,Url,author,RequestAccessEmail,Created,LastItemModifiedDate,SiteAdministrators

if($SiteIdentity.Webs.Count -gt 0)
...
[/code:1]
Et c'est un fichier csv que tu construis.
MicroVal écrit:

Voici l'erreur généré pour le script ci-dessous

Le tableau n'est pas créé, la syntaxe += cible donc un psobject. En utilisant un tableau tu risques d'avoir des pb de portée

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 1 semaine #17301 par MicroVal
Oui j'ai essayer, et effectivement je n'ai qu'une seule entrée dans mon fichier excel.

Je viens d'essayer le code tu m'as fournis, c'est niquel lorsque les informations s'affichent sur le terminal.

Le résultat sur le terminal :
www.hostingpics.net/viewer.php?id=350227Untitled.png

Mais comment dois-je m'y prendre si je veux mettre ces informations dans un fichier excel ?

Pour un fichier texte, il suffit juste de faire un Start-Transcript et Stop-Transcript c'est ça ?

Merci pour ton aide en tout cas :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 1 semaine #17302 par Laurent Dardenne
MicroVal écrit:

Mais comment dois-je m'y prendre si je veux mettre ces informations dans un fichier excel ?

Construit d'abord ta collection
[code:1]
$Resultat=RecurseSiteAndDoSomething
[/code:1]
Ensuite tu peux retraiter cette collection avec un autre cmdlet.
MicroVal écrit:

Pour un fichier texte, il suffit juste de faire un Start-Transcript et Stop-Transcript c'est ça ?

Ces cmdlets sont dédiés aux logs, à priori ils sont inutile ici.<br><br>Message édité par: Laurent Dardenne, à: 4/04/14 17:29

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.076 secondes
Propulsé par Kunena