IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SharePoint .NET Discussion :

POWERSHELL répertorier les termes non utilisés


Sujet :

SharePoint .NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut POWERSHELL répertorier les termes non utilisés
    Bonjour tout le monde ,

    Je suis nouveau dans le monde de Sharepoint et je m'attaque aujourd'hui a un problème de taille :
    Répertorier tous les termes non utilisés au moins une fois sur le site Sharepoint.

    Le but étant de savoir quels termes sont inutiles...

    J'ai des bases en Powershell, et j'ai déjà très légèrement utilisé PSTools, mais je suis loin d'être un expert ^^.
    Ducoup je sais comment gérer la partie connexion a Sharepoint, ainsi que la création d'un fichier de sortie avec les termes non utilisés.

    Mais je n'ai aucune piste pour la partie détection des termes non utilisés...

    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Points : 202
    Points
    202
    Par défaut
    Bonjour,

    A ma connaissance il n'est pas possible de récupérer de manière direct les termes non utilisés. Ce que je ferais à ta place, c'est récupérer tous les termes existant puis tous les termes utilisés pour faire un diff.
    Un premier point de départ est de se baser sur la liste "TaxonomyHiddenList". Cette liste est interne à SharePoint et recense tous les termes qui ont déjà été utilisés dans la collection de site correspondante. Elle est masquée dans l'IHM mais accessible en powershell. Tu peux par contre avoir des termes qui à l'instant T ne sont plus utilisé.

    Bout de code récupéré sur un forum et testé qui itère sur toutes les collections de site et liste les items de la liste TaxonomyHiddenList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $usedTerms = @{}
    Get-SPSite -Limit All | foreach {
        $web = $_.OpenWeb()
        $list = $web.Lists | where { $_.Title -eq "TaxonomyHiddenList" }
        $list.Items | foreach {
            if ($_ -ne $null)
            {
                $key = ($_["Path"] + " (" + $_["IdForTerm"] + ")")
                if ($usedTerms.ContainsKey($key))
                {
                    $usedTerms[$key] = ($usedTerms[$key] + ", " + $web.Url)
                }
                else
                {
                    $usedTerms.Add($key, $web.Url)
                }
            }
        }
    }
     
    $usedTerms
    Pour avoir uniquement les termes utilisés à l'instant T il faut itérer sur chaque item de liste / bibliothèque de document et colonne de type metadonné géré pour récupérer la collection de termes contenu.
    Si l'anglais ne te dérange pas en cherchant ces mots clés "read-update-managed-metadata-column-values-using-powershell" tu trouvera des forums et tuto avec des scripts pour récupérer les termes d'une colonne de type métadonné géré pour un item.

    Cordialement,

    Darkcrift

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Salut ,

    Merci beaucoup pour ta réponse, je planche encore pour le moment .
    Je ne connaissait pas la liste "TaxonomyHiddenList" ! Elle est très utile, et il y a moyen d'y accéder depuis l'IHM en ajoutant "Lists/TaxonomyHiddenList/AllItems.aspx" après l'URL du site .

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    J'ai essayé d'utiliser la TaxonomyHiddenList mais, elle contient vraiment toute l'histoire des termes pour chaque site, comme tu me l'avait dit, c'est gênant...

    J'ai donc essayé de faire un script qui parcours les sites que j'ai dans un fichier CSV, qui parcours ensuite chaque "liste" mais je galère encore sur la partie termes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    ##############################################################################################
    ## Script qui liste tous les termes utilisés sur Sharepoint
    ################################################################################################
     
    param( 
        [Parameter( Mandatory = $false, HelpMessage = "The name of the file")]
        [alias("file")]  
        [string]$outputfile = "sites.csv", #mettre le fichier qui contient les collections de sites
        [string]$username = "XXXXX@YYYYY.com",
        [string]$password = "MonMotdePasse",
    	[string]$logsFile = "logNotUsedTermes.csv",
    	[string]$tableauTermesutilises = New-Object System.Collections.ArrayList; #$Array.add(value)
    )
     
    #  Reference Pnp Client Type (not use SPO nor SDK)
    #   Check path to PnP Module please
    $pnpModule = Get-Module SharePointPnPPowerShell* -ListAvailable
    $pnpPath = $pnpModule.ModuleBase
    Add-Type -Path "2.15.1705.0\Microsoft.SharePoint.Client.dll" 
    Add-Type -Path "2.15.1705.0\Microsoft.SharePoint.Client.Runtime.dll" 
    Add-Type -Path "2.15.1705.0\Microsoft.SharePoint.Client.UserProfiles.dll"
    Add-Type -Path "2.15.1705.0\Microsoft.Online.SharePoint.Client.Tenant.dll"
     
     
    ################################################################
    ## Main                                                       ##
    ################################################################
     
    # log file
    $logsFile = ".\$logsFile"
    Out-File -FilePath $logsFile -InputObject  "Terme"
     
    # open CSV file
    $outputfile = ".\$outputfile"
    $csv = import-csv $outputfile -delimiter ";"
     
    #Parcourt tous les sites présents dans le CSV
    $csv | ForEach-Object { 
        $url = $_.Url
        #skip wrong url from file
        if ($url.StartsWith("*")) { return } # use return instead of continue inside foreach-object
     
    	write-host "************************************************" -foregroundcolor Gray
        write-host "Site $($_.Title)" -foregroundcolor Gray
        write-host "************************************************" -foregroundcolor Gray
     
    	# SharePoint Online with PNP
    	# Connexion a Sharepoint
        $psCredential = New-Object System.Management.Automation.PSCredential($username, $securePassword)
        $spCredential = Get-Credential -Credential $psCredential
     
    	# PnP Connect
        Connect-PnPOnline -Url $url -Credentials $spCredential
     
    	# Permet de recup tous les sites contenus dans les collections de sites
        $allWebs = [System.Collections.ArrayList]@()
        $allWebs += Get-PnPSubWebs -Recurse
        $allWebs += Get-PnPWeb
     
     
     
    	# Enum Webs
        foreach ($web in $allWebs) {
    		Write-Host  ********* Proceed  $web.Url -ForegroundColor Yellow
    			$lists = Get-PnPList -Web $web #lists contient alors toutes les listes et bibliothèqes du site en cours
     
    		# Enum Lists
            $views = $null
            foreach ($list in $lists) {
     
    		}
    	}
    }

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Points : 202
    Points
    202
    Par défaut
    Bonjour,

    As tu identifié les colonnes de type métadonnée géré ?
    Une fois que c'est fait il faut parcourir chaque item de liste, tu peux le faire avec la commande "Get-PnPListItem". Tu peux passer un tableau de colonnes pour récupérer que les colonnes qui t'intéresse.
    Je ne sais pas la valeur que cette commande renvoie pour les colonnes de type métadonnée géré.
    Si ce n'est pas exploitable directement tu peux t'inspirer de ce bout de script (Attention c'est du powershell pour SharePoint serveur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $WebURL="https://portal.crescent.com/"
    $ListName="Deals"
    $FieldName="Region"
    $ItemID=2
     
    #Get Objects 
    $Web = Get-SPWeb $WebURL    
    $List= $Web.Lists[$listName]
    $Item = $List.GetItembyID($ItemID)
     
    #get managed metadata field value powershell
    [Microsoft.SharePoint.Taxonomy.TaxonomyFieldValueCollection]$MMSFieldValueColl = $item[$FieldName] 
     
    #Concatenate each term in the value collection
    $MMSFieldTerms=""
    Foreach ($MMSFieldValue in $MMSFieldValueColl)
    {
        if($MMSFieldValue.label -ne $null)
        {
            $MMSFieldTerms+=$MMSFieldValue.label+"; "
        }
    }
     
    write-host $MMSFieldTerms
    Change bien le namespace avec celui de la dll client (Microsoft.SharePoint.Client.Taxonomy.TaxonomyFieldValueCollection)

    Cordialement,

    Darkcrift

  6. #6
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour ton aide, cependant j'ai du mal a comprendre ce que tu voulais dire par "As tu identifié les colonnes de type métadonnée géré ?".
    Car les listes ont toutes des colonnes de données différentes... .

    Merci de ta patience !

    Cordialement,

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Points : 202
    Points
    202
    Par défaut
    Bonjour,

    En reprenant ton premier message, juste pour être sûr, quand tu parle de "terme" tu fait bien référence aux éléments d'un "ensemble de terme" stocké dans un "magasin de terme" ou en anglais (term, term set, term store) ?
    Si non, tous ce que je t'ai dit ne répond pas forcément à ta question, et il faut que tu m'expliques, me donne des exemples de ce que tu entends par "terme".

    Si oui une colonne de type métadonnée géré (en anglais manage metadata) permet de faire référence et utiliser un ensemble de terme dans une liste ou bibliothèque de document. Il faut donc que tu es identifié toutes les colonnes de ce type dans chaque liste pour récupérer leur valeurs pour chaque item. Le but étant de ne récupérer que les colonnes qui t'intéresse et nécessite un traitement spécifique.


    Cordialement,

    Darkcrift

  8. #8
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Oui, on parle bien de la même chose !
    Je bosse encore dessus dès que j'ai du temps mais ça reste très long et galère pour moi .
    Je poste dès que j'aurai avancé !

  9. #9
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonne année !

    J'ai laché car je ne pense vraiment pas y arriver pour le moment...

Discussions similaires

  1. [XL-2007] Comment compter les lignes non vides
    Par Emily2711 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/10/2009, 19h47
  2. Compter les cellules non vides
    Par Domino40 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/08/2009, 19h49
  3. Compter les champs non-nuls sur un record
    Par rozwel dans le forum MySQL
    Réponses: 1
    Dernier message: 28/01/2009, 15h49
  4. lister les fichiers non utilisés
    Par need2learn dans le forum Apache
    Réponses: 2
    Dernier message: 30/11/2008, 21h36
  5. [EXCEL][VBA] Compter les cellules non-vides
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2006, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo