PowerShell
MVP SharePoint 2012
Hello à tous !
C’est avec une immense joie que je vous annonce que j’ai été nommé MVP SharePoint Server.
Un grand Merci à Microsoft.
Voici mon profil sur la plateforme MVP : Nabil BABACI MVP SharePoint
Magazine Programmez – SharePoint 2010 PowerShell & Search
Hello à tous !
Ce mois-ci dans le numéro de Programmez vous retrouverez un article sur l’exploitation de la brique Search via des scripts PowerShell.
L’article est téléchargeable ici : http://www.programmez.com/magazine.php
Bonne lecture
Sharepoint 2010 – PowerShell et Search (Metadata)
Dans notre article nous allons aborder la modification de propriété d’indexation du moteur de recherche, ainsi que celle des Métadonnées gérées de SharePoint 2010 en PowerShell.
L’objectif recherché est de proposer des exemples simples, compréhensibles et de voir comment via l’utilisation de ILSPY, que certaines commandes ne sont pas si complètes que ça.
Crawling
Trois cmdlets sont principalement utilisées pour le Crawling : Get-SPEnterpriseSearchMetadataCrawledProperty, qui permet de récupérer les propriétés, Set-SPEnterpriseSearchMetadataCrawledProperty, celle-ci pour les mettre à jour et New-SPEnterpriseSearchMetadataCrawledProperty, pour la création.
Voici un exemple afin de récupérer des composants existant et de les mettre à jour avec la propriété IsMappedToContents qui permet de faire un mapping sur des métadonnées existantes, nous utilisons un fichier XML pour la récupération des éléments.
<? xml version=”1.0″ encoding=”utf-8″?>
<SearchProperties>
<ServiceName>Search Service Application</ServiceName>
<CrawledProperties>
<CrawledProperty Name=”ows_ContentType” />
</CrawledProperties>
<ExistingProperties>
<ManagedProperty Name=”ContentType”/>
</ExistingProperties>
<NewManagedProperties>
<!–Types = 1:Text, 2:Integer,3:Decimal,4:DateTime,5:YesNo,6 :Binary–>
<ManagedProperty Type=”4″ Name=”Demo”>
<Map Category=”Basic” Variant=”64″>15</Map>
</ManagedProperty>
</NewManagedProperties>
</SearchProperties>
Voici maintenant le code de Recherche :
if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null )
{
Add-PsSnapin Microsoft.SharePoint.PowerShell
}
#Fichier XML
[System.Xml.XmlDocument] $XmlDoc = new-object System.Xml.XmlDocument
$file = resolve-path(“.MonFichier.xml”)
if (!$file)
{
Write-Host “Fichier non trouvé- Opération Annulé.” -ForegroundColor red
Break
}
write-host -f Green “Traitement du fichier:” $file
$XmlDoc = [xml](Get-Content $file)
#Parse des données
$sa = $XmlDoc.SearchProperties.ServiceName
$searchapp = Get-SPEnterpriseSearchServiceApplication $sa
$CrawledPropNodeList = $XmlDoc.SearchProperties.CrawledProperties
write-host -f Yellow ” Recherche des données Crawl existantes :”
foreach ($CrawledPropNode in $CrawledPropNodeList.CrawledProperty)
{
$SPCrawlProp = $CrawledPropNode.Name
#Vérification
if($crawledproperty =Get-SPEnterpriseSearchMetadataCrawledProperty -Name $SPCrawlProp -VariantType $SPCrawlVariant -SearchApplication $searchapp -ea “silentlycontinue”)
{
write-host -f Green “Des Crawl existent: Nom :” $crawledproperty.Name “- Indexé :” $crawledproperty.IsMappedToContents
write-host “Mise à jour :”
$crawledproperty | Set-SPEnterpriseSearchMetadataCrawledProperty -IsMappedToContents $True
write-host -f Green “Nom :” $crawledproperty.Name “- Indexé :” $crawledproperty.IsMappedToContents
}
else
{
write-host -f Red “Veuillez vérifier dans le fichier XML et Sharepoint qu’ils existent”
}
}
Metadata
Concernant les Metadata ici nous utilisons deux méthodes Get-SPEnterpriseSearchMetadataManagedProperty, pour récupérer des métadonnées et Set-SPEnterpriseSearchMetadataManagedProperty, pour la mise à jour.
Concernant les attributs nous utilisons EnabledForScoping, pour définir l’indexation, FullTextQueriable, pour rendre la propriété requêtable, RespectPriority qui correspond dans votre interface utilisatrice aux phrases suivantes : « Inclure les valeurs à partir de toutes les propriétés analysées mappées » ou « Inclure les valeurs à partir d’une propriété analysée unique en fonction de l’ordre spécifié »
function ExistingMeta
{
#Gestion de propriétés pour Settings
$OthersPropertyNodeList = $XmlDoc.SearchProperties.ExistingProperties
foreach ($PropertyNode in $OthersPropertyNodeList.ManagedProperty)
{
$SharePointProp = $PropertyNode.Name
if($mp=Get-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $searchapp -Identity $SharePointProp -ea “silentlycontinue” )
{
if($mp.EnabledForScoping -eq $False)
{
$mp | Set-SPEnterpriseSearchMetadataManagedProperty -EnabledForScoping 1
}
if($mp.FullTextQueriable -eq $False)
{
$mp | Set-SPEnterpriseSearchMetadataManagedProperty -FullTextQueriable 1
}
if($mp.RespectPriority -eq $False)
{
$mp | Set-SPEnterpriseSearchMetadataManagedProperty -RespectPriority 1 -ea “silentlycontinue”
}
}
}
}
Concernant la création nous utilisons la cmdlet suivante New-SPEnterpriseSearchMetadataManagedProperty
try
{
write-host “Création :”
$mp = New-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $searchapp -Name $SharePointProp -Type $SharePointPropType -EnabledForScoping 1 -FullTextQueriable 1
$mp.HasMultipleValues = $True
$mp.Update()
}
catch [Exception]
{
write-host -f Red “Erreur de création” $_;
}
Pour associer un mapping au Metadata il vous faut exécuter le code suivant :
$PropertyNodeList = $XmlDoc.SearchProperties.NewManagedProperties
foreach ($PropertyNode in $PropertyNodeList.ManagedProperty)
{
$SharePointProp = $PropertyNode.Name
$SharePointPropType = $PropertyNode.Type
$SharePointPropMapList = $PropertyNode.Map
$SharePointPropMultiple = $PropertyNode.Multiple
foreach ($SharePointPropMap in $SharePointPropMapList)
{
$SPMapCat = $SharePointPropMap.Category
$SPMapName = $SharePointPropMap.InnerText
$SPVariant = $SharePointPropMap.Variant
$cat = Get-SPEnterpriseSearchMetadataCategory –SearchApplication $searchapp –Identity $SPMapCat
$prop = Get-SPEnterpriseSearchMetadataCrawledProperty -SearchApplication $searchapp -Category $cat -Name $SPMapName -VariantType $SPVariant
write-host -f Cyan $cat.Name “-” $prop.Name
$mp=Get-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $searchapp -Identity $SharePointProp -ea “silentlycontinue”
try
{
write-host “Création de la donnée finale”
$property = New-SPEnterpriseSearchMetadataMapping -SearchApplication $searchapp -CrawledProperty $prop -ManagedProperty $mp
}
catch [Exception]
{
write-host -f Red “Erreur de création de la donnée finale” $_;
}
}
}
ILSPY
Deux propriétés ne sont pas accessibles au niveau des options des cmdlets, celles qui apparaissent dans la section suivante de l’interface utilisatrice des métadonnées : « Optimiser le stockage des propriétés gérées »
Pour mettre à jour les propriétés nous utilisons ILSPY afin de voir le code appelé dans la librairie suivante : Microsoft.Office.Server.Search.dll puis nous cherchons la propriété suivante : Microsoft.Office.Server.Search.Internal.UI.ManagedPropertyPage, la méthode correspondante à OkButtonClicked(object sender, EventArgs e). Dans cette méthode nous observons que deux propriétés n’existent pas dans les attributs des cmdlets, QueryPropertyBlob = true; et PutInPropertyBlob = true;
Il ne vous reste plus qu’à les appeler dans votre code PowerShell de la façon suivante :
$mp. QueryPropertyBlob = $True
$mp. PutInPropertyBlob = $True
$mp.Update()
Notons toutefois que ces propriétés sont référencées dans la MSDN et sont pleinement accessible en utilisant les API de SharePoint. En conclusion nous avons la possibilité grâce à PowerShell d’automatiser certains processus de création et de modification des composants de recherche.
IT Pro Magazine – SharePoint 2010 – PowerShell et Timer Job
Hello à tous, dans le numéro du mois de mai de IT PRO, vous pouvez retrouver un article sur l’utilisation de PowerShell et des Timer Job avec SharePoint 2010. Bonne lecture !
Lien : www.itpro.fr
Sharepoint 2010 : PowerShell & UserProfile
Un cas pratique souvent aborder est le provisionning d’éléments dans les UserProfiles de SharePoint à partir d’un fichier CSV.
Ici nous allons montrer de quel façon nous pouvons utiliser un fichier CSV, le parser et injecter le tout dans les UserProfiles properties.
Csv
Nous partons du principe que les utilisateurs existent, voici le fichier de test dont l’encoding se doit d’être en ISO-8859-1. Puis il sera converti en UTF-8 via PowerShell.
Code
Le tout en image
Conclusion un script assez utile qui vous permettra de profiter facilement de la fonctionnalité.
PS: Une erreur s’est glissée, les attributs ForegrounColor sont avec un seul tiret.
TechDays 2012 – Ask The Expert
C’est avec une grande joie que je serai présent aux TechDays 2012 en tant qu’ATE (Ask-The-Expert) dans le pôle Efficacité Collective et Individuelle .
De plus je serai aussi sur le stand Communautaire ExiaMS (http://www.exiams.fr/).
@bientôt