2010-07-01 5 views
4

Le script suivant recrache toutes les propriétés de UserProfile pour les utilisateurs sur Sharepoint 2007:Accès aux Sharepoint Propriétés UserProfile avec le script Powershell

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server") 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.UserProfiles") 
# Function:   Get-UserProfiles 
# Description:  return a UserProfileManager object containing all user profiles 
# Parameters:  SSPName   SSPName  
# 
Function global:Get-UserProfiles($SSPName) 
{ 
    $ServerContext = [Microsoft.Office.Server.ServerContext]::GetContext($SSPName); 
    $UPManager = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($ServerContext); 
    return $UPManager.GetEnumerator(); 
} 

$profiles = Get-UserProfiles("SharedServices"); 
$profiles | ForEach-Object { $_.GetEnumerator();} 

Cependant, ce que je veux faire est d'être en mesure de retourner une table ou un fichier csv de valeurs spécifiques dans le profil, par exemple Nom d'utilisateur, WorkEmail, WorkPhone. J'ai essayé d'acheminer la sortie vers |ft Username, WorkEmail, Workphone et | select Username, WorkEmail, WorkPhone mais cela renvoie simplement des espaces vides. Je me sens comme si je suis si proche. Je ne veux pas remplacer l'appel $_.GetEnumerator() avec beaucoup d'appels $_.Item("property") et il ne se sent pas comme je devrais le faire. Des idées?

+0

Un vote négatif? Sans explication? La question est claire et fournit même quelques informations utiles. Pourquoi downvote-t-il? Y at-il quelque chose qui ne va pas avec la question? – dunxd

+0

+1 pour annuler la redirection – Ryan

+0

Ajoute la sortie (avant de tenter Fort-Table ou Select) à Get-Member et vérifie si vous obtenez des objets avec les propriétés que vous attendez, par exemple. 'Profils $ | get-member' et '$ profils | % {$ _. GetEnumerator()} | get-member'. –

Répondre

3

J'ai également développé le code afin qu'il accepte maintenant une liste de propriétés délimitées par des virgules et les écrit dans un fichier délimité.

# Outputs a delimited file with specified user profile properties for each user in Sharepoint 

# Create array of desired properties 
$arProperties = 'UserName','FirstName','LastName','Title','WorkEmail','WorkPhone','Manager','AlternateContact','RoleDescription','PictureURL'; 
# Specify output file 
$outfile = 'UserProfiles.csv'; 
#Specify delimiter character (i.e. not one that might appear in your user profile data) 
$delim = '^'; 
# Specify Shared Service Provider that contains the user profiles. 
$SSP = "SharedServices"; 

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server") 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.UserProfiles") 

# Function:   Get-UserProfiles 
# Description:  return a UserProfileManager object containing all user profiles 
# Parameters:  SSPName   SSPName  
# 
Function global:Get-UserProfiles($SSPName) 
{ 
$ServerContext = [Microsoft.Office.Server.ServerContext]::GetContext($SSPName); 
$UPManager = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($ServerContext); 
return $UPManager.GetEnumerator(); 
} 
$profiles = Get-UserProfiles($SSP); 

#Initialise Output file with headings 
$header = [string]::join($delim,$arProperties); 
Write-Output $header | Out-File $outfile 

#Output the specified properties for each 
$profiles | ForEach-Object { 
foreach($p in $arProperties){ 
    # Get the property name and add it to a new array, which will be used to construct the result string 
    $arProfileProps += $_.Item($p); 
} 
$results = [string]::join($delim,$arProfileProps); 
# Get rid of any newlines that may be in there. 
$CleanResults = $results.Replace("`n",''); 
Write-Output $CleanResults 
Remove-Variable -Name arProfileProps 
} | Out-File -Append $outfile 

Cela me rapproche un peu plus. Je voudrais vraiment vraiment un script qui itère à travers toutes les propriétés du profil et les met dans un fichier CSV ou XML plus gracieusement. Cela va faire pour le moment.

Questions connexes