Nous voyons de plus en plus que PowerShell permet de créer des scripts très puissant et particulièrement pour la gestion de fermes SharePoint.
Une fois que l'on a compris cela, on en vient à développer différentes fonctions pour cette gestion. C'est dans ce cadre que j'ai proposé certaines sources ici même.
Je vais donc poster tous ces scripts sur le site ASP-PHP dans la rubrique Bouts de Code. Vous retrouverez donc les scripts d'Export et Import de liste que j'ai fait suite à un de mes articles.
Je vous invite à consulter cette liste de fonctions (qui devrait certainement grossir) :
Si vous en avez que vous souhaitez partager, n'hésitez surtout pas à le faire.
Romelard Fabrice [MVP]
Ce week End (05 Juillet 2008) a eu lieu la 9ème Edition de la SENSATION WHITE à L'ARENA d'AMSTERDAM. Ce fut vraiment magnifique avec un theme basé sur l'eau et la mer.
Vous pouvez retrouver quelques photos sur mon Live Spaces :
J'ai aussi pris quelques vidéos avec mon téléphone que vous pouvez retrouver sur YouTube :
Avec les vidéos du MEGAMIX :
De plus BNN a créé une vidéo de plus de 3 Heures avec différents set de DJ, des interviewes et des BackStages, A voir donc absolument :
Le site officiel a été totalement refondu pour cette occasion et vous pouvez retrouver toutes les informations pour l'ensemble des étapes de la tournée (et oui, c'est devenu en quelques années un parcours mondial de dates autour de la musique électronique) :
Vous trouverez des photos, des vidéos, des backstages (comme le montage de l'arbre de l'an dernier), bref que du bon voir du très bon :
Excellent event et vivement la 10ème Edition
Romelard Fabrice [MVP]
Pour fêter le renouvellement de mon titre MVP, voila le premier article avec le titre MVP SharePoint.
Cet article est à rapprocher aussi des messages sur de mouvement de contenu comme par exemple celui de Sébastien PICAMELOT :
En effet, les fermes SharePoint en production commencent à avoir plus la plupart plus d'une année d'existance. Il est donc maintenant souvent venu le temps des restructurations de sites et d'organisation :
- Changement de hiérarchie des sites
- Déplacement de collections
- Modification d'URL
- Mouvement dans l'organigramme (pouvant entrainer des changement dans les sites collaboratif)
- Scission ou Fusion de contenu
- ...
Ainsi, le cas classique est donc le déplacement de contenu. Nous verrons donc dans ce nouvel article comment utiliser les commandes STSADM de base pour déplacer un sous-site SharePoint dans une collection. Cet article est comme toujours disponible sur le site ASP-PHP :
Nous verrons sans doute dans un futur proche comment effectuer un export de contenu en PowerShell.
Romelard Fabrice [MVP]
Après avoir présenté différents outils possibles pour le développement de scripts PowerShell, je suis porté sur PowerGUI et surtout sur son éditeur (Script Editor) pour les vrais développements.
Ainsi, il est effectivement capable d'afficher la sortie d'une exécution avec le debuggeur (très pratique), mais aussi l'auto-completion, ceci n'a rien de très compliqué pour les commandes standards du language. Mais la ou c'est beaucoup plus fort, c'est qu'il peut faire la complétion sur les objets .NET chargés dans le script.
Ainsi dans le cas de mon script, ou je veux setter une variable avec une valeur d'un ENUM (SPDeploymentObjectType.List)
Il suffit donc en PowerShell de taper :
$exportObject.Type = [Microsoft.SharePoint.Deployment.SPDeploymentObjectType]::List

On peut donc réellement développer des scripts très puissants avec cet outil et surtout avec ce langage.
Je prépare justement un script pour compléter mon dernier article sur les Import-Export.
Romelard Fabrice [MVP]
Pour tous ceux qui travaillent avec PowerShell, il est un fait clair :
- Il n'existe pas encore d'outil réel de développement de script (comme VS.NET pour .NET)
On peut en revanche trouver quelques solutions pratiques pour ceux qui trouvent notepad impossible à utiliser dans ce contexte :
- Tous les éditeurs de texte classiques
- Des éditeurs spécifiques
- PowerShell Analyzer (Intéressant pour ceux qui ne font que du PowerShell, beaucoup de points pratiques comme la complétion, l'aide, les bibliothèques de CMDLets, ...)
- PowerGUI (Outil gratuit fourni par QUEST)
- Il est plutôt destiné a des administrateurs ne souhaitant pas réellement développer de script, mais plutôt utiliser des bibliothèques existantes

- Notepad for PowerShell ou PowerGUI Script Editor (Inclu dans PowerGUI) qui propose des fonctionnalités avancées comme l'auto-complétion

Attention : Il faut noter que pour installer certaines bibliothèques de scripts (Network, AD, ...), il vous faut installer des composants additionels de QUEST sur la machine comme l'explique le message d'erreur :

Un point intéressant est le moteur de débugging qui évite donc d'ouvrir plusieurs fenêtres (celle de l'éditeur du script et celle de la commande PS).
- PrimalScript (outil plutôt destiné aux administrateurs devant créer des scripts sous différents languages dont PowerShell)
- ...
- Visual Studio .NET
Pour ma part, je suis adepte de NotePad ++, qui est très léger (moins de 2 MO), gratuit et qui peut directement être copié sur les serveur sans nécessiter d'installation.
Il est en possible nativement d'utiliser le modèle de language Shell (très proche du PowerShell) pour ses scripts, mais le mieux est d'ajouter un User Language comme nous le propose Jon Galloway sur son Blog :
Il a donc fournit un fichier XML sur le site du Bugtracking de NotePad++ :
Il suffit alors de télécharger ce fichier, le renommer en "userDefineLang.xml" et le placer dans le même répertoire que l'exécutable de Notepad++.
Vous pouvez alors ouvrir vos script PS1 dans NotePad++ et il seront directement associés à cette définition :

Donc chacun peut choisir son outil préféré, mais il commence à y avoir du choix.
Romelard Fabrice [MVP]
Je profite de ce message pour vous annoncer le renouvellement de mon titre MVP pour la sixième année consécutive. Ma première nomination a été pour l'activité ASP/ASP.NET en Juillet 2003.
J'ai par la suite changé de technologie en 2006 pour l'activité SQL Server pour maintenant devenir MVP sur la technologie SharePoint Server (spécialisation dans l'architecture).
On peut donc simplifier avec le résumé suivant :
Cela n'arretera pas les articles à venir (sur ASP-PHP ou pas) et les conférences à jouer (Club SharePoint, TechDays France, Techdays Genève, ...).
Bref que du plaisir en ce début d'été.
Romelard Fabrice [MVP]
Après la présentation des nouveautés autour du développement avec notre lecteur multimédia préféré :
Il est intéressant de voir comment l'outil de développement s'intègre dans Visual Studio 2008(quelque soit la version Express ou professionnelle). Il faut donc commencer par télécharger le fichier d'installation sur le site de Microsoft :
Il va donc après installation vous ajouter tous les composants nécessaires pour le développement en XNA :

On peut donc alors créer de nouveaux projets (uniquement en C#) pour XNA :
- Windows Game (Jeu pouvant être exécuté sous votre OS directement)
- Zune Games (Jeu pour votre lecteur multimédia)

Mais avant de vous lancer dans le développement, il est préférable de lancer le gestionnaire d'appareils, vous le trouverez en ajoutant la toolbar :
- XNA Game Studio Device Management 2.0
Tout est expliqué dans le message de Tess :
On peut alors référencer notre ZUNE qui doit être connecté à la machine de développement et tester de créer un nouveau jeu (nouvelle solution) ou de tester une solution existante parmis celles fournies sur le site de XNA CREATOR :
Je vous invite aussi vraiment à lire cette fameuse vidéo de 5 minutes de notre ami Eric Mitelette (afin de comprendre les concepts de base du développement de jeux et de ce qu'est XNA) :
Ainsi qu'un article de la MSDN (attention, le projet est sous VS 2005, donc non compatible VS 2008) :
Bref, de bonnes heures de développement et de test en perspective.
Romelard Fabrice [MVP]
Dans le cadre de la gestion de fermes SharePoint, on rencontre très souvent le cas d'installation de composants qui sont par la suite supprimés.
Un cas particulier peut devenir problématique :
En effet, une WebPart est comme tout composant SharePoint une Feature qui peut donc être déployée par une solution WSP. Ainsi, une fois déployé, ce composant peut être activé par tout responsable de site afin de voir aparaître cette WebPart dans le catalogue.
Que se passe-t'il donc lorsque l'on supprime cette solution alors que les responsables de site ont activé ce composant ?
- La WebPart apparaît encore dans le catalogue et provoquera une erreur lors de la tentative de mise en place sur une page
Philippe Sentenac nous a montré comment éviter ceci depuis le code de déploiement (Evenement d'activation et de désactivation de la feature) :
Mais lorsque ceci n'a pas été prévu, on se retrouve avec une liste de WebPart présente dans le catalogue ne représentant plus du tout la réalité.
La solution peut être de passer par PowerShell.
Nous pouvons partir d'un script de listing des WebParts (similaire à celui fournit précédement) comme suit :
| function GetSharePointItemList([string]$SiteURL, [string]$ListName, [string]$ColumnName) { [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null $site = new-object Microsoft.SharePoint.SPSite($SiteURL) Write-Host "SiteURL", $SiteURL $web = $site.openweb() $spList = $web.Lists[$ListName] Write-Host "ListName", $ListName foreach ($MyItem in $spList.Items) { Write-Host "Value [" + $ColumnName + "]: ", $MyItem[$ColumnName] #Add your code here } } GetSharePointItemList "http://MaWebAppSharePoint/" "Web Part Gallery" "Title" |
On obtiendra un résultat similaire à celui-ci :
PS E:\TOOLS\PowerShellScripts> .\ShowDataFromSharePoint.ps1 SiteURL http://SiteSharePoint/ ListName Web Part Gallery Value [ + Title + ]: Content Editor Web Part Value [ + Title + ]: Page Viewer Web Part Value [ + Title + ]: Image Web Part Value [ + Title + ]: Site Users Value [ + Title + ]: Form Web Part Value [ + Title + ]: Relevant Documents Value [ + Title + ]: User Tasks Value [ + Title + ]: XML Web Part PS E:\TOOLS\PowerShellScripts> |
On peut donc imaginer de fournir le nom de la WebPart à supprimer ainsi que la Web Application à nettoyer. Ce script fera donc une boucle sur toutes les collections de sites afin nettoyer la liste des WebParts.
Il est aussi possible (et même meilleur) de passer par une requête CAML comme l'exemple :
Ainsi le script devient (avec une possibilité de lister les sites ayant la WebPart voulue sans le supprimer) :
| function CheckWebParts([object]$MyWeb, [string]$WebPartName, [bool]$ToDelete) { $ColumnName = "FileLeafRef" $ListName = "Web Part Gallery" $spList = $MyWeb.Lists[$ListName] $caml='<Where> <Eq> <FieldRef Name="{0}" /> <Value Type="Computed">{1}</Value> </Eq> </Where>' -f $ColumnName, $WebPartName $query=new-object Microsoft.SharePoint.SPQuery $query.Query=$caml $col=$spList.GetItems($query) # Write-Host "Count: ", $col.Count if($col.Count -gt 0) { if($ToDelete) { Write-Host "WebPart exists (deleted) in site $MyWeb: ", $WebPartName $col | % { $_.Delete() } } else { Write-Host "WebPart exists (not deleted) in site $MyWeb: ", $WebPartName } } } function CheckWP-All-Sites([string]$WebAppURL, [string]$WebPartName, [bool]$ToDelete) { [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null $Thesite = new-object Microsoft.SharePoint.SPSite($WebAppURL) $oApp = $Thesite.WebApplication foreach ($Sites in $oApp.Sites) { $mySubweb = $Sites.RootWeb # Write-Host "URL", $mySubweb.Url CheckWebParts $mySubweb $WebPartName $ToDelete } $Thesite.Dispose() } CheckWP-All-Sites "http://MaWebAppSharePoint/" "Coucouc.dwp" 0 |
Vous pouvez adapter ce cas à de très nombreux besoins.
Romelard Fabrice [MVP]

Nous avons vu au travers de nombreux articles que le ZUNE nous permettait d’accéder, d’utiliser et de partager nos contenus multimédia.
Nous avons vu aussi que Microsoft propose maintenant du contenu en ligne pour cette plateforme, que ce soit de la musique, des films ou des séries TV avec son site MarketPlace.
Une communauté s’est aussi mise en place pour proposer du contenu :
On y trouve de la musique, des vidéos ou des dessins animés. Le tout est totalement gratuit et se présente sous forme de petit clip de quelques minutes.
Vous pouvez en voir deux exemples (que je trouve franchement bien réussis) sur le blog de Rob Margel :
De plus, afin de répondre à la question que se pose certains sur le développement sur cette plateforme, ceci est maintenant tout à fait possible pour tout les développeurs et ceci gratuitement. Il faut pour cela installer l’outil de développement XNA, un petit explicatif est disponible sur le blog de Tess et sur le site de XNA :
Vous trouverez aussi un ensemble de samples de jeux en XNA pour ZUNE sur le site ZuneBoards et XNA :
XNA est aussi utilisé pour développer des jeux pour XBOX 360 et vous pouvez trouver sur le site de XNA de la documentation pour cette autre plateforme.
Romelard Fabrice [MVP]
Après la tentative d’utilisation de Windows VISTA sur mon EeePC 900, j’ai voulu voir la différence avec une version Windows XP.
Voila donc différents points important à connaître.
Tout d’abord, un article de i64X.com fournit toute la méthode pour se créer un CD d’installation réellement light de Windows XP qu’il ne reste plus qu’à lancer sur son matériel :
Celle-ci est surtout primordiale pour les version d’EeePC avec le disque de 4 GB, la version EeePC 900 n’exige pas réellement de se faire un XP Light.
Quoi qu’il en soit une fois l’installation effectuée (on peut très bien installer l’OS sur le disque de 4 GB et les programmes sur celui de 16 GB). Si vous souhaitez installer le Service Pack 3 de Windows XP, il faut le faire immédiatement (surtout avant les drivers, car vous risquez des soucis avec la carte son dans le cas contraire).
Il faut enfin installer les différents Drivers fournis sur le site directement. Le Pilote ACPI doit être installé en dernier, la WebCam est détectée et installée automatiquement par Windows (il faut bien valider que celle-ci soit activée dans le BIOS).
Une fois votre EeePC installé, vous devez mettre à jour le BIOS (toujours avec le site du support) et téléchargeant manuellement la dernière version du BIOS et l’outil de mise à jour de Asus.
A ce moment, vous pouvez rencontrer des lenteurs assez étranges, car la machine semble comme gelée durant plusieurs secondes. Ceci est du à un des drivers (la carte vidéo) qui ne sembe pas optimisé pour le matériel. Pour corriger cela, il faut télécharger une version modifiée qui va stabiliser la machine et ces lenteur disparraissent (en attendant une version officielle ASUS).
Vous trouverez ces pilotes sur le site de forum dédié à ce matériel :
J’ai ensuite installé une version Office 2003 Standard et diverses petits outils.
On verra à l’usage le résultat de ce fonctionnement, mais après de nombreuses réinstallations, cette configuration semble la plus satisfaisante.
Romelard Fabrice [MVP]
Technorati Tags:
EeePC,
ASUS,
Windows,
XP
En plein développement (du moins modification d’un Workflow VS 2008 existant), je suis tombé sur une erreur bizarre après le STSADM fait avec les WSP Extensions :
- Service Unavailable : HTTP Error 503. The service is unavailable.

Après avoir cherché plusieurs minutes de tous les côtés :
- Vérification du service WWW
- IISRESET
- Service SQL Server 2008
- Présence des DataBases et test d’un select sur une table de contenu
- …
J’ai recherché sur Google et c’est quelque chose qui semble arriver sur IIS 7 (IIS7, "HTTP Error 503. The service is unavailable", AppPool failing - shodson) :
- Les Applications Pools se mettent en STOP sans raison et ne repartent pas
Un check rapide sur la console IIS et effectivement ce fut bien le cas, donc juste un petit Start à faire et tout repart

Donc au cas ou cela vous arrive, c’est simple, mais encore fallait-il y penser.
Romelard Fabrice [MVP]
Basiquement SharePoint expose une grande partie de ses fonctionnalités via des Web Services standards que l’on retrouve sur la MSDN :
Mais dans le cadre d’un développement fait autour de cette plateforme SharePoint, il peut arriver que l’on ait à ajouter à ces Web Services SharePoint un Web Service additionnel (comme dans cet exemple de Janne Mattila).
Lors de ce développement, il faut bien sur respecter les règles de base pour les Web Services en validant un ensemble de points qui sont tous listés :
Mais dans un cas précis ou ce Web Service doit être accessible pour toutes les Web Applications, nous devons placer les composants de ce Web Service comme suit :
- Fichiers DLL stockés dans le GAC
- Fichiers ASMX stockés dans le répertoire techniques de Web Services de SharePoint :
- C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\ISAPI\
- Répertoire qui correspond a l’URL : http://xxxxxx/_vti_bin/
Dans ce cas, si on conserve la déclaration standard de la classe dans le fichier ASMX, on se retrouve avec le message d’erreur suivant :
Could not create type ‘xxxx.xxxx.xxx’.

Cela ne provient pas du code (si les règles plus haut sont respectées) mais bien du mapping entre notre fichier ASMX et de la DLL du GAC. Il faut donc modifier ce fichier ASMX pour ajouter la référence à cette ASSEMBLY.
La solution est donc de modifier le fichier comme suit :
<%@ WebService Class="Nom.Fort.DLL.Class" %>
<%@ Assembly Name="Nom.Fort.DLL., Version=1.0.0.0, Culture=neutral, PublicKeyToken=7686e15692492ea2" %>
Une fois ce fichier modifié, il faut effectuer un petit IISRESET et vous aurez la chance de retrouver les différentes méthodes de votre Web Services.
Je remercie Laurent Kempé de Tech Head Brothers pour son aide sur cette modification.
Romelard Fabrice [MVP]
Dans nos différents scripts de découverte de la gestion de SharePoint par PowerShell, nous avons oublié une chose importante.
En effet, comme dans tout bon développement SharePoint en .NET il est obligatoire de libérer les obgets dont on s'est servi dans le programme. Ceci se fait effectivement par la méthode "Dispose()".
Un excellent article traîte du sujet :
Et Renaud en a parlé à plusieurs reprises :
PowerShell ne fait pas exception à cette méthode. Nos scripts de découverte était plutôt basés sur des besoins ponctuels et donc sont lancés manuellement, ainsi ce manque n'était pas catastrophique.
Mais si vous commencez à faire des scripts plus conséquents, planifiés, ... alors il faut effectuer ce travail de nettoyage. Un article explique d'ailleurs bien ce point :
Par contre, le language de script utilisé par PowerShell ne supporte pas (comme le C#) l'usage du USING. Ainsi, on ne peut pas avoir de code comme :
using(SPWeb oSPWeb = oSPSite.OpenWeb()){
// All the Application code
str = oSPWeb.Url; }
On devra avoir un code comme :
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
$site = new-object Microsoft.SharePoint.SPSite($SiteCollectionURL)
$web = $site.openweb()
# All the Application code
$web.Dispose()
$site.Dispose()
Donc, vous devez modifier vos scripts PowerShell si besoin.
Romelard Fabrice [MVP]
Heureux bénéficiaire de mon nouveau jouet :
Celui-ci m'a été livré avec son OS Linux de base, n'étant spécialement fan de cette solution, je me suis lancé dans l'installation de Windows VISTA sur cette machine, car la configuration de base le permet théoriquement :
- Processeur Intel Mobility 900 Mhz
- 1 GO de RAM DDR
- 2 Disques dur SSD (4 GO et 16 GO)
- Ecran avec une résolution max de 1024*600
Ainsi une fois le Ghost de la configuration d'origine effectué, il suffit d'avoir un lecteur DVD externe en USB et de modifier l'ordre de démarrage dans le BIOS pour lancer le DVD d'installation de VISTA.
Rien à signaler de ce côté, si ce n'est qu'il faut :
- Effacer toutes les partitions (même celle marquée BIOS)
- Créer une partition complête pour chaque disque SSD
- Choisir la partition de 16 GO pour l'installation de VISTA
Pour le reste, l'installation s'effectue alors sans soucis et après environ 1 heure, l'EeePC arrive sous VISTA. Il faut encore installer les pilotes pour les cartes réseau (WiFi et LAN) ce qui implique d'avoir une autre machine connectée à Internet et de télécharger ceux-ci depuis le site du Support de Asus :
Une fois ces pilotes installés, il faut encore aller dans le BIOS de la machine pour activer la caméra qui sera alors installée automatiquement par VISTA. N'espérez en revanche pas voir AERO dans cette configuration, car le processeur graphique (Intel 915) choisi est un de ceux qui non supportés par INTEL pour AERO (Cf. un précédent message sur le sujet).
Vous aurez alors la machine EeePC sous Windows VISTA.
Avec cette version d'EeePC, on peut aussi ajouter une carte SD qui sera utilisée par l'OS avec ReadyBoost, afin d'améliorer la fluidité de l'utilisation.
Un message a été posté pour l'autre modèle d'EeePC (celui limité a 4 GO de Disque SSD) afin d'installer VISTA :
Car une manipulation plus complexe est nécessaire pour déplacer un ensemble de fichiers système de VISTA sur une carte SD que l'on doit ajouter.
Après quelques jours d'utilisation, il est clair que cela fonctionne mais l'utilisation est un peu lente, chaque action cécessite quelques secondes pour s'exécuter (ce qui à mon sens provient de la configuration matérielle un peu en dessous de celle adaptée). L'écran en revanche est tout à fait exploitable pour son objectif avoué :
- Surfer sur le Web
- Lire ses Emails
- Discuter par MSN
Ne comptez en revanche pas du tout lancer de machine virtuelle, jouer à des jeux graphiques, ou stocker du contenu multimédia (musique, film ou photo), cette machine n'est pas destinée à cela.
Le prochain test sera sous XP afin de choisir l'OS le plus adapté entre les trois versions possibles :
- GNU Linux Xandros (configuration d'origine)
- Windows XP (seconde configuration possible à l'achat)
- Windows VISTA (possible mais non idéale)
Pour le moment, il me semble que la distribution Linux Xandros fournie de base est tout à fait exploitable pour une personne souhaitant juste utiliser la machine pour les trois besoins énoncés plus haut, car les produits fournis de base (OpenOffice, FireFox, application de Chat, lecteur DIVX, ...) sont totalement adaptés.
Windows XP ou VISTA apportent à l'utilisateur le fait de ne pas redécouvrir l'OS dans le cas où il le connait déjà, mais il faut alors effectuer toute l'installation et ajouter les applications souhaitées pour arriver au même point (VLC, OpenOffice, FireFox, ...).
Romelard Fabrice [MVP]
Un besoin très classique pour tout responsable de ferme SharePoint 2007 est la gestion des corbeilles.
Un article explique le fonctionnement de cette corbeille sur asp-php :
Ainsi en découvrant PowerShell, il semble évident que ce moteur peut effectuer en quelques lignes le nettoyage de la corbeille d’une collection de sites.
Voila donc le script en question en adaptant un exemple en ligne (qui est non fonctionnel en l’état) :
# Function: Clear-All-RecycleBin
# Description: Clear all Recycle Bin for a site collection
# Parameters: SiteCollectionURL : URL for Site Collection
function Clear-All-RecycleBin([string]$SiteCollectionURL)
{
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
$site = new-object Microsoft.SharePoint.SPSite($SiteCollectionURL)
$SitecollectionRecycleBin = $site.RecycleBin
for ($x = $SitecollectionRecycleBin.Count ; $x -gt 0 ; $x--)
{
$Item = $SitecollectionRecycleBin.Item($x-1)
$SitecollectionRecycleBin.Delete($Item.ID)
}
}
Clear-All-RecycleBin http://AdresseDeLaSiteCollection/
A chaque étape, nous voyons que la connaissance de ce moteur est vraiment indispensable à tout responsable de ferme SharePoint, car il évite d’être dépendant de développeurs qui sont certainement occupés sur d’autres projets.
Romelard Fabrice [MVP]
Comme chaque année (Cf. pour l’année 2006), Annecy démarre la période estivale 2008 (du 9 au 14 Juin) par un énorme festival international dédié à tous les domaines de l’Animation.
C’est l’occasion de voir ou revoir un ensemble de films d’animation diffusés dans les différents points de la ville (Place du Pâquier, Cinémas, salles municipales, …) dont le programme est en ligne, mais aussi de voir les tendances dans ce domaine.
Ainsi cette année, une attention toute particulière a été faite sur la production indienne. Durant des années, ce pays a produit (et produit encore) des films concus dans les pays occidentaux (et oui la délocalisation existe aussi dans ce milieu). Une grande partie des films d’animation diffusés sur nos chaines TV françaises est actuellement produite la bas.
Aujourd’hui, l’Inde commence aussi à créer ses propres films avec ses propres histoires (tirées par exemple de son histoire et de sa culture) pour les consommer dans le marché intérieur (ou environnant) comme pour les productions de Bollywood.
Vous pourrez donc voir durant cette semaine un ensemble de productions originales provenant de ce pays au travers de court-métrages, de publicités ou de films d’étudiants. Ces trois types de produits donne toujours un avant goût des futures productions.

Vous y trouverez aussi bien d’autres choses, comme des concerts chaque soir et la soirée de Jeudi dédiée à la musique électronique - @NNECYBERNIGHT (avec différents DJ dont Didier Sinclair).
En conclusion, si vous êtes dans la région durant cette semaine, n’hésitez surtout pas à venir sur Annecy pour ce festival (dont une grande partie est totalement gratuite).
Romelard Fabrice [MVP]
Un nouvel article sur la mise en place de la fonctionnalité de l’OpenSearch au sein de son infrastructure SharePoint. Cet article est disponible sur le site ASP-PHP :
Bonne lecture
Romelard Fabrice [MVP]
Après l’article précédent posté sur le site ASP-PHP, voila un second exemple de script pour lister du contenu d’une liste SharePoint (en m’aidant des posts suivant):
# Function: GetSharePointItemList
# Description: Get all value for one given Column in a specific list
function GetSharePointItemList([string]$SiteURL, [string]$ListName,
[string]$ColumnName)
{
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
$site = new-object Microsoft.SharePoint.SPSite($SiteURL)
Write-Host "SiteURL", $SiteURL
$web = $site.openweb()
$spList = $web.Lists[$ListName]
Write-Host "ListName", $ListName
foreach ($MyItem in $spList.Items)
{
#Write-Host "Value [" + $ColumnName + "]: ", $MyItem[$ColumnName]
#Add your code here
}
}
Une fois cette première fonction faite, pourquoi ne pas aller un peu plus loin ?
Ainsi, un besoin classique est d’utiliser SharePoint pour sa simplicité et y ajouter la liste des serveurs de son réseau. On ajoute donc quelques colonnes donc le nom, l’IP, …
Karine Bosh nous explique alors comment mettre à jour les données de la machine courante dans la liste, le fait est que tous les serveurs qui sont dans la liste n’ont pas forcément ni SharePoint (donc pas possible de charger les objets) ni PowerShell (donc impossible d’exécuter le script).
La solution est d’utiliser une commande DOS standard disponible sur tous les systèmes Windows (on pourrait très bien utiliser WMI d’ailleurs mais ca oblige à gérer le résultat) :

On va donc depuis notre serveur SharePoint ayant PowerShell, utiliser cette commande pour obtenir toutes les informations de chaque serveur dans un fichier texte que l’on ajoute dans les pièces jointes de chaque item (donc chaque ligne de la liste, une ligne étant un serveur).
Voila donc le script résultat (on peut au passage voir comment ajouter un fichier en Attachment d’un item SharePoint avec powerShell)
# Function: GetAllSystemInfo
# Description: Get all Information by DOS SYSTEMINFO COMMAND and Upload it in the Item attachment
function GetAllSystemInfo([object]$MyItem, [string]$ServerName,
[string]$UserName, [string]$Password)
{
# Write-Host "ServerName", $ServerName
$Filename = "SystemInfo-"+ $ServerName +"-"+ (get-date).tostring("yyyy-MM-dd-HH-mm") + ".txt"
$Mycommand = "systeminfo /S " + $ServerName + " /U " + $UserName + " /P "+ $Password
$MyResult = cmd /c $Mycommand|Out-file C:\MyTempResultForSystemInfo.txt
$MySPAttachmentCollection = $MyItem.Attachments
[byte[]]$AttachmentFile = Get-Content "C:\MyTempResultForSystemInfo.txt" -Encoding byte
$MySPAttachmentCollection.Add($Filename, $AttachmentFile)
$MyItem.Update()
del C:\MyTempResultForSystemInfo.txt
}
# Function: GetSharePointItemList
# Description: Get all value for one given Column in a specific list
function GetSharePointItemList([string]$SiteURL, [string]$ListName,
[string]$ColumnName, [string]$UserName, [string]$Password)
{
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
$site = new-object Microsoft.SharePoint.SPSite($SiteURL)
Write-Host "SiteURL", $SiteURL
$web = $site.openweb()
$spList = $web.Lists[$ListName]
Write-Host "ListName", $ListName
foreach ($MyItem in $spList.Items)
{
#Write-Host "Value [" + $ColumnName + "]: ", $MyItem[$ColumnName]
#Add your code here
GetAllSystemInfo $MyItem $MyItem[$ColumnName] $UserName $Password
}
}
On pourra donc simplement ajouter en fin de fichier la ligne pour appeler correctement la fonction sous le format :
GetSharePointItemList http://MonServerSharePoint/MonSite "Ma Liste" "LeNomDeLaColonne" "DOMAIN\AdminUser" "Password"
Vous retrouverez donc dans votre liste pour un Item Donné un résultat semblable à la capture suivante (avec un fichier attaché par exécution du script) :

Vous n’aurez donc plus qu’à exécuter ce script au besoin pour avoir toutes les configurations de chaque serveur à jour. Cela fonctionne aussi parfaitement pour des postes de travail (cas de petites structures).
UPDATE:
On peut aussi effectuer un test pour la taille du fichier résultat, en effet, si on a pas les droits sur la machine cible (ou si celle-ci n'existe plus), on obtiendra toujours un fichier mais qui sera vide. Or il est ridicule de charger des fichiers vides dans les attachments.
On doit donc faire un test sur la taille de ce fichier (avec la commande -gt (ou greater than) sur la valeur des 4 Octets). Cela donnera le bloc suivant :
$MyResult = cmd /c $Mycommand|Out-file C:\MyTempResultForSystemInfo.txt
$b = Get-ChildItem C:\MyTempResultForSystemInfo.txt
if($b.length -gt 4)
{
Write-Host "Servername[" + $ServerName + "] Size :", $b.length
$MySPAttachmentCollection = $MyItem.Attachments
[byte[]]$AttachmentFile = Get-Content "C:\MyTempResultForSystemInfo.txt" -Encoding byte
$MySPAttachmentCollection.Add($Filename, $AttachmentFile)
$MyItem.Update()
}
del C:\MyTempResultForSystemInfo.txt
Bonne lecture.
Romelard Fabrice [MVP]