Question Script pour les montages automatiques de partages de fichiers

Plus d'informations
il y a 9 mois 2 semaines - il y a 9 mois 2 jours #34724 par Samuel
Bonjour,

Je m'y connais pas en script. J'ai un devoir où il est demandé de créer un script powershell qui permet l'automatisation des montages des partages de fichiers.

J'ai une machine Windows Server 2019 Active Directory, ma machine cliente est sur Windows 10. J'ai déjà crée les utilisateurs et les groupes de sécurité.
Sur l'AD, j'ai crée des dossiers partagés. Je ne sais pas le but réel du script. Je suppose qu'il doit interroge les groupes de sécurité Active Directory de l'utilisateur actuel et monte le lecteur réseau.

Si vous pouvez m'aider pour mon devoir s'il vous plaît ?   
Pièces jointes :
Dernière édition: il y a 9 mois 2 jours par Arnaud Petitjean.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 mois 2 semaines - il y a 9 mois 2 jours #34725 par Samuel
Update : J'ai réalisé ce script, je ne sais pas si il n'y aura pas de soucis quand je voudrais le déployer sur les machines clientes.

<#
Description : Script permettant d'automatiser les montages des partages de fichiers
Auteur : Samuel P.
Date : 2025-04
Version : 1.0
#>

# Paramètres à configurer 
$cheminReseau = "\\SRV-AD\Commun"
$partageReseau = @(
    @{
        nomGroupe = "GG_Direction" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\Direction" # Chemin du partage
    }
    @{
        nomGroupe = "GG_RH" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\RH" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Assistant_direction" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Direction_Prod_Com" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Charge_com" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Assistant_prod" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Direction_Technique" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Lead_Developpeur" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Developpeur" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\Developpeur" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Direction_Graphique" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Game_Designer" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Level_Designer" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Developpeur_Shader" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_UX_Designer" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Animateur_cinematique" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Direction_Audio" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Sound_Designer" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Lead_Testeur" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Testeur" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\Testeur" # Chemin du partage
    }
    @{
        nomGroupe = "GG_Admin_domaine" # Nom d'un groupe AD
        cheminPartage = "$cheminReseau\" # Chemin du partage
    }
)

# Afficher les informations de l'utilisateur
Write-Host "Utilisateur actuel : $env:USERNAME"
Write-Host "Domaine : $env:USERDOMAIN"

# Fonction pour vérifier si le lecteur réseau existe déjà
function lecteurReseauExiste {
    return (Get-PSDrive -Name 'Z' -ErrorAction SilentlyContinue)
}

# Fonction pour vérifier si le dossier partagé existe
function cheminReseauExiste {
    return Test-Path $cheminReseau
}

# Variable des deux fonctions pour vérifier si le lecteur Reseau et le Chemin Reseau existent 
$existeLecteurReseau = lecteurReseauExiste
$existeDossierShare = cheminReseauExiste

echo $existeLecteurReseau
echo $existeDossierShare

# Récupère le groupe de sécurité de l'utilisateur
try {
    $ADGroupes = Get-ADPrincipalGroupMembership -Identity $env:Username | Select-Object -ExpandProperty Name
    Write-Host "Groupes de sécurité de l'utilisateur '$env:Username': $ADGroupes"
} catch {
    Write-Warning "Erreur : Impossible d'obtenir le groupe Active Directory de l'utilisateur : $($_.Exception.Message)"
}

# Parcourir la configuration des partages
foreach ($config in $partageReseau) {
    $nomGroupe = $config.nomGroupe
    $cheminPartage = $config.cheminPartage

# Vérifie si l'utilisateur est membre d'un groupe
    if ($ADGroupes -contains $nomGroupe) {
        Write-Host "L'utilisateur est membre du groupe '$nomGroupe'."
# Vérifie si le lecteur réseau est déjà monté
        if ($existeLecteurReseau){

# Monter le lecteur réseau 
            try {
                New-PSDrive -Name 'Z' -PSProvider FileSystem -Root $cheminPartage -Persist
                Write-Output "Lecteur Z: monté avec succès vers $cheminPartage"
            }
            catch {
                Write-Error "Une erreur s'est produite lors de la récupération des informations de groupe: $($_.Exception.Message)"
            }
        } else {
            Write-Host "Le lecteur est déjà monté."
        }
    } else {
        Write-Host "L'utilisateur n'est pas membre du groupe '$nomGroupe'."
    }
}


Merci d'avance. 
Pièces jointes :
Dernière édition: il y a 9 mois 2 jours par Arnaud Petitjean. Raison: Mise en forme du code

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 mois 4 semaines - il y a 8 mois 4 semaines #34739 par Francois Dunoyer
dans les "soucis" potentiels que je vois..
Get-ADPrincipalGroupMembership c'est pas une fonction "standard" sur un poste de travail.
Soit tu as deployé en masse le module qui permet de l'utiliser soit ça ne fonctionnera pas
Dernière édition: il y a 8 mois 4 semaines par Francois Dunoyer.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 mois 3 semaines #34748 par Samuel
Ah, je dois soit ajouter au script quand il est exécuté un moyen de déployé le module soit trouver une alternative.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 mois 3 semaines #34749 par Arnaud Petitjean
Bonjour Samuel,

Pour te simplifier la vie, tu pourrais simplement intégrer la fonction Get-ADPrincipalGroupMembership directement dans ton script. Ainsi, pas besoin de déployer le module ;-).

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 mois 3 semaines - il y a 8 mois 1 semaine #34751 par Francois Dunoyer
tu peux essayer ça :
$Username = $env:USERNAME
$Domain = $env:userdomain
$User = [ADSI]"WinNT://$Domain/$Username,user"
$Groups = @()
foreach ($Group in $User.Groups()) {
   $Groups += $Group.GetType().InvokeMember("Name", 'GetProperty', $null, $Group, $null)
}

$Groups
Dernière édition: il y a 8 mois 1 semaine par Arnaud Petitjean. Raison: Mise en forme du code
Les utilisateur(s) suivant ont remercié: Arnaud Petitjean

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.093 secondes
Propulsé par Kunena