PowerShell

MVP SharePoint 2012

Posted on

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

Posted on

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)

Posted on

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

Posted on

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

Posted on

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.

image

 

Code

Le tout en image

image

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

Posted on

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