Question Script qui ne fonctionne pas en administrateur.

Plus d'informations
il y a 8 mois 3 jours - il y a 8 mois 3 jours #33361 par Druss
Bonjour à tous,

J'ai un script qui fonctionne très bien, mais uniquement si Powershell est exécuté en mode utilisateur. En mode administrateur, il renvoie systématiquement et peu importe le cas de figure (path vérifié, clé déjà installé ou non etc) :
La clé de registre n'existe pas localement, tentative d'installation
La clé de registre n'existe pas sur le serveur.

Voilà le script en question :
$localRegistryPath = "C:\Chemin\Local\fichier.reg"  # Spécifiez le chemin local où vous souhaitez copier le fichier .reg

if (-not (Test-Path $localRegistryPath)) {
    Write-Host "La clé de registre n'existe pas localement, tentative d'installation..."

    $serverRegistryPath = "\\IPserveur\test\fichier.reg"
    if (Test-Path $serverRegistryPath) {
        Write-Host "La clé de registre existe sur le serveur, copie en cours..."

        # Créez un répertoire local s'il n'existe pas
        $localDirectory = [System.IO.Path]::GetDirectoryName($localRegistryPath)
        if (-not (Test-Path $localDirectory)) {
            New-Item -Path $localDirectory -ItemType Directory
        }

        Copy-Item -Path $serverRegistryPath -Destination $localRegistryPath

        Write-Host "La clé de registre a été copiée depuis le serveur."

        # Ajouter la clé de registre au registre local
        Write-Host "Ajout de la clé de registre au registre local..."
        Start-Process -FilePath "regedit.exe" -ArgumentList "/s $localRegistryPath" -Wait

        Write-Host "La clé de registre a été installée localement."
    } else {
        Write-Host "La clé de registre n'existe pas sur le serveur."
    }
} else {
    Write-Host "La clé de registre existe déjà localement."
}

Merci d'avance pour votre temps et pour tout retour que vous pourriez me faire !
Dernière édition: il y a 8 mois 3 jours par Arnaud Petitjean.

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

Plus d'informations
il y a 8 mois 3 jours #33362 par Arnaud Petitjean
Bonjour Druss,

Si PowerShell te donne ce message c'est que ta commande Test-Path $serverRegistryPath retourne False.

Qu'entends-tu exactement par "en mode administrateur" ? Tu devrais essayer justement en "mode administrateur" d'accèder au chemin de destination en PowerShell et voir si ça fonctionne ou pas. A priori ça ne fonctionnera pas mais au moins tu auras le message d'erreur complet. Et en lisant bien ce dernier, on devrait tout comprendre.

Ce que tu peux essayer de faire par exemple c'est "en mode administrateur comme tu dis" et en mode interactif (c'est à dire que tu tapes les commandes dans la console) de faire :
Get-Item $serverRegistryPath ou Get-Content $serverRegistryPath pour voir si ton fichier est accessible et voir si tu peux lire son contenu.

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 jours - il y a 8 mois 3 jours #33365 par Druss
Bonjour Arnaud,

Déjà merci pour ta réponse et ton temps. Ensuite tu as entièrement raison Test-Path $serverRegistryPath retourne false.
Mais encore une fois uniquement quand la console Powershell (image 1 des pièces jointes) est éxécutée en tant qu'administrateur.
Si je me contente de lancer le script depuis le dossier où il est stocké (image 2) il fonctionne très bien.

D'ailleurs console Powershell lancée sans privilèges Test-Path "\\IPserveur\test\fichier.reg" retourne True
                                                           avec privilèges Test-Path "\\IPserveur\test\fichier.reg" retourne False

Je ne comprend pas cette différence de comportement. Mon problème vient du fait que le script sera lancé par une GPO, et du coup je ne sais pas prédire quel comportement il adoptera.


Merci encore,

Mickaël


 


​​​​​​​ 

 
Pièces jointes :
Dernière édition: il y a 8 mois 3 jours par Druss. Raison: Formulation

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

Plus d'informations
il y a 8 mois 2 jours #33370 par Arnaud Petitjean
Salut Druss,

Si tu veux un bon conseil : n'utilises jamais ISE comme environnement d'exécution pour tes scripts. C'est source d'erreur. Je me suis déjà pris la tête de nombreuses fois avec des scripts qui étaient sensés fonctionner mais qui ne fonctionnaient pas alors qu'ils marchaient très bien en réalité depuis la console Powershell classique.

Et puis il faut penser que lorsque tu planifieras une tâche où que tu exécuteras un script via une GPO, c'est la console classique qui sera lancée pour exécuter ton script, donc...

Pour ce qui est de ton problème, c'est assez étrange. Mais je ne pense pas que le problème vienne de PowerShell. Ca ressemble davantage à un problème de droits. 

Que se passe-t-il si tu executes la commande  Get-ChildItem "\\IPserveur\test\" ? A mon avis tu vas obtenir un "acces denied"...  

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 2 jours #33373 par Druss
Bonjour Arnaud,

"N'utilises jamais ISE comme environnement d'exécution pour tes scripts". C'est bien noté merci beaucoup.
"c'est la console classique qui sera lancée pour exécuter ton script". Voilà qui diminue beaucoup mes appréhensions, le script s'exécutant sans problème dans ce cas.
"Mais je ne pense pas que le problème vienne de PowerShell. Ca ressemble davantage à un problème de droits. ". J'avais cette possibilité en tête au moment de créer ce topic mais j'avais besoin d'un regard externe ET plus expérimenté pour conclure. 
C'est vrai que je trouve le problème d'un script dysfonctionnant uniquement AVEC élévation de privilèges déroutant, moi qui suis un fervent croyant du "principe du moindre privilège".

"Que se passe-t-il si tu executes la commande  Get-ChildItem "\\IPserveur\test\" ? A mon avis tu vas obtenir un "acces denied"..." Je suis actuellement sans emploi, je créé ce script (et d'autres) pour une association dont le SI de 6 personnes est au bord de l'implosion pour donner un coup de main, et je n'ai plus d'accès pour l'instant pour tester. Cependant, mes scripts doivent être mis en place dans les jours à venir, à cette occasion je pourrais peut-être essayer. (maintenant, je pense que les chances que tu aies raison flirte avec le 100%)

Je posterai s le résultat ici le cas échéant.

Merci encore, tu m'as été d'une grande aide et merci aussi pour les conseils !



 

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

Plus d'informations
il y a 7 mois 3 semaines #33381 par Arnaud Petitjean
Avec plaisir Druss !

Tiens nous au courant de la suite de tes aventures 

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.

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