Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Blog Technique de Romelard Fabrice

Les dernières Actualités de Romelard Fabrice (Alias fabrice69 ou F___) principalement autour des technologies Microsoft

Actualités

  • Toutes les actualités et informations sur les technologies Microsoft principalement autour de .NET et SQL Server

Archives

SharePoint OnPremise: Statistiques d’utilisation pour traquer les sites fantomes

Une question habituelle dans toute gestion de fermes SharePoint est la gestion des sites fantomes.

Pour définir ce que c’est il faut prendre un cas utilsateur simple :

  • Un site d’équipe est créé pour partager la documentation autour d’un projet défini
  • Plusieurs utilisateurs travaillent pendant des semaines autour de ce projet
  • Au bout d’un certain temps ce projet est terminé
  • Les utilisateurs sont réaffectés sur d’autres projets
  • Au bout d’un temps variable, plus personne ne vient sur ce site et tout le monde oublie son existance
  • Le site SharePoint et son contenu passe alors en mode fantome

C’est un très grand classique des TeamSites et le volume occupé par ce type de site peut rapidement être important.

Benoît Jester propose sur son blog une solution (via un script PowerShell) permettant de lister les sites et sous sites avec les dates de dernière modification :

Je suis donc reparti de ce script que j’ai légèrement modifié avec son accord en ajoutant des colonnes au fichier CSV (WEB App, Site Collection, Site Owner, DB, …).

Le résultat final est le suivant:


====================================================================================
# SitesUsage.ps1 - Export 'LastItemModifiedDate' property of each site in a csv file
# Written by Benoît Jester [MVP] -
http://spasipe.wordpress.com
# Version 1.0 - 07/18/2014
# ====================================================================================
# Source:
https://spasipe.wordpress.com/2014/07/23/sharepoint-20xx-script-powershell-permettant-de-lister-les-sites-peu-utilises/

param(
    [Parameter(Mandatory=$False)]
     [bool]$displayMessages = $true,
    [Parameter(Mandatory=$False)]
     [string]$SMTPServer="",
    [Parameter(Mandatory=$False)]
     [string]$ToEmailAddress="",
    [Parameter(Mandatory=$False)]
     [string]$FromEmailAddress="",
    [Parameter(Mandatory=$False)]
     [string]$delimiter=","
)

# Applies Read Access to the specified accounts for a web application
Function Add-UserPolicy([String]$url)
{
    Try
    {
        $webapp = [Microsoft.SharePoint.Administration.SPWebApplication]::Lookup("$url")
        $user = ([Security.Principal.WindowsIdentity]::GetCurrent()).Name
        $displayName = "Sites Usage Read Account"
        $perm = "Full Read"
       
        # If the web app is not Central Administration
        If ($webapp.IsAdministrationWebApplication -eq $false)
        {
            # If the web app is using Claims auth, change the user accounts to the proper syntax
            If ($webapp.UseClaimsAuthentication -eq $true)
            {$user = 'i:0#.w|'+$user}
            [Microsoft.SharePoint.Administration.SPPolicyCollection]$policies = $webapp.Policies
            [Microsoft.SharePoint.Administration.SPPolicy]$policy = $policies.Add($user, $displayName)
            [Microsoft.SharePoint.Administration.SPPolicyRole]$policyRole = $webapp.PolicyRoles | where {$_.Name -eq $perm}
            If ($policyRole -ne $null)
            {$policy.PolicyRoleBindings.Add($policyRole)}
            $webapp.Update()
            If($displayMessages)
            {Write-Host -ForegroundColor White " Read access applied for `"$user`" account to `"$url`""}
        }
    }
    Catch
    {
        $_
        Write-Warning "An error occurred applying Read access for `"$user`" account to `"$url`""
    }
}

# Load assemblies
Function Load-Assemblies
{
    Try
    {
        If ((Get-PsSnapin |?{$_.Name -eq "Microsoft.SharePoint.PowerShell"})-eq $null)
        {
            If($displayMessages)
            {
                Write-Host -ForegroundColor Green "-----------------------------------------"
                Write-Host -ForegroundColor Green " - Loading SharePoint Powershell Snapin -"
                Write-Host -ForegroundColor Green "-----------------------------------------"
            }
            Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction Stop | Out-Null
        }
    }
    Catch
    {
        If($displayMessages)
        {
            Write-Host -ForegroundColor Green "------------------------------------------"
            Write-Host -ForegroundColor Green " - Loading Microsoft.SharePoint Assembly -"
            Write-Host -ForegroundColor Green "------------------------------------------"
        }
        [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") | Out-Null
    }
}

# Send Email with log file as attachment
Function SendEmail($attachment)
{
    Try
    {
        If($displayMessages)
        {
            Write-Host -ForegroundColor White "--------------------------------------------------------------"
            Write-Host -ForegroundColor White " Sending Email to $ToEmailAddress with $attachment in attachment."
        }
        Send-MailMessage -To $ToEmailAddress -From $FromEmailAddress -Subject "Sites Usage - $env:COMPUTERNAME" -SmtpServer $SMTPServer -Attachments $attachment
       
        If($displayMessages)
        {Write-Host -ForegroundColor Green " Email sent successfully to $ToEmailAddress"}
    }
    Catch
    {Write-Warning $_}
}

$DateStarted = $(Get-date)

If($displayMessages)
{
    Write-Host -ForegroundColor Green "----------------------------------"
    Write-Host -ForegroundColor Green "- Script started on $DateStarted -"
    Write-Host -ForegroundColor Green "----------------------------------"
}
# Check Permission Level
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{Write-Warning "You don't have Administrator rights to run this script."}
else
{
    If($SMTPServer)
    {
        If (!$ToEmailAddress -or !$FromEmailAddress)
        {
            Write-Warning "Please specify a 'ToEmailAddress' and a 'FromEmailAddress' parameter."
            Exit
        }
    }
    # Load assemblies
    Load-Assemblies

    # Local variables
    $sitesList = $null
    $sitesList = @()

    # Build structure
    $itemStructure = New-Object psobject
    $itemStructure | Add-Member -MemberType NoteProperty -Name "Title" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "WebAppURL" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "SiteCollURL" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "SiteCollOwnerEmail" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "SiteCollsecondayAdminEmail" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "ContentDatabase" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "Created" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "SiteCollectionsize" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "WebURL" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "Template" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "Year" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "Month" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "Day" -value ""
    $itemStructure | Add-Member -MemberType NoteProperty -Name "LastModifiedDate" -value ""
   
    If($displayMessages)
    {
        Write-Host -ForegroundColor Green "-----------------------"
        Write-Host -ForegroundColor Green " - Scanning All Sites -"
        Write-Host -ForegroundColor Green "-----------------------"
    }
   
    # Browse sites
    $WebSrv = [microsoft.sharepoint.administration.spwebservice]::ContentService
    foreach ($webApp in $WebSrv.WebApplications)
    {
        foreach ($AltUrl in $webapp.AlternateUrls)
        {Add-UserPolicy $AltUrl.uri}
       
        foreach ($site in $WebApp.sites)
        {
        $rootweb = $site.RootWeb;
        $SiteAdmin = new-object Microsoft.SharePoint.Administration.SPSiteAdministration($rootweb.URL);
        $size =  (($SiteAdmin.DiskUsed + 0x80000L) / 0x100000L);
        foreach($web in $site.AllWebs)
            {
                # Build structure
                $siteInfos = $itemStructure | Select-Object *;

                $siteInfos.Title = $web.Title;

                $siteInfos.WebAppURL = $web.Url.Split("/")[2];
                $siteInfos.SiteCollURL = $site.URL;
                $siteInfos.SiteCollOwnerEmail = $site.Owner.Email;
                $siteInfos.SiteCollsecondayAdminEmail = $site.SecondaryContact.Email;
                $siteInfos.ContentDatabase = $site.ContentDatabase;
                $siteInfos.Created = Get-Date -Date $rootweb.Created;
                $siteInfos.SiteCollectionsize = $size;
               
                $siteInfos.WebURL = $web.Url;
                $siteInfos.Template = $web.WebTemplate;
                $LastModifiedDate = Get-Date -Date $web.LastItemModifiedDate
                $siteInfos.Year = $LastModifiedDate.Year;
                $siteInfos.Month = $LastModifiedDate.Month;
                $siteInfos.Day = $LastModifiedDate.Day;
                $siteInfos.LastModifiedDate = $web.LastItemModifiedDate.ToString('d');
               
                $sitesList += $siteInfos;
            }
        }
        $SiteAdmin.Dispose()
        $rootweb.Dispose()

    }
   
    # CSV Export
    If($displayMessages)
    {
        Write-Host -ForegroundColor Green "---------------"
        Write-Host -ForegroundColor Green " - CSV Export -"
        Write-Host -ForegroundColor Green "---------------"
    }
    $sitesList | Where-Object {$_} | Export-Csv -Delimiter "$delimiter" -Path "SitesUsage.csv" -notype
     If($displayMessages)
    {Write-Host "Export file 'SitesUsage.csv' successfully generated."}
 
      # Email notification
    If($SMTPServer)
    {SendEmail "SitesUsage.csv"}
   
    # End
    If($displayMessages)
    {
        Write-Host -ForegroundColor Green "---------------------------------"
        Write-Host -ForegroundColor Green "- Script started : $DateStarted -"
        Write-Host -ForegroundColor Green "- Script finished : $(Get-date) -"
        Write-Host -ForegroundColor Green "---------------------------------"
    }
    Exit
}


Une fois le fichier exécuté vous obtenez un fichier CSV qu’il est possible de charger dans Excel via l’import de données:

image

Mode delimited et Data + headers, puis sélectionne la vigule (séparateur par défaut):

image

On peut cliquer sur Finish.

Une fois les données chargées dans Excel, il faut juste sélectionner toute la zone de ce tableau et cliquer sur “Table” dans “Insert”:

image

On sélectionne le même tableau et dans Insert, on choisit PivotTable, puis en quelques clicks, on obtient ce type de résultat :

image

Il ne vous reste plus qu’à contacter les propriétaires de site pour les questionner sur la nécessiter de nettoyer leur contenu.

Romelard Fabrice [MBA]

SharePoint 2007: Script PowerShell permettant le backup de toutes les collections de sites d’une application Web

En tant qu’archéologue, il est indispensable de conserver un processus de sauvegarde valide et simple:

  • La sauvegarde des Bases de données est simple, mais exige un niveau technique important en cas de besoin de restauration
  • La sauvegarde de base de WSS est “simple”, mais complexe si on souhaite remonter une unique collection de site, de plus elle n’est pas adaptée pour de gros volumes
  • La sauvegarde de chaque collection de site est simple à sauver et restaurer puisqu’on peut remonter une unique collection

Pour effectuer cette troisième option, il existe différentes solutions, dont des script VBS qui peuvent être complexes à maintenir. PowerShell permet d’avoir un script court et rapide pour effectuer simplement une sauvegarde STSADM pour chaque collection de sites en placant de fichier de sauvegarde dans le répertoire voulu.


# Shared Variables
$BackupPath = “\\MyFileServer\SHAREPOINT_BACKUP\MyFarmTOSave”
$StsAdmPath = "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\BIN"

function Start-Executable {
   param(
     [String] $FilePath,
     [String[]] $ArgumentList
   )
   #source:
http://windowsitpro.com/powershell/running-executables-powershell
   $OFS = " "
   $process = New-Object System.Diagnostics.Process
   $process.StartInfo.FileName = $FilePath
   $process.StartInfo.Arguments = $ArgumentList
   $process.StartInfo.UseShellExecute = $false
   $process.StartInfo.RedirectStandardOutput = $true
   if ( $process.Start() ) {
     $output = $process.StandardOutput.ReadToEnd() `
       -replace "\r\n$",""
     if ( $output ) {
       if ( $output.Contains("`r`n") ) {
         $output -split "`r`n"
       }
       elseif ( $output.Contains("`n") ) {
         $output -split "`n"
       }
       else {
         $output
       }
     }
     $process.WaitForExit()
     & "$Env:SystemRoot\system32\cmd.exe" `
       /c exit $process.ExitCode
   }
}

function BackUp-All-SiteCollections([string]$WebAppURL, [string]$webAppName)
{
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
    $Thesite = new-object Microsoft.SharePoint.SPSite($WebAppURL)
    $oApp = $Thesite.WebApplication

    $stsadmPath =  $StsAdmPath +"\stsadm.exe"

    foreach ($Sites in $oApp.Sites)
    {
        $UrlSplitted = $Sites.URL.split("/")
        Write-Host "Site URL", $Sites.URL, $UrlSplitted.length
       
        if($UrlSplitted.length -gt 0)
        {
            if($UrlSplitted.length -eq 3)
            {
                $RunstsadmParam = "-o backup -url "+  $Sites.URL +" -filename "+ $BackupPath +"\" + $webAppName + "\rootcollection.dat -overwrite "
            }
            else
            {
                $RunstsadmParam = "-o backup -url "+  $Sites.URL +" -filename "+ $BackupPath +"\" + $webAppName + "\" + $UrlSplitted[3] +"\"+ $UrlSplitted[4] +".dat -overwrite "
            }
        }
        Write-Host " ----------------------------------------------- "
        Write-Host "Start the process"
        Write-Host $stsadmPath, $RunstsadmParam

        Start-Executable $stsadmPath $RunstsadmParam

        Write-Host " ----------------------------------------------- "
    }
    $Thesite.Dispose()
}

cls
BackUp-All-SiteCollections “http://MyWebApp01” "MyWebApp01"
BackUp-All-SiteCollections “http://MyWebApp02” "MyWebApp02"


Une fois ce script planifié quotidiennement, vous aurez dans le répertoire fourni, un fichier DAT pour chaque collection se sites en utilisant le nom de celle-ci pour nom du fichier.

Romelard Fabrice [MBA]

Office 365: Comparaison des composants pour préparer votre migration de SharePoint 2007 vers Office 365

Office365logoOrange_Web

La migration d’une plateforme existante vers une nouvelle solution implique une gestion du changement et la communication associée.

Dans le cadre de ce travail, il peut être utile de faire une présentation de la plateforme à venir et montrer comment celle-ci est une avancée pour chaque élément. L’idée est donc de partir de la page de présentation officielle pour Office 365 :

Dans laquelle on trouve un lien vers les détails pour SharePoint OnLine et toutes les features associées :

Dans le cas d’une entreprise, la situation de base est donc SharePoint 2007 considérant uniquement les Editions:

  • Microsoft Office SharePoint Server 2007 Standard Edition (MOSS 2007 SE)
  • Windows SharePoint Services V3 (WSS V3)

Dans les plateformes Office 365, on peut prendre en analogie les “équivalences” suivantes :

  • Office 365 Enterprise E3
  • Office 365 Enterprise E1

La comparaison peut être visualisée à partir du tableau avec pour chaque feature, sa disponibilité, sous la forme suivante:

image

  • Disponible = Yes = 1
  • Non disponible = No = 0
  • Partiellement disponible = Partial = 0.5

La source de ce tableau est la suivante, si vous souhaitez vous en inspirer pour établir votre propre version:

Feature Type MOSS 2007 SE WSS V3 Office 365  E1 Office 365  E3
Access Services Developer features No No Yes Yes
App Catalog (SharePoint) Developer features No No Yes Yes
App Deployment: Autohosted Apps Developer features No No Yes Yes
App Deployment: Cloud-Hosted Apps Developer features No No Yes Yes
App Deployment: SharePoint-Hosted Apps Developer features No No Yes Yes
App Management Services Developer features No No Yes Yes
BCS: Alerts for External Lists Developer features No No No Yes
BCS: App Scoped External Content Types (ECTs) Developer features No No No Yes
BCS: Business Data Webparts Developer features No No No Yes
BCS: External List Developer features No No No Yes
BCS: OData connector Developer features No No No Yes
BCS: Profile Pages Developer features No No No No
BCS: Rich Client Integration Developer features No No No No
BCS: Secure Store Service Developer features No No No Yes
BCS: Tenant-level external data log Developer features No No No Yes
Browser-based customizations Developer features No No Yes Yes
Client Object Model (OM) Developer features No No Yes Yes
Client-side rendering (CSR) Developer features No No Yes Yes
Custom Site Definitions Developer features No No No No
Custom Site Provisioning Developer features No No No No
Developer Site Developer features No No Yes Yes
Forms Based Applications Developer features No No Yes Yes
Full-Trust Solutions Developer features No No No No
InfoPath Forms Services Developer features No No No Yes
JavaScript Object Model Developer features No No Yes Yes
List and Library APIs Developer features No No Yes Yes
Remote Event Receiver Developer features No No Yes Yes
REST API Developer features No No Yes Yes
Sandboxed Solutions Developer features No No Yes Yes
SharePoint Design Manager Developer features No No Yes Yes
SharePoint Designer Developer features No No Yes Yes
SharePoint Store Developer features No No Yes Yes
Workflow 2010 (.NET 3.5) Developer features No No Yes Yes
Workflow 2010 (out of the box) Developer features No No Yes Yes
Workflow 2013 Developer features No No Yes Yes
Workload API: ECM APIs Developer features No No Yes Yes
Workload API: Search APIs Developer features No No Yes Yes
Workload API: Social APIs Developer features No No Yes Yes
Active Directory Synchronization IT Professional features Yes Yes Yes Yes
Alternate Access Mapping (AAM) IT Professional features Yes Yes No No
Analytics Platform IT Professional features No No Yes Yes
Anti-malware protection IT Professional features No No Yes Yes
Claims-Based Authentication Support IT Professional features No No No No
Configuration Wizards IT Professional features Yes Yes No No
Deferred Site Collection upgrade IT Professional features No No Yes Yes
Distributed Cache IT Professional features No No No No
Data loss prevention IT Professional features No No No Yes
Host Header Site Collections IT Professional features No No No No
Improved Permissions Management IT Professional features Partial Partial Yes Yes
Improved Self-Service Site Creation IT Professional features No Partial No No
Managed Accounts IT Professional features No No No No
Minimal Download Strategy (MDS) IT Professional features No No Yes Yes
OAuth IT Professional features No No Yes Yes
Patch Management IT Professional features Yes Yes No No
Quota Templates IT Professional features Yes Yes No No
Read-Only Database Support IT Professional features Yes Yes No No
Remote BLOB Storage IT Professional features No No No No
Request Management IT Professional features No No No No
Request throttling IT Professional features No No No No
Resource throttling IT Professional features No No No No
Service Application Platform IT Professional features No No Yes Yes
SharePoint Health Analyzer IT Professional features No No No No
SharePoint admin center IT Professional features Yes Yes Yes Yes
Shredded Storage IT Professional features No No Yes Yes
Site Collection Compliance Policies IT Professional features No No Yes Yes
Site Collection Health Checks IT Professional features No No Yes Yes
State Service IT Professional features No No No No
Streamlined Central Administration IT Professional features No No No No
System Status Notifications IT Professional features No No No No
Unattached Content Database Recovery IT Professional features No No No No
Upgrade evaluation site collections IT Professional features No No Yes Yes
Usage Reporting and Logging IT Professional features Partial Partial No No
Windows PowerShell Support IT Professional features Partial Partial Yes Yes
Accessibility Standards Support Content features No Partial Yes Yes
Asset Library Enhancements/Video Support Content features No No Yes Yes
Auditing Content features No No Yes Yes
Auditing & Reporting (e.g. doc edits, policy edits, deletes) Content features No No Yes Yes
Content Organizer Content features Yes Partial Yes Yes
Design Manager Content features Yes No Yes Yes
Document Sets Content features No No Yes Yes
Document Translation in Word Online Content features No No Yes Yes
eDiscovery Search Content features No No Yes Yes
eDiscovery Hold Content features No No No Yes
eDiscovery Export Content features No No No Yes
Email enabled lists and libraries Content features No No No No
External Sharing: External Access Content features No No Yes Yes
External Sharing: Guest Link Content features No No Yes Yes
Folder Sync Content features No No Yes Yes
IRM using Azure Rights Management Content features No No No Yes
IRM using Windows Server AD RMS Content features No No No No
Managed Metadata Service Content features Partial No Yes Yes
Metadata-driven Navigation Content features No No Yes Yes
Multi-stage Disposition Content features No No Yes Yes
Office ProPlus (Osub) Content features Partial Partial No Yes
Office Online (create/edit) Content features No No Yes Yes
Office Online (view) Content features No No Yes Yes
Office Web Apps Server integration Content features No No No No
PowerPoint Automation Services Content features No No No No
Preservation hold library Content features No No No Yes
Quick Edit Content features Yes Yes Yes Yes
Records management Content features Partial No Yes Yes
Recycle Bin (SharePoint admin center) Content features No No Yes Yes
Recycle Bin (site collection) Content features Yes Yes Yes Yes
Related Items Content features No No Yes Yes
Rich Media Management Content features No No Yes Yes
Shared Content Types Content features Yes Partial Yes Yes
SharePoint Translation Services Content features No No Yes Yes
Site mailbox Content features No No Yes Yes
Surveys Content features No Yes Yes Yes
Unique Document IDs Content features No No Yes Yes
Video Search Content features No No No Yes
WCM: Analytics Content features Partial No Yes Yes
WCM: Catalog Content features No No No Yes
WCM: Category page and catalog item page Content features No No No Yes
WCM: Search web parts Content features Yes No No Yes
WCM: Cross-Site Publishing Content features No No No Yes
WCM: Designer Tools Content features Partial No Yes Yes
WCM: Faceted navigation Content features Partial No No No
WCM: Image Renditions Content features No No Yes Yes
WCM: Managed navigation Content features Partial No Yes Yes
WCM: Mobile and Device Rendering Content features No No Yes Yes
WCM: Multiple Domains Content features No No No No
WCM: Recommendations Content features No No Yes Yes
WCM: Search Engine Optimizations (SEO) Content features No No Yes Yes
Word Automation Services Content features No No No No
Business Intelligence Center Insights features No No No No
Calculated Measures and Members Insights features No No No Yes
Data Connection Library Insights features No No No Yes
Decoupled PivotTables and PivotCharts Insights features No No No Yes
Excel Services Insights features No No No Yes
Field list and Field Support Insights features No No No Yes
Filter Enhancements Insights features No No No Yes
Filter Search Insights features No No No Yes
PerformancePoint Services Insights features No No No No
PerformancePoint Services (PPS) Dashboard Migration Insights features No No No No
Power View for Excel in SharePoint Insights features No No No Yes
Power Pivot for Excel in SharePoint Insights features No No No Yes
Quick Explore Insights features No No No Yes
Scorecards & Dashboards Insights features No No Yes Yes
SQL Server Reporting Services (SSRS) Integrated Mode Insights features No No No No
Timeline Slicer Insights features No No No Yes
Visio Services Insights features No No No Yes
Advanced Content Processing Search features No No Yes Yes
Continuous crawls Search features Partial No Yes Yes
Custom entity extraction Search features No No No No
Deep links Search features No No Yes Yes
Event-based relevancy Search features No No Yes Yes
Expertise Search Search features Partial No Yes Yes
Extensible content processing Search features No No No No
Graphical refiners Search features No No Yes Yes
Hybrid search Search features No No Yes Yes
Manage search schema Search features No No Yes Yes
On-premises search index Search features Partial No No No
Phonetic name matching Search features No No Yes Yes
Query rules—Add promoted results Search features Partial No Yes Yes
Query rules—advanced actions Search features Partial No No Yes
Query spelling correction Search features Partial No Yes Yes
Query suggestions Search features Partial No Yes Yes
Query throttling Search features No No Yes Yes
Quick preview Search features No No Yes Yes
Ranking models Search features Partial No Yes Yes
Refiners Search features Partial No Yes Yes
RESTful Query API/Query OM Search features No No Yes Yes
Result sources Search features Yes No Yes Yes
Search connector framework Search features Partial No No No
Search results sorting Search features Partial No Yes Yes
Search vertical: “Conversations” Search features No No Yes Yes
Search vertical: “People” Search features Yes No Yes Yes
Search vertical: “Video” Search features No No No Yes
“This List” searches Search features Partial Yes Yes Yes
Change the look Sites features No No Yes Yes
Connections to Microsoft Office Clients Sites features Yes Yes Yes Yes
Cross Browser Support Sites features Partial Partial Yes Yes
Custom Managed Paths Sites features Yes Yes No No
Governance Sites features Yes Yes Yes Yes
Large List Scalability and Management Sites features Yes Yes Yes Yes
Mobile Connectivity Sites features Partial Partial Yes Yes
Multi-Lingual User Interface Sites features No No Yes Yes
My Tasks Sites features No No Yes Yes
OOTB Web Parts Sites features Yes Yes Yes Yes
Permissions Management Sites features Yes Yes Yes Yes
Project functionality for team sites Sites features Partial Partial Yes Yes
Project site template Sites features No Partial Yes Yes
Project Summary web part Sites features No No Yes Yes
Project workspace Sites features No Partial Yes Yes
Public Website (SPO) Sites features No No Yes Yes
SharePoint Lists Sites features Yes Yes Yes Yes
SharePoint Ribbon Sites features Yes Yes Yes Yes
Site folders Sites features Yes Yes Yes Yes
Task list Sites features Yes Yes Yes Yes
Team Site: Drag & Drop Sites features No No Yes Yes
Team Site: Notebook Sites features No No Yes Yes
Team Site: Simplified Access Sites features No No Yes Yes
Templates Sites features Partial Yes Yes Yes
Themes Sites features Yes Yes Yes Yes
Variations Sites features Partial No Yes Yes
Usage Analytics Sites features Partial Partial Yes Yes
Work Management Service Sites features No No Yes Yes
Ask Me About Social features No No Yes Yes
Blogs Social features No Yes Yes Yes
Communities Reputation, Badging, and Moderation Social features No No Yes Yes
Community Social features No No Yes Yes
Company Feed Social features No No Yes Yes
Document Conversations with Yammer Social features No No Yes Yes
Follow Social features No No Yes Yes
Microblogging Social features No No Yes Yes
Newsfeed Social features No No Yes Yes
One Click Sharing Social features No No Yes Yes
People, Sites, Document Recommendations Social features No No Yes Yes
Personal Site Social features Yes No Yes Yes
Photos and Presence Social features Yes Yes Yes Yes
Profile Social features Yes No Yes Yes
Ratings Social features No No Yes Yes
Shared with Me Social features No No Yes Yes
Site Feed Social features No No Yes Yes
OneDrive for Business Social features No No Yes Yes
Tag profiles Social features No No Yes Yes
Tasks integrated with Outlook Social features Yes Yes Yes Yes
Trending Tags Social features No No Yes Yes
Wikis Social features No Yes Yes Yes
Additional Storage Add-Ons No No Yes Yes
Azure Provisioned Apps: Access Services Add-Ons No No Yes Yes
Azure Provisioned Apps: Custom Code in Azure LWR Add-Ons No No Yes Yes
Duet Online Add-Ons No No No Yes

En vous souhaitant une bonne lecture.

Romelard Fabrice [MBA]

SharePoint 2007: Script PowerShell pour ajouter un admin à plusieurs collections de sites

L’archéologie est une passion ou une punition, pour mon cas, je vous laisse chercher dans quel cas je suis Smile

Quoi qu’il en soit, les Sites SharePoint sont des espaces de travail collaboratif et de ce fait, les collaborations évoluent dans le temps. Un des cas classiques reste le changement de poste ou de responsabilité.

Pour SharePoint ca se traduit souvent par le remplacement de collaborateurs dans la liste des Site Collection administrators, ainsi que l’adresse Email de permission request.

Voici donc un petit script PowerShell qui permet de faire ces deux modifications en une fois et avec un filtrage possible sur les sites à modifier.


function AddAccountAdmin([object]$TheSite, [object]$web, [string]$UserAdmin)
{
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
    Write-Host " ------------------------------------- "
    Write-Host "Web URL", $web.URL
    $siteCollUsers = $web.SiteUsers
    $siteCollUsers.Add($UserAdmin, "", "", "")
    Write-Host "   >> ADMIN ADDED: ", $UserAdmin
    $web.Update()
    $myuser = $siteCollUsers[$UserAdmin]
    $TheSite.Owner = $myuser
    $myuser.Update()
    $web.Update()
    $myuser.IsSiteAdmin = $TRUE
    $myuser.Update()
    $web.Dispose()
    #$site.Dispose()
}

function SetRequetPermission([object]$TheSite, [string]$EmailAddress)
{
    foreach($web in $TheSite.AllWebs)
    {
        $Myurl = $web.url
        Write-host $Myurl
        if (!$web.HasUniquePerm)
        {
            Write-Host "Access Request Settings is inherited from parent."
        }
        elseif($web.RequestAccessEnabled)
        {
            Write-Host "Access Request Settings is enabled."
            write-host $web.RequestAccessEmail
            if ($web.RequestAccessEmail -ne $EmailAddress)
            {
                Write-Host "Email needs to be updated."
                $web.RequestAccessEmail = $EmailAddress
                $web.Update()
                Write-Host "Email changed successfully:", $EmailAddress
            }
        }
        else
        {
            Write-Host "Access Request Settings not enabled."
        }
    }
}

function Check-SiteCollection([string]$WebAppURL, [string]$TemplateFormat, [string]$AccountAdmin, [string]$EmailAddressAdmin)
{
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null

    $Thesite = new-object Microsoft.SharePoint.SPSite($WebAppURL)
    $oApp = $Thesite.WebApplication

    foreach ($Sites in $oApp.Sites)
    {
        #Write-Host "Site URL", $Sites.URL
        if($Sites.URL -Like $TemplateFormat)
        {
            $mySubweb = $Sites.RootWeb
            #Write-Host "Web URL", $mySubweb.URL
            #AddAccountAdmin $Sites $mySubweb $AccountAdmin 
            SetRequetPermission $Sites $EmailAddressAdmin
        }
    }
    $Thesite.Dispose()
}

Check-SiteCollection “http://MySharePointWeb” "*/sites/MySiteCol-*Test" "DOMAIN\LoginAccount" “EmailAddress@mycompany.com


Ce script n’a pas été testé sur SharePoint 2010 ou 2013, mais son format très simple doit être utilisable tel que sous 2010/2013.

Romelard Fabrice [MVP]

PowerShell: Comment mixer NAGIOS et PowerShell pour le monitoring applicatif

Nous savons depuis longtemps que PowerShell est le langage de Scripting ultime pour les plateformes Microsoft. Cette solution nous permet de lancer des commandes complexes, aussi bien dans le monde système (par exemple, les services Windows) que dans le monde applicatif (Par exemple, la gestion de solution SharePoint).

De nombreuses entreprises utilisent aussi une solution Open Source pour le monitoring des infrastructures et NAGIOS est une référence de ce domaine. Cette solution est très modulaire et contrôle les serveurs Windows avec l’aide d’un agent installable directement sur les servers: NSClient.

Cet agent propose de nombreuses actions de surveillance de base, mais offre aussi l’activation de modules supplémentaires à travers son fichier de configuration (NSC.ini). Tout se passe par les “External Scripts” qui exigent que la ligne du “NSC.ini” soit décommentée:

  • CheckExternalScripts.dll

Une fois cette option activée, on peut développer son script PowerShell qui doit toujours renvoyer 4 valeurs possibles en EXIT:

  • 0: OK
  • 1: WARNING
  • 2: CRITICAL
  • 3: UNKNOWN

La valeur de sortie (équivalent de ERRORLEVEL) est testable sous PowerShell avec la variable: $LASTEXITCODE ou $?

Ainsi, le script peut être du format :

function Get-Check-LastExecution()
{
    [int]$ExitCode = 0
    if($myCaseResults -lt 0)
    {
        Write-Host "UNKNOWN: PowerShell Check did not work - No results"
        $ExitCode = 3
    }
    elseif($myCaseResults -lt 10)
    {
        Write-Host "OK:", $myCaseResults, " results for this test"
    }
    elseif($myCaseResults -lt 100)
    {
        Write-Host "WARNING:", $myCaseResults, " results for this test"
        $ExitCode = 1
    }
    else
    {
        Write-Host "CRITICAL:", $myCaseResults, " results for this test"
        $ExitCode = 2
    }
    return $ExitCode
}
exit Get-Check-LastExecution

Cette fonction vous laisse la place à toute votre imagination pour adapter ce code à votre besoin, du moment que vous restez dans ce cadre des 4 valeurs possibles du code retour (0, 1, 2 ou 3)

Lorsque votre script PS1 est utilisable selon votre besoin, il doit être stocké dans le sous-répertoire “scripts” de NSCClient.

Vous devez alors éditer à nouveau le NSC.INI et ajoutez la ligne dans la rubrique “[External Scripts]” :

  • check_ps_myCheckToDo=cmd /c echo scripts\myCheckToDo.ps1; exit $lastexitcode | powershell.exe -command -

Il ne reste plus qu’à ajouter cette tache dans les taches effectuées par le serveur NAGIOS et la planification adaptée, sous la forme :

  • check_by_nrpe_hostparam!MyServer.Domain!check_ps_myCheckToDo!’’

Le check sera alors ajouté dans les contrôles réguliers et permet un monitoring fin des applications selon les besoins.

Attention, le module NSCClient de la machine exécute le script sans droit réseau (local system) ce qui ppeut vous bloquer si vous tentez d’accéder à un SQL Server distant.

Romelard Fabrice [MBA]

SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013

Dans le cas de la migration d’une ferme SharePoint 2007 vers 2013, nous avons vu que le processus implique le passage par une ferme SharePoint 2010.

Il existe de nombreux cas où les administrateurs ont développé (ou fait développer) des modèles de site sous SharePoint 2007. Ce fut d’ailleurs un des arguments massues de Microsoft à l’époque, car c’était plutôt simple à faire. Pour rappel, les articles suivant (ce qui ne nous rajeunit pas):

Quoi qu’il en soit, si c’est la seule partie qui est nécessaire pour votre migration, il est certainement plus rapide de recréer ces modèles de sites en repartant de celui qui a été fait sous 2007 et recréant le même tout d’abord sous 2010, puis 2013.

Je vous invite pour cela à regarder cet ancien article pour 2007 qui est totalement adaptable pour 2010 (répertoire 14) ou même 2013 (répertoire 15):

La question se pose pour générer le fichier WSP qui pourra alors être chargé dans SharePoint 2010 ou 2013.


Création du WSP pour SharePoint 2010

Pour cette partie, j’ai utilisé l’évolution de WSPBuilder qui est resté en Beta, mais qui fonctionne correctement pour un cadre simple tel que celui-ci:

Une fois le MSI téléchargé et installé, on trouve les fichiers WSPBuilder sous le répertoire:

  • C:\Program Files (x86)\WSPTools\WSPBuilderExtensions\

Il est préférable de copier ces fichier dans un répertoire de travail que nous utiliserons pour la suite (C:\TOOLS\WSPBuilder\WSPBuilder2010\). Dans ce même répertoire, on crée un sous-répertoire 14, dans lequel on va reproduire toute l’arborescense de SharePoint avec les différents fichiers de notre modèle:

image

Une fois cette organisation créée, on peut simplement double-cliquer sur le fichier WSPBuilder.exe ou créer un fichier CMD tel que le suivant :

WSPBuilder.exe -WSPName MY_TEMPLATE_2010.WSP
stsadm -o retractsolution -name MY_TEMPLATE_2010.WSP -immediate
PING 1.1.1.1 -n 1 -w 90000 >NUL
stsadm -o deletesolution -name MY_TEMPLATE_2010.WSP
stsadm -o addsolution -filename MY_TEMPLATE_2010.WSP
stsadm -o deploysolution -name MY_TEMPLATE_2010.WSP -immediate -allowgacdeployment

Au passage, la ligne du Ping permet de laisser le temps au SPTimer de désinstaller la solution si elle existait déjà (Cf. l’astuce en ligne: How to insert delays in your batch files).

Une fois le tout exécuté, votre solution est générée proprement, déjà déployée et utilisable pour votre migration, ou même vos nouveaux sites.

Qu’en est-il pour SharePoint 2013 ?


Création du WSP pour SharePoint 2013

WSPBuilder n’existe pas pour SharePoint 2013 et n’existera probablement jamais (dernière publication sur le projet CODEPLEX date de Janvier 2010). En revanche, la version existante pour 2010 va pouvoir nous servir.

En effet, lors de notre compilation pour le projet 2010, nous pouvons modifier le fichier de config “WSPBuilder.exe.config” pour mettre la clé suivante à true :

  • <add key="BuildDDF" value="true"/>

Ainsi lors de la prochaine exécution pour notre modèle 2010, nous avons le détail du DDF utilisé par MAKECAB.EXE:

Une fois ce fichier “makecab.ddf”  obtenu à la racine du WSPBuilder, il nous faut encore le fichier MANIFEST.XML qui est créé à la volée et ajouté dans le WSP. Ainsi, il faut extraire le fichier MANIFEST.XML en changeant l’extension WSP vers CAB.

 image

On extrait le fichier manifest pour le mettre dans un répertoire de travail avec notre arborescence 15 et toute l’organisation de SharePoint 2013:

image

On édite le fichier makecab.DDF et manifest.xml pour modifier les chemins d’accès si nécessaire. Le fichier makcab.ddf sera semblable à celui-ci au final :

;*** MAKECAB - DDF done by Fabrice Romelard
;
.OPTION EXPLICIT     ; Generate errors on variable typos
;
.Set CabinetNameTemplate=MY_TEMPLATE_2013.WSP          ; The name of the WSP file
.set DiskDirectoryTemplate=CDROM      ; All cabinets go in a single directory
.Set CompressionType=MSZIP            ;
.Set Cabinet=on                        ;
.Set Compress=on                    ;
.Set DiskDirectory1=.                  ; Use the specified directory for the output CAB file
;
;*** Disable size limits for wsp (cab) files ;
;
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0
;
;*** Files to zip                    ;
;
"C:\TOOLS\SharePoint_Migration\MAKECAB\15\template\1033\XML\WEBTEMP_MySP.XML" "1033\XML\WEBTEMP_MySP.XML"
"C:\TOOLS\SharePoint_Migration\MAKECAB\15\template\sitetemplates\MySPSTS\default.aspx" "MySPSTS\default.aspx"
"C:\TOOLS\SharePoint_Migration\MAKECAB\15\template\sitetemplates\MySPSTS\MySP.master" "MySPSTS\MySP.master"
"C:\TOOLS\SharePoint_Migration\MAKECAB\15\template\sitetemplates\MySPSTS\xml\ONET.XML" "MySPSTS\xml\ONET.XML"
"C:\TOOLS\SharePoint_Migration\MAKECAB\15\template\IMAGES\MySP\bandeau_accueil.gif" "IMAGES\MySP\bandeau_accueil.gif"
"C:\TOOLS\SharePoint_Migration\MAKECAB\15\template\IMAGES\MySP\MySPSiteTemplatePrev.png" "IMAGES\MySP\MySPSiteTemplatePrev.png"
"C:\TOOLS\SharePoint_Migration\MAKECAB\15\template\IMAGES\MySP\MySPSiteTemplatePrev.png.old" "IMAGES\MySP\MySPSiteTemplatePrev.png.old"
"C:\TOOLS\SharePoint_Migration\MAKECAB\15\template\IMAGES\MySP\sgsfeatureicon.gif" "IMAGES\MySP\sgsfeatureicon.gif"
"C:\TOOLS\SharePoint_Migration\MAKECAB\manifest.xml" "manifest.xml"
;
;*** The end  ; Can be launched via the command: makecab /F makecab.ddf

Il ne vous reste plus qu’à recréer un fichier PowerShell similaire au précédent CMD pour 2010 tel que :

makecab /F makecab.ddf
Uninstall-SPSolution -Identity MY_TEMPLATE_2013.WSP -CompatibilityLevel All
PING 1.1.1.1 -n 1 -w 30000
Remove-SPSolution  -Identity MY_TEMPLATE_2013.WSP -Force -Confirm:$false
Add-SPSolution -LiteralPath "C:\TOOLS\SharePoint_Migration\MAKECAB\MY_TEMPLATE_2013.WSP" -Confirm:$false
Install-SPSolution -Identity SGS_MY_2013.WSP -GACDeployment -CompatibilityLevel All -Confirm:$false

Ceci une fois exécutée vous permettra d’avoir une solution propre pour votre migration (pour ce qui est des modèles de sites).

image


Conclusion

Cette logique peut aussi être utilisée pour les feature simples, les modèles de listes ou de documents, …

En revanche, si vous avez des composants utilisant du code .NET avancé, vous devrez passer par du développement et donc Visual Studio.NET deviendra l’outil de prédilection.

Romelard Fabrice [MBA]

SharePoint : Bug sur la gestion des permissions et la synchronisation Office

Nous avons vu dans un précédent message comment supprimer les accès depuis Office vers des listes SharePoint :

Tout ceci fonctionne parfaitement sauf dans un contexte particulier que je vais présenter.

Attention:
Il faut noter que ce cas a été constaté sur SharePoint 2007, mais qu’il persiste avec SharePoint 2013 (et très certainement avec 2010). Il est fort probable qu’il soit aussi présent dans SharePoint OnLine.


Définition du besoin des utilisateurs

Les utilisateurs souhaitent un cas assez simple :

  • Permettre à des utilisateurs de contribuer à une liste de type TaskList sans pour autant laisser ces mêmes “Contributeurs” la synchronisation via Outlook

La solution pour répondre à ce besoin est bien sur d’utiliser la procédure présentée dans l’article précédent :


Mise en place de la réponse à ce besoin

On édite ainsi le niveau de permissions “Edit” dans SharePoint 2013 (qui est associé avec les Membres)

image

On désactive les cases (dans le groupe Site Permissions):

  • Use Remote Interfaces
  • Use Client Integration Features

image

On enregistre alors cette configuration et on ajoute l’utilisateur souhaité dans les membres de ce site, qui est de base associé au niveau de permissions “Edit”

image

Mon compte est donc ajouté dans les membres contributeurs de ce site, sans bénéficier de la synchronisation avec Office (et Outlook)

image

En se connectant sur le site avec mon compte membre, je vois dans la liste “Mytask” créée pour l’occasion, héritant des permissions du site, que les boutons Office sont désactivés

image

Jusqu’ici, tout se passe parfaitement comme le souhaitent les utilisateurs.


Cas du bug

Toujours sur ce même site, le responsable souhaite ajouter une librairie documentaire afin de mettre à la disposition des contributeurs la documentation d’utilisation de ce site et de la liste des taches.

Cette documentation ne doit être disponible qu’en lecture pour ces utilisateurs et il est donc évident que l’héritage des permissions ne peut pas être conservé pour ces membres.

Nous allons donc dans les paramètres de la librairie des documentations (créée pour l’occasion)

image

Puis, il faut éditer les permissions de cette liste

image

Et casser l’héritage des permissions du parent (donc du site)

image

On choisi le groupe membre et on clique sur “Edit User Permission”

image

On change les permission de ce groupe avec uniquement le droit “Read” sur cette liste et on valide par OK

image

Maintenant, si on retourne sur le site, et la liste des taches, avec le compte utilisateur apartenant au groupe des membres

image

On voit apparaitre les boutons de synchronisation avec Office, alors que cela ne devrait pas arriver !!!


Explication du Bug

Le cas s’explique par un comportement natif de SharePoint suite à cette action de cassure d’héritage des permissions dans un niveau du site.

En effet, si on retourne dans les permissions à la racine du site pour le groupe “Membre”, on voit de base qu’il est censé avoir uniquement le niveau de permission “Edit”

image

Mais dans le détails, un second niveau de permissions apparaît alors “Limited Access”

image

Ce niveau de permission n’est pas supprimable, même si on annule la cassure d’héritage, il reste présent, comme dans la capture ci dessous

image

En allant dans les détails des niveaux de permissions, on retrouve ce niveau “Limited Access”

image

Et le détail des permissions associées à ce niveau nous montre qu’il est autorisé pour la synchronisation avec Office

image

L’interface graphique ne permet pas de changer ces options !!!

On trouve d’ailleurs les détails des permissions associées à ce niveau site le site Microsoft :

image


Work Around pour annuler cette effet

Il faut savoir qu’il n’y a pas de patch pour ce cas qui a aussi été constaté dans un autre contexte (les sites Web Publics basés sur SharePoint):

Cela ne nous aide pas dans notre contexte, car nous sommes uniquement sous SharePoint Foundation. Il n’est pas possible de supprimer le niveau de permission “Limited Access” en utilisant le code PowerShell disponible ici :

$web = Get-SPWeb -Identity http://MySharePointWebApp/sites/PermissionMgt $PermissionLevel=$web.RoleDefinitions $PermissionLevel.Delete("Limited Access")

Le retour d’erreur de cette commande est le suivant :

  • You cannot remove the Limited Access or Full Control permission levels

La solution est donc d’utiliser PowerShell pour modifier les permissions associées avec ce niveau et supprimer la synchronisation Office. Le code est le suivant :

function Change-Permission-Level([string]$SiteURL, [string]$PermissionName)
{
    $web = Get-SPWeb -Identity $SiteURL
    $PermissionLevels=$web.RoleDefinitions
    foreach($MyPermission in $PermissionLevels)
    {
        Write-Host " -------------------------------"
        Write-Host "Permission Name:", $MyPermission.Name
        Write-Host "  -> Permission Description:", $MyPermission.Description
        Write-Host "  -> Permission Hidden:", $MyPermission.Hidden
        Write-Host "  -> Permission BasePermissions:", $MyPermission.BasePermissions
        Write-Host " -------------------------------"

        if($MyPermission.Name -eq $PermissionName)
        {
            $MyPermission.BasePermissions = "ViewFormPages, Open, BrowseUserInfo"
            $MyPermission.Update()
            Write-Host "  -> Permission Changed remove Office Integration !!!"
        }
        Write-Host " -------------------------------"
    }

    $web.dispose()
}

Change-Permission-Level “http://MySharePointWebApp/sites/PermissionMgt” "Limited Access"

Une fois la commande exécutée, on peut retourner dans le site avec le compte membre et constater que les options Office ont disparu

image

Cette action semble changer les permissions du niveau “Limited Access” pour de bon et la synchronisation ne revient plus.


Conclusion

Ce bug a été constaté par des utilisateurs et expliquée avec le Support Microsoft, notamment Ovidiu Stefanescu que je remercie pour son aide.

Le Work Around est fonctionnel et il y a peu de chance qu’un patch soit développé pour palier à ce cas spécifique, il faut aussi savoir que ce script fonctionne aussi pour SharePoint 2007 (avec une petite adaptation pour le départ).

En vous souhaitant une bonne lecture.

Romelard Fabrice [MBA]

SharePoint 2007 : La gestion des permissions pour les Workflows

En tant qu’archéologue SharePointesque, je viens de tomber sur uncas qui nous a fait perdre pas mal de temps.

En effet, SharePoint 2007 peut être utilisé pour créer des WorkFlows via SharePoint Designer 2007 [SPD]. Ces Workflows sont alors publiés directement depuis SPD dans le sous site choisi (Scope SPWeb).

image

Il est possible de gérer les permissions de l’ensemble de ces Workflows, afin de donner les droits à une personne spécifique, en cliquant avec le bouton droit sur “WorkFlows” et choisissant “properties”

image

On trouve alors un texte sur le bas vous proposant de gérer les permissions depuis un navigateur :

image

Ce lien n’est pas visible dans les pages d’administration et comporte le nom de la liste “WorkFlows” via son GUID tel que :

Vous trouverez alors les permissions d’origines ou celles modifiées si l’ancien administrateur avait modifié celles-ci:

image

Il ne vous reste plus qu’à adapter ces permissions à vos besoins.

Romelard Fabrice [MVP]

SharePoint : Comment supprimer les connexions discrètes entre Outlook et des listes SharePoint

Comme toute solution informatique, SharePoint ou Outlook sont des produits magiques pour les utilisateurs.

Ainsi, il arrive bien souvent qu’un utilisateur clique sur un bouton, un lien, un menu, …, sans aucune idée sur les impacts réels de cette action.

image

L’exemple classique est la connexion entre Outlook et une liste SharePoint (Calendar, Contact, Task, …) qui va être persistante sans que l’utilisateur n’ai conscience de la présence.

Ceci n’est pas particulièrement grave si l’utilisateur n’a que les droits de lecture, mais devient beaucoup plus risqué si celui-ci a bien les droits d’écriture sur la liste. En effet, lors de la synchronisation entre le client riche et la liste SharePoint, Outlook peut alors ouvrir tous les éléments de cette liste sans modifier le contenu, mais en créant une nouvelle version de chaque Item. Ainsi dans le cas d’une Task List avec des Alertes et des items attribués à différentes personnes, ce sont des centaines de messages Emails qui partent dans tous les sens.

Après analyse avec le Support de Microsoft, ce cas était in comportement non souhaité par l’utilisateur, mais normal au niveau technique.


Comment supprimer les liens existants

La question a donc été de supprimer les liens existants sur les postes utilisateurs (Outlook), et nous retrouvons le côté magique qui a distance permet difficilement de trouver rapidement la solution.

Une astuce est donc de demander aux utiliusateurs de faire trois clicks et une capture d’écran:

Click 1

image

Click 2

image

Click 3

image

Il vous suffit alors de supprimer les connexions qui ne vous intéressent pas et valider par “Close”.


Conclusion

Sans être réellement révolutionnaire, cette astuce a le mérite d’être simple pour les utilisateurs finaux qui ne seront pas effrayés par la manipulation. Dans le même temps, cela vous permettra de gagner un temps précieux

Je vous invite à regarder cet article pour bloquer cette fonctionnalité de synchronisation sur une liste ou un site donné :

Fabrice Romelard [MBA Risk Management]

Windows : Script PowerShell pour stopper une liste de serveurs dans un ordre spécifique - Idéal pour les fermes SharePoint

Tout fermier SharePoint est confronté un jour ou l’autre à cette question d’arrêt de serveur.

Il est évident que pour une infrastructure Stand Alone (1 serveur) ou Small farm (2-3 serveurs), cela se fera très simplement et ne posera pas de soucis particulier, tant que le serveur SQL est arrété en dernier.

Le cas devient plus délicat lorsqu’on commence à gérer plusieurs Large Farm (plus de 4 serveurs) dans un ou plusieurs DataCenter.

Le script suivant permet donc de stopper les machines, en utilisant la commande standard de Windows “Shutdown /s”, suivant l’ordre donné dans la liste des machines.


# Specific parameters
$ServersList = "SPWEBSERVER1", "SPWEBSERVER2", "SPWEBSERVER3", "SPEXCELSERVER1", "SPSEARCHSERVER2", "SPAPPSERVER2", "SPDBSERVER1", "SPDBSERVER2"
$Logfile = "C:\SHAREPOINT_SERVERS_STOP.log"

# Generic parameters
[int]$WaitTime = 20
[int]$Counter = 0
[DateTime]$mydate = get-date
[string]$MyCommand = ""
[string]$feedback = ""
[string]$ProcessFileToExec = "shutdown.exe"
[string]$ProcessFileParam = "/s /f /t 3 /m \\"

Function LogWrite
{
   Param ([string]$logstring)
   Add-content $Logfile -value $logstring
}

function New-Sleep    {
    [cmdletbinding()]
    param(
      [parameter(ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Mandatory=$true, HelpMessage="No time specified")]
        [int]$s
    )
  for ($i=1; $i -lt $s; $i++) {
    [int]$TimeLeft=$s-$i
      Write-Progress -Activity "Waiting $s seconds..." -PercentComplete (100/$s*$i) -CurrentOperation "$TimeLeft seconds left ($i elapsed)" -Status "Please wait"
    Start-Sleep -s 1
    }
    Write-Progress -Completed $true -Status "Please wait"
} # end function New-Sleep

Function CreateIntroLog
{
    LogWrite "================================================="
    LogWrite "--- SCRIPT STARTED:", $mydate.ToString(), " ---"
    LogWrite "================================================="
    write-host ""
    write-host ""
    write-host ""
    write-host ""
    write-host ""
    write-host ""
    write-host ""
    write-host ""
    write-host ""
    write-host "================================================="
    write-host -ForegroundColor Green "--- SCRIPT STARTED:", $mydate.ToString(), " ---"
    write-host "================================================="
}

Function ResetDNS
{
    write-host "================================================="
    write-host "===          Flushing DNS             ==="
    ipconfig /flushdns | out-null
    write-host "===          Registering DNS          ==="
    ipconfig /registerdns | out-null
    write-host "================================================="
}

Function TestPingServer([string]$MyServer)
{
    if(Test-Connection -Cn $MyServer -BufferSize 16 -Count 1 -ea 0 -quiet)
    {
        write-host "   Connection OK to $MyServer"
        return $true
    }
    ELSE
    {
        write-host " >>> Problem connecting to $MyServer <<< "
        return $false
    }
}

function StartProcess()
{
    # Create the stopwatch
    [System.Diagnostics.Stopwatch] $sw;
    $sw = New-Object System.Diagnostics.StopWatch
    $sw.Start()
    $Counter = 0
    cls
    ResetDNS
    CreateIntroLog
    foreach($MyServer in $ServersList)
    {
        $Counter ++
        write-host " ----------------------------------------------------"
        write-host " Server to stop:", $MyServer, "- Server Number:", $Counter
        [bool]$ResultPing = TestPingServer $MyServer
        if($ResultPing)
        {
            write-host -ForegroundColor Yellow  " - STOP SERVER ", $MyServer, " - "
            $MyCommand = $($ProcessFileToExec + " " + $ProcessFileParam + $MyServer)
            write-host $MyCommand
            try
            {
                invoke-expression -command "  $MyCommand" -Verbose -OutVariable myOut
                foreach($MyLine in $myOut)
                {
                    write-host "Line", $MyLine
                }
                $feedback = [string]::join(" ", @($myOut))
                write-host " Return: ", $feedback
            }
            catch [system.exception]
            {
                $feedback = $(" [Function Shutdown caught a system exception]: " + $_.Exception.Message)
                write-host -ForegroundColor Red " Return ERROR: ", $feedback
            }
            finally
            {
                write-host -ForegroundColor Green " Wait for the next Server stop:", $WaitTime
                LogWrite " ----------------------------------------------------"
                LogWrite " Server to stop:", $MyServer, "- Server Number:", $Counter
                LogWrite " Execution Time:", $mydate
                LogWrite " Command:", $MyCommand
                LogWrite " Return:", $feedback
                LogWrite " ----------------------------------------------------"
                New-Sleep -s $WaitTime
            }
        }
        else
        {
            write-host -ForegroundColor Red "--- NO PING TO SERVER:", $MyServer, " --- "
            write-host -ForegroundColor Red "  Shutdown Impossible"
            LogWrite " ----------------------------------------------------"
            LogWrite " No Ping to server:", $MyServer, "- Server Number:", $Counter
            LogWrite " Shutdown Impossible"
            LogWrite " Execution Time:", $mydate
            LogWrite " ----------------------------------------------------"
        }
        write-host " ----------------------------------------------------"
    }
    $sw.Stop()
    # Write the compact output to the screen
    write-host " "
    write-host " "
    write-host " ------------------------------------------------------------- "
    write-host -ForegroundColor Green " ----", $Counter " Servers stopped in Time: ", $sw.Elapsed.ToString(), "----"
    write-host " ------------------------------------------------------------- "
    write-host " "
    LogWrite "================================================="
    LogWrite " ---", $Counter, " Servers stopped in Time: ", $sw.Elapsed.ToString(), "---"
    LogWrite "================================================="
}

cls
StartProcess


Une fois les deux variables de départ enrichies, il vous suffit de lancer une commande PowerShell (en mode Administrateur), avec un compte Administrateur du domaine (ou qui sera administrateur des machines à éteindre).

Romelard Fabrice [MBA Risk Mgt]

SharePoint : Attention à la configuration des fichiers de Trace (ULS)

Pour les fermiers SharePoint, le paramètre des logs est un casse tête chinois. En effet, il faut sans arrêt arbitrer entre :

  • Combien de jours de dois historiser pour revenir en cas de soucis à la date en question, sans pour autant massacrer mon volume disque pour rien ?

Cette qquestion est encore plus épineuse lorsque l’on voit les options de configuration possibles (avec un net avantage pour SP2010 et 2013 pour la compréhension de l’utilisateur) :

SharePoint 2013 : Monitoring > Configure diagnostic logging

image

SharePoint 2010 : Monitoring > Configure diagnostic logging

image

SharePoint 2007 : Operation > Diagnostic logging

image

On voit dans les deux versions 2010 et 2013, qu’il faut entrer le nombre de jours d’historisation dans le champs, sans aucune idée sur le volume que cela donnera pour l’intervalle choisie.

Dans la version 2007, la configuration semble plus fine sur ce point, mais au final le problème reste entier, car cette configuration ne conservera que XX fichiers de log par tranche de temps choisie.

Pour faire simple, dans le cas de 2007, la configuration entrée donne :

  • 100 [fichiers rotatifs] * 0.5 [Heure par fichier] = 50 [Heures de log] / 24 [Heures par jour] = environ 2 [jours de log]

Ce point est crucial, car dans le cas d’un soucis rencontré le vendredi soir, vous n’avez plus de trace le lundi matin, ce qui est génant pour le Debug à suivre. Il est préférable de choisir une valeur permettant une historisation de 7 jours glissant.

Outre la correction de cette configuration pour conserver un minimum d’une semaine de Log, ce qui donne dans le cas de notre version 2007 :

  • Number of minutes to use a log file: 60 min
  • Number of log files: 24*7 = 168

Il faut surtout compresser automatiquement le répertoire de ces logs via Windows (quelque soit la version de SharePoint).

Ceci peut se faire simplement via:

Windows, avec les propriétés avancées du répertoire

image

ou via PowerShell, avec la fonction suivante basée sur les articles disponibles à ces adresses:


Function CompressFolder ($folder)
{
    # Replace \ with \\ for WMI
    $wmiPath = $folder.Replace("\","\\")
    $wmiDirectory = Get-WmiObject -Class "Win32_Directory" -Namespace "root\cimv2" -ComputerName $env:COMPUTERNAME -Filter "Name='$wmiPath'"
    # Check if folder is already compressed
    If (!($wmiDirectory.Compressed))
    {
        Write-Host -ForegroundColor White " - Compressing $folder and subfolders..."
        $compress = $wmiDirectory.CompressEx("","True")
    }
    Else {Write-Host -ForegroundColor White " - $folder is already compressed."}
}


Ce qui donne dans le cas d’un serveur SharePoint 2013 de test un résultat comme suit :

image

Romelard Fabrice [MBA Risk Management]

MBA : Quelle formation après un MBA ?

Afin de poursuivre dans les réflexions menées depuis le départ de cette aventure :

Une fois le diplôme MBA obtenu, la question de la suite se pose pour une partie des élèves. En effet, l’énergie positive requise pour reprendre ses études ne disparait pas pour tout le monde.

Il convient alors de réfléchir à la suite possible de cette formation et je vais donc essayer de présenter quelques choix accessibles à partir de notre MBA.


PhD & DBA

Aquatint_of_a_Doctor_in_divinity_at_the_University_of_Oxford,_shown_wearing_convocation_dressLa voie royale pour le monde universitaire est le Doctorat (ou PhD en anglais), cette formation se fait directement à travers l’université ou une école agréée.

Le principe est de préparer un dossier de thèse durant plusieurs mois qui devra être présenté en fin de cursus devant un jury académique.

Il existe une version adaptée pour les Business Schools :

Ces formations sont particulières aux écoles de commerce ou grandes écoles, dont des listes sont présentes ici :

Je n’entrerai pas en détail sur ces formations, mais il faut surtout réaliser que c’est réellement un travail de recherche qui nécessite beaucoup de temps pour lire et écrire ses différents rapports tout au long des deux années (en moyenne).


Certificats professionnels

Certificat_aptitude_professionnelCette seconde possibilité dépendra alors de votre secteur d’activité. En effet, suivant le milieu professionnel dans lequel on évolue, cette question est largement connue.

Tous les acteurs du monde informatique connaissent les certifications des éditeurs de logiciels (Microsoft, Cisco, ORACLE, …).

Mais cette question est bien plus globale que ces simples reconnaissances techniques. Il existe certains métiers où le certificat est une étape quasiment obligatoire pour pratiquer. Dans certains cas, la conservation de ce certificat nécessite même des formations régulières de remise à niveau, selon des règles très précises.

C’est le cas par exemple du Certificate Internal Auditor (CIA):

Si vous envisagez d’ailleurs de vous présenter à cette certification, il peut être très utile de suivre une formation de préparation, telle que :

Il existe donc de très nombreux certificats qui peut donner une véritable valeur ajouté à votre profil professionnel.


Formations professionnelles spécifiques

travailleur_nacelleDans certaines situation, il est intéressant de regarder des formation plus pratiques, même après une formation telle que le MBA.

En effet, si à la suite de votre formation, vous envisagez de monter (ou racheter) une entreprise spécialisée dans un domaine très spécifique, une formation appliquée vous permettra de mieux comprendre les problématiques associées (exemple, le rachat d’un garage automobile sans rien connaître à la mécanique peut entrainer de grosses erreurs stratégiques).

Dans ce contexte, des organismes existent tels que :

Ou encore, certaines écoles ou associations plus spécialisées telle que :

Tout dépend surtout de votre souhait, même pour élever des chèvres dans le larzac, il existe forcément une formation de base qu’il est préférable de suivre.


Formations courtes en entreprise

formationGroupeJe ne m’ettendrai pas trop sur ce point, car ces formations sont souvent associées à l’activité professionnelle en cours, ou encore à l’entreprise. On y retrouve les grands classiques tels que :

  • Gestion de projet
  • Gestion du temps / stress
  • Travail en monde international

Ces catalogues de formations sont très souvent gérés directement par les ressources humaines de l’entreprise.

On peut aussi inclure dans ce cadre, les formations techniques pour des besoins particuliers à l’activité professionnelle comme :

  • Formation transpalette
  • Formations à des techniques spécifiques
  • Formations à des languages de programmation informatiques


Formations à distance classiques

FOADLes formations à distance classiques permettent d’obtenir un diplôme officiel, sans suivre une scolarité classique. C’est un système très connu des personnes devant voyager régulièrement et ne voulant pas perdre d’année scolaire pour leurs enfants.

L’organisme officiel pour ce type de besoin est le Centre national d'enseignement à distance (CNED), mais il existe aussi des opérateurs privés offrant ce type de prestation tel que Educatel.

Ces formations sont généralement basées sur des formats de diplômes officiels. Ainsi, le principe est de préparer le diplôme via la formation et se présenter aux examens en candidat libre.

Différents articles plus détaillés sont disponibles sur Wikipedia :


Cours en ligne ouvert et massif (ou Massive Open Online Course – MOOC)

MOOC_poster_mathplourdeLa formation en ligne a évolué fortement avec l’arrivée, au début 2000, des MOOC.

Le principe de ces formations est d’être ouvert à tous, quelque soit son origine ou son parcours. Il n’existe donc pas de filtre à entrée (diplôme, compétences, niveau, …).

Les formations sont généralements basées sur des contenus en vidéo et texte, qui sont mis en ligne sur des plateformes Web. En revanche, même si la plupart sont gratuites, il existe des MOOC payants, ou partiellement payants, mais le prix reste généralement accessible.

Vous pouvez trouver différentes listes des formations disponibles, telles que :

Ces solutions en ligne vont très certainement se structurer dans les prochains mois, car les formations proposées aboutissent à des certifications qui ne sont pas encore reconnues. En revanche, la communication de plus en plus importante autour de ces solutions les placent dans la lumière.

Le certificat, sans être un diplôme mettra en avant votre profil professionnel, car il montrera que vous avez cherché à vous former par vous même, ce qui est toujours un plus.


Conclusion

Sans être trop exhaustif, cette liste évoque un ensemble de pistes qu’il faut ensuite adapter à ses besoins, à son temps disponible et à sa motivation. Le critère premier sera d’ailleurs cette motivation, car c’est elle qui vous permettra de tenir dans le temps.

Pour ma part, à la fin de MBA - Risk Management en Aout 2013, j’ai poursuivi par un Certificate of Advanced Studies (CAS) en Audit Interne (qui se termine en Mai 2014), tout en suivant différents MOOC, dont les suivants :

Je profite principalement des temps de transport pour suivre les vidéos des formations en question.

Romelard Fabrice [MBA Risk Management]

SharePoint 2013: La gestion des demandes d’accès utilisateur

La gestion des demandes d’accès a un peu changé dans la version 2013 de SharePoint.


Avec SharePoint 2010 ou 2007

En effet, dans les versions précédentes (2007 ou 2010), la demande d’accès se faisait uniquement par email envoyé au premier site collection administrator :

  • SharePoint 2010: Sites Settings > Site Permissions

image

On définit ensuite simplement l’adresse email du responsable

image

L’utilisateur voit alors une fenêtre demanadant à justifier cette demande

image

Une fois la demande envoyée, il lui faut attendre sans suivi de cette demande

image

Le responsible du site reçoit de son coôté un message tel que celui-ci lui avec la justification fournie

SNAGHTML4e21c461

Il ne lui reste plus qu’à cliquer sur le lien pour ajouter l’utilisateur dans les permissions du site.

  • SharePoint 2007: Sites Settings > Advanced Permissions

image

On retrouve la même logique avec l’adresse email du responsable

image

L’utilisateur poste aussi sa demande d’accès dans le site

image

Et l’administrateur reçoit exactement le même email que pour SharePoint 2010.

Le fait est que cette gestion est très dépendante d’une adresse email exclusive, qui doit être mise à jour avec les changements de responsables de sites.

Ce n’est donc clairement pas une solution utilisable en modèle SaaS, et donc un gros changement a été apporté dans SharePoint 2013.


Avec SharePoint 2013

La gestion des demandes d’accès est désormais dans un menu dédié du site d’administration, même si son activation est toujours au niveau des sites permissions (comme pour SharePoint 2010):

  • Sites Settings > Site Permissions

image

Il faut ensuite cocher son activation et entrer l’adresse email adaptée

image

Un menu supplémentaire est disponible dans l’interface d’administration

  • Site Settings > Access requests and invitations

image

Celui-ci permet à tout administrateur du site (membre des sites collection administrators), de gérer les demande d’accès en cours sans pour autant reçevoir le message électronique.

Ainsi en cliquant sur ce lien, l’administrateur voit les demandes postées et même l’historique des précédentes demandes

image

Il peut alors activer ou non ce droit en acceptant ou refusant la demande

image

Il est aussi possible d’utiliser la partie “Conversation” pour demander des informations au demandeur des permissions

image

Qui verra alors de son côté le message et répondre à la question posée

image

Une fois cette validation effectuée, l’administrateur peut accepter ou refuser cette demande de permission qui se retrouvera alors dans l’historique

image

Vision Utilisateur

Pour l’utilisateur, la premiere connection est semblable à l’écran ci-dessous (depuis un MAC)

clip_image001

Une fois que l’utilisateur a effectué cette demande l’écran fourni alors l’historique des messages échangés avec l’administrateur

image

Une fois cette permission accordée, l’utilisateur peut accéder à son site de manière classique suivant les permissions qui lui ont été accordées.

image


Conclusion

Cette fonctionnalité est vraiment très utile si vous comptez déléguer la gestion des permissions de vos sites SharePoint. Ainsi une équipe peut se charger de cette partie sans avoir nécessairement accès à une adresse Email partagée.

Romelard Fabrice [MBA]

SharePoint : Supprimer les accès depuis Office à une liste SharePoint

Une demande récurrente des utilisateurs est de ne pas permettre à un groupe de personnes le module d’édition de masse (edit in datasheet) ou la connection Outlook.

Ceci est possible sur toutes les versions de SharePoint en créant un niveau de permission spécifique :

  • SharePoint 2013: Settings > Site Settings > Site Permissions
  • SharePoint 2010: Site Actions > Site Settings > Site Permissions
  • SharePoint 2007: Site Actions > Site Settings > Advanced Permissions

Dans toutes les versions, vous trouvez alors le lien proposant “Permission Levels” :

SharePoint 2013

image

SharePoint 2010

image

SharePoint 2007

image


Création du niveau de permission dédié

Pour toutes les versions, il faut cliquer sur le bouton “Add a Permission Level” pour avoir le formulaire qui demande alors le nom & description

image

Puis les options à activer :

Permission sur les listes

image

Permissions sur les sites

image

Permissions de personnalisation

image

Tout se passe dans les permissions pour les Sites qui proposent deux options à ne pas cocher (pour SharePoint 2013 et 2010) :

  • Use Remote Interfaces  -  Use SOAP, Web DAV, the Client Object Model or SharePoint Designer interfaces to access the Web site.
  • Use Client Integration Features  -  Use features which launch client applications. Without this permission, users will have to work on documents locally and upload their changes.

Le premier correspond à l’utilisation des Web Services, de SharePoint Designer et de l’explorateur Windows.

Le second correspond aux options pour les clients riches Office (Outlook, Excel, Access, …).

Attention, SharePoint 2007 n’a pas exactement les mêmes options

  • Use Remote Interfaces  -  Use SOAP, Web DAV, or SharePoint Designer interfaces to access the Web site.
  • Use Client Integration Features  -  Use features which launch client applications. Without this permission, users will have to work on documents locally and upload their changes.


Utilisation du niveau de permission

Une fois ce niveau créé, il suffit alors d’aujouter ce niveau de permission à un groupe SharePoint (qui regroupera les utilisateurs souhaités).

image

Ces utilisateurs ne verront alors plus les options associées à ces clients riches.


Vision par les utilisateurs

Ainsi, lors d’un accès par un utilisateur qui se trouve dans ce groupe, les options liées à Office sont invisbles.

Si on regarde l’exemple ci-dessous pour liste de type tasklist (qui utilise Outlook, Excel, Project ou Access)

SharePoint 2013 (les boutons sont présents, mais grisés)

Avec Permissions Office Sans permissions Office
image image

SharePoint 2010 (les boutons sont grisés)

Avec Permissions Office

Sans permissions Office

image image

SharePoint 2007 (les menus ne sont pas proposés)

Avec Permissions Office

Sans permissions Office

image image


Conclusion

Ces options de sécurisation du contenu sont intéressante pour éviter les éditions massives de contenu dans les listes, en revanche, cela ne permet pas d’interdir le téléchargement du contenu par l’utilisateur. Il faudra passer par d’autres outils.

Malgré tout de nombreux gestionnaires de sites sont demandeurs de ce type d’astuce.


Liens annexes

Romelard Fabrice [MBA]

SharePoint: Comment chercher les gros fichiers d’une web application avec SharePoint 2007 et 2010

Tous les administrateurs de ferme ont le même soucis d’utilisation abusive des ressources disponibles.

Ainsi, il est régulier que les utilisateurs remontent des fichiers (image par exemple) ayant des résolutions allucinantes pour les présenter en vignette. Le fait est que ces fichiers prennent une place importante et peut entrainer d’autres soucis comme pour la saturation des quotas.

Je propose donc le script PowerShell suivant (qui fonctionne avec SharePoint 2007 et 2010)

[bool]$Verbose = $false

function Get-SPSite-Usage-Information([object]$TheSite)
{
    write-host "----------------------------------------------------- "
    write-host " Site Usage: ", $TheSite.Url
    $UsageInfo = $TheSite.Usage;

    [int]$MyDiscussionStorage = $UsageInfo.DiscussionStorage/(1024*1024)
    [int]$MyStorage = $UsageInfo.Storage/(1024*1024)
    [int]$MyBandwidth = $UsageInfo.Bandwidth/(1024*1024)
    write-host "   >>> Site DiscussionStorage: ", $MyDiscussionStorage, "MB"
    write-host "   >>> Site Storage: ", $MyStorage, "MB"
    write-host "   >>> Site Bandwidth: ", $MyBandwidth, "MB"
    write-host "   >>> Site Hits: ", $UsageInfo.Hits
    write-host "   >>> Site Visits: ", $UsageInfo.Visits

    write-host "----------------------------------------------------- "
}

function Get-SPSite-StoreManagement-Details([object]$TheSite, [string]$FileExtension, [double]$ExceededSize)
{
    [double]$MyFileSize = 0
    [string]$myFileName
    [string]$myFileCompleteURL
    [string]$MyFilterOption = "LeafName Like '%."+ $FileExtension +"' AND TotalSize > "+ [string]($ExceededSize*1024*1024)
    [string]$MySortOption = "TotalSize DESC"
    [System.Data.DataTable]$MyResultSetFiltered
    Write-Host "SiteURL", $TheSite.Url

# ltVar: What kind of storage management information to display
# List = 1
# DocumentLibrary = 2
# Document = 3
# sordVar: the direction in which the items are to be sorted
# Increasing = 0×10
# Decreasing = 0×11
# soVar: whether the items are sorted by size or by date
# Size=0
# Date = 1
# nMaxResults: the number of results to return

    $MyInformationType = [Microsoft.SharePoint.SPSite+StorageManagementInformationType]::Document
    $MysortOrder = [Microsoft.SharePoint.SPSite+StorageManagementSortOrder]::Decreasing
    $MySortOn = [Microsoft.SharePoint.SPSite+StorageManagementSortedOn]::Size
    [int]$MaxItems = 999999

    $SiteURLRoot = $TheSite.url.split("/")
   
    [System.Data.DataTable]$MyResultSet = $TheSite.StorageManagementInformation($MyInformationType, $MysortOrder, $MySortOn, $MaxItems)

    Write-Host "MyResultSet Count: ", $MyResultSet.Rows.Count
    $MyResultSetFiltered = $MyResultSet.Select($MyFilterOption, $MySortOption)
    Write-Host "MyResultSetFiltered Count: ", $MyResultSetFiltered.Count

    Write-Host " ----------------- "
    foreach($myRow in $MyResultSetFiltered)
    {
        if($verbose)
        {
            foreach($MyColumn in $MyResultSet.Columns)
            {
                Write-Host "      ->Column:", $MyColumn, " - Value:", $myRow[$MyColumn]
            }
        }

        $myFileName = [string]$myRow['LeafName']
        $MyFileSize = [int]$myRow['TotalSize']/(1024*1024)
        $myFileCompleteURL = $SiteURLRoot[0] + "//" + $SiteURLRoot[2] + "/" + [string]$myRow['Directory'] + "/" + $myFileName

        Write-Host " FileName:", $myFileName
        Write-Host " FileSize[MB]:", $MyFileSize
        Write-Host " File URL:", $myFileCompleteURL
        Write-Host " ----------------- "
    }    
    $MyResultSet.Dispose()
}

function Get-All-SPSite-StoreManagement([string]$WebAppURL, [string]$FileExtension, [double]$ExceededSize)
{
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null

    $Thesite = new-object Microsoft.SharePoint.SPSite($WebAppURL)
    Write-Host "WebApp Root URL", $Thesite.Url
    $oApp = $Thesite.WebApplication
   
    foreach ($MySite in $oApp.Sites)
    {
        #Write-Host "  Site URL", $MySite.Url
        Get-SPSite-Usage-Information $MySite
        Get-SPSite-StoreManagement-Details $MySite $FileExtension $ExceededSize
    }
    $Thesite.Dispose()
}

function StartProcess()
{
    # Create the stopwatch
    [System.Diagnostics.Stopwatch] $sw;
    $sw = New-Object System.Diagnostics.StopWatch
    $sw.Start()
    cls

    Get-All-SPSite-StoreManagement “http://mywebApplication” "jpg" 1 #Adapt the size Value as you need – 1MB and the extension you need to control
    $sw.Stop()
    # Write the compact output to the screen
    write-host "Time: ", $sw.Elapsed.ToString()
}

StartProcess

Il faudra adapter la requête avec l’extension voulue et la taille minimal à traquer. Ce script vous donnera alors un résultat tel que le suivant :

image

Vous y trouverez un résumé de l’utilisation du site (racine ou sous-site), et la liste des fichiers ayant l’extension recherchée (JPG) et dépassant la taille limite (1 MB).


Attention

Ce script ne fonctionne pas sous SharePoint 2013, car la méthode a été désactivée par Microsoft:

En revanche, l’utilisation pour SharePoint 2010 et 2007 est totalement fonctionnelle.


Liens annexes

Un ensemble de pages qui proposent des informations sur les méthodes utilisées :

Romelard Fabrice [MBA]

SharePoint 2007: Script PowerShell pour reconfigurer le Search de WSS V3

Nous avons vu dans un précédent message comment tester rapidement le bon fonctionnement du moteur de recherche de SharePoint WSS V3 :

Mais que faire lorsque le moteur est vraiment en vrac ?

La première solution est de tout reconfigurer à la main. Mais dans certaines situations, cette solution ne fonctionne pas plus, car il reste des traces de l’ancienne configuration problématique.

La solution ultime est basée sur le composant “PSCONFIG.EXE” avec les lignes ci-dessous :

  • psconfig.exe -cmd services –install
  • psconfig.exe -cmd services -provision

Associé avec le message précédent :

Cela peut donner le script PowerShell suivant qu’il vous suffit d’adapter avec le GUID et la liste des bases de données de votre ferme WSS V3 en question:


[string]$GUIDKey = "ceb90bb2-046a-4dd0-a76d-057dfcd29700" # Enter the dedicated value from your SP Farm

[string]$RegeditPathkey = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0\Search\Applications\"+ $GUIDKey +"\Gather\Search\Extensions\ExtensionList"

[string]$IndexFilePathToClean = "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\Data\Applications\"+ $GUIDKey +"\Projects\Search\Indexer\CiFiles\*"

# ---------------------------------------------------------
# Delete the Search Config, on each Host :
stsadm -o spsearch -action stop -f

# Show the Proxy settings of the server
netsh winhttp show proxy
# Force the Proxy Reset on each Web Server
netsh winhttp reset proxy

# ---------------------------------------------------------
# Force the refresh of the Farm Configuratrion
psconfig.exe -cmd services -install
psconfig.exe -cmd services -provision

# ---------------------------------------------------------
# Add the Regedit Key
# Create a key with the value:
New-ItemProperty -path $RegeditPathkey -name "39" -Type String -value "pdf" #Check The GUID of The Search

# ---------------------------------------------------------
# Add the Content DBs in the Search Solution
# Web Application:  Web Application 1
stsadm -o spsearch -action attachcontentdatabase -databasename MyWebApplication1DB1
stsadm -o spsearch -action attachcontentdatabase -databasename MyWebApplication1DB2

# Web Application:  Web Application 2
stsadm -o spsearch -action attachcontentdatabase -databasename MyWebApplication2DB1
stsadm -o spsearch -action attachcontentdatabase -databasename MyWebApplication2DB2

# ---------------------------------------------------------
# Force the Full Crawl
net stop SPTimerV3
net stop SPSearch

Remove-Item -recurse $IndexFilePathToClean #Check The GUID of The Search

net start SPTimerV3
net start SPSearch

stsadm -o spsearch -action fullcrawlstart


Une fois cette commande exécutée, il faut paramétrer la base de données du moteur SQL pour lui appliquer la bonne valeur de croissance des fichiers (MDF et LDF) et le recouvrement simple.


Il faut aussi noter qu’il est possible d’utiliser la commande STSADM pour recréer toute la configuration de ce moteur, sous le format suivant
  • stsadm -o spsearch -action start –farmserviceaccount DOMAIN\FarmServiceLogin-farmservicepassword PasswordAssociated -farmcontentaccessaccount EAME\svc_CrawlAccessaccount -farmcontentaccesspassword PasswordAssociated –databaseserver SQLServerOfTheFarm -databasename WSS_Search_DataBase


Ce script est désormais utilisé dans mes fermes de production en cas de soucis de ce moteur signalé par les utilisateurs.

Romelard Fabrice [MBA]

TechDays Paris 2014: NSA, Prism - Que faire de l’inquiétude sur la sécurité dans le Cloud ?

logo_mstechdays

Speakers: Bernard Ourghanlian et Marc Mossé,

Cette session est la suite de celle de l’an dernier sur “Qui a peur du grand mechant Cloud ?”. Elle débute par la présentation dans les grandes lignes des catégories de services disponibles dans les offres Cloud

WP_20140213_060

Un rappel a été fait sur les règles de base pour le passage de service en Cloud:

  • Respect de normes
  • Evaluation de la confidentialité des données placées dans ce cloud
  • Analyse de risques

La session passe alors sur les questions de Data Privacy rappelées par Marc Mossé.

WP_20140213_061

Il rappelle que les accords entre l’état américain et l’entreprise n’ont été activé que dans de très rares cas, ainsi les DataCenters situés en Europe (Dublin et Amsterdam) implique l’application du droit Européen et non américain.

Le passage dans le cloud exige une relation de confiance extrèmement forte et Microsoft met en avant ce point en présentant clairement le respect de ces règles de fonctionnement.

La session est passée alors en mode Q&A afin de permettre à Microsoft de fournir une réponse à certaines questions sensibles (qui est propriétaire de données stockées dans le cloud, …).

Fabrice Romelard [MBA]

TechDays Paris 2014: Malware impossible 6 : the ghost protocol

logo_mstechdays_thumb

Speakers: Pascal Sauliere, Stanislas Quastana, Arnaud Lheureux et Cyril Voisin

WP_20140213_015

La session débute par un retour sur les rapports SIR (Attaques, sesnsibilités, …)

WP_20140213_017 WP_20140213_018
WP_20140213_019 WP_20140213_020

Attention aux faux Antivirus

WP_20140213_021 WP_20140213_022

Pause GOODIES

WP_20140213_023

Exemples d’attaque (TARGET, DAB, …)

WP_20140213_025 WP_20140213_028
WP_20140213_029 WP_20140213_030

Techniques d’attaque (Clé USB, …)

WP_20140213_031 WP_20140213_033

Les techniques d’hameçonnage

WP_20140213_034 WP_20140213_035

WP_20140213_036

Démonstration – M.I.N.O.U.X.

WP_20140213_037 WP_20140213_038
WP_20140213_040 WP_20140213_041
WP_20140213_042 WP_20140213_043

WP_20140213_044

Ransomware

WP_20140213_045 WP_20140213_046

Argent et Vulnérabilités

WP_20140213_047 WP_20140213_048

WP_20140213_049

Microsoft CyberCrime Center

WP_20140213_050 WP_20140213_052
WP_20140213_053 WP_20140213_055
WP_20140213_056 WP_20140213_057

Session très sympa comme toujours

Fabrice Romelard [MBA]

Technorati Tags: ,,,
TechDays Paris 2014: Virtualisation? Convergence? Cloud? Soyons pragmatique

logo_mstechdays

Speakers: Eric Velfre et Nicolas Vallon

WP_20140213_003

Après une présentation rapide de la situation de DELL ces derniers mois (rachat d’actions, sortie du Nasdak, …), la session rappelle les évolutions des demandes IT par les clients (raccourcissement des temps de changement, consumérisation dans les entreprises, BYOD, achat de ressources IT externes directement par les business, …)

WP_20140213_004 WP_20140213_005

Le département IT est de plus en plus orienté service afin de devenir Fournisseur de services internes.

L’évolution logicielle pousse des évolutions de matériel:

  • Stockage dynamique directement dans les Serveurs pour proposer des applications InMemory
  • Stockage et serveur intégrés au réseau pour les solutions cloud

WP_20140213_006

DELL propose une intégration globale et modulaire dans les DataCenters

WP_20140213_007 WP_20140213_008
WP_20140213_009 WP_20140213_010

La session est ensuite passée à un retour d’expérience d’un des clients de DELL, Grant Thornton (entreprise d’audit et conseils en finance)

WP_20140213_011 WP_20140213_012
WP_20140213_013 WP_20140213_014

La session fut très orientée vers la publicité pour le constructeur DELL.

Fabrice Romelard [MBA]

TechDays Paris 2014: L’entreprise à l’heure numérique quelle place pour le métier des DSI ?

logo_mstechdays

Speakers: Bernard Ourghanlian, Carlos Goncalves et Patrice Trousset

WP_20140213_002

Cette session est dédiée aux retours d’expérience de Microsoft IT, Société Générale, …, concernant les mutations en interne avec les nouvelles méthodes de travail.

Que ce soit les mises en place de Cloud, les développement SCRUM ou AGILE, les solutions de Big Data, …

Les IT et managers deviennent de plus en plus des IntraPreneurs pour les projets à mener avec les lignes de business ou fonction. Il convient donc de cadrer le mode de fonctionnement et les architectures tout en coachant les équipes.

Les talents sont rares pour le département IT, et chaque entreprise doit proposer de nouvelles carrières au candidats. Chaque entreprise pousse ses équipes à laisser la production qui passe en SaaS vers du consulting interne.

L’époque des IT Tech dans la cave est révolue et les DSI doivent pousser les acteurs de leur département vers des hommes ou femmes capable de donner de la valeur ajouter à l’entreprise en aider les lignes de business à gagner de nouveaux challenges.

Fabrice Romelard [MBA]

Technorati Tags: ,,,,
Plus de Messages Page suivante »


Les 10 derniers blogs postés

- Compte rendu : SharePoint / O365 : des pratiques pour une meilleure productivité par The Mit's Blog le 12-12-2014, 18:11

- [TFS] Suppression des feature SQL Entreprise en masse par Blog de Jérémy Jeanson le 12-06-2014, 09:18

- [Clean Code] règles de nommage par Fathi Bellahcene le 12-04-2014, 22:59

- Windows To Go 10 et Upgrades impossibles par Blog de Jérémy Jeanson le 12-04-2014, 21:38

- SharePoint OnPremise: Statistiques d’utilisation pour traquer les sites fantomes par Blog Technique de Romelard Fabrice le 12-03-2014, 10:28

- SharePoint 2007: Script PowerShell permettant le backup de toutes les collections de sites d’une application Web par Blog Technique de Romelard Fabrice le 12-02-2014, 10:00

- Xamarin : un choix précieux par .net is good... C# is better ;) le 12-01-2014, 15:10

- Office 365: Comparaison des composants pour préparer votre migration de SharePoint 2007 vers Office 365 par Blog Technique de Romelard Fabrice le 11-28-2014, 16:20

- Créer un périphérique Windows To Go 10 ! par Blog de Jérémy Jeanson le 11-21-2014, 04:54

- RDV à Genève le 12 décembre pour l’évènement “SharePoint–Office 365 : des pratiques pour une meilleure productivité !” par Le blog de Patrick [MVP Office 365] le 11-19-2014, 10:40