none
Powershell exécution system RRS feed

  • Question

  • Bonjour,

    J'exécute un script à travers un Agent de gestion et le script s'exécute avec l'utilisateur system 

    Quand j'exécute le script directement cela fonctionne bien, mais pas depuis l'utilisateur system

    •  start-transcript -path "c:\temp\kaspersky\log.txt"
          New-PSDrive -Name “S” -Root “\\192.168.20.9\kaspersky” -PSProvider “FileSystem” 
          Copy-Item "s:\Kaspersky_Endpoint_Security_for_Windows.exe" "c:\temp2\kaspersky" -Recurse 

          if ($? -eq "True")
          {
          New-Item –Path "HKLM:\SOFTWARE" -Name KasperskyLab
          New-Item –Path "HKLM:\SOFTWARE\KasperskyLab" -Name KESCloud
          Start-Process "c:\temp2\kaspersky\Kaspersky_Endpoint_Security_for_Windows.exe" -ArgumentList "/q" -Wait
          New-ItemProperty -Path "HKLM:\SOFTWARE\KasperskyLab\KESCloud" -Name "11.5.0" -Value 1  -PropertyType "DWORD"
          }

          $RemovalPath = "c:\temp\kaspersky"
          Get-ChildItem  -Path $RemovalPath -Recurse  | Remove-Item -Force -Recurse
          Remove-Item $RemovalPath -Force -Recurse
          Stop-Transcript

        

    Cela bloque sur :

      New-PSDrive -Name “S” -Root “\\192.168.20.9\kaspersky” -PSProvider “FileSystem” 
        Copy-Item "s:\Kaspersky_Endpoint_Security_for_Windows.exe" "c:\temp2\kaspersky" -Recurse 

    Le chemin n'est pas trouvé... le partage est partagé pour "tout le monde" y compris pour les droits NTFS

    "New-PSDrive : La racine de lecteur spécifiée « \\192.168.20.9\kaspersky » n’existe pas ou n’est pas un dossier."

    Une idée ?

    Le compte system n'autorise pas la connexion distante ?

    vendredi 19 février 2021 17:57

Toutes les réponses

  • Bonjour Briac,

    Ton pb est tout simple en fait ... et tu va pouvoir y répondre tout seul. Est-ce que le compte System d'une machine (OK, il a tous les droits sur une machine), a les droits sur une autre machine ? .... Non, bien évidemment.

    Est-ce que le Compte system a les droits sur le partage ? Pas plus. Et les permissions NTFS ? non plus.

    Il faut que tu lances ton script avec un compte qui :

    • Ai les droits sur une machines distante : cela ne peut être qu'un compte de domaine (compte dédié ou mieux GMSA).
    • Ai les droits d'exécuter des exécutables sur ton serveur ou le script tourne : System, Compte Admin local, compte de domaine disposant des privilèges nécessaires (compte dédié ou GMSA). 

    Quand tu fais le bilan entre les 2 besoins, tu vois tout de suite de quoi tu as besoin. Cherche le point commun

    Ne me crois pas, vérifies le par toi-même. Exécutes ton script avec ton compte d'admin. Ca fonctionne sans pb ? Ce n'est pas le script, mais uniquement le compte.

    Cordialement

    Olivier

    samedi 20 février 2021 11:05
  • Bonjour Olivier,

    Merci pour ta réponse.

    J'avais positionné les droits "tout le monde" justement pour palier à cela. le compte system n'est pas accepté comme "tout le monde" si je comprend bien.

    Mon problème c'est que mes postes sont hors domaine, d'où la création du script et l'utilisation d'un agent pour l'exécuter. Avec cet agent je n'ai pas le choix du compte utilisé (system)

    J'ai essayé différentes solutions sans succès, je dois seulement arriver à copier les fichiers de mon serveurs distant vers mon poste local avec un script démarré en tant que system, après le reste cela pourra fonctionner.

    Et je n'arrive pas à changer de contexte utilisateur au sein même de mon script pour faire cette copie.


    lundi 22 février 2021 08:52
  • Bonsoir Briac,

    Ok, tu précises que les postes ne sont pas dans le domaine. Par conséquent, il faut passer les credentials pour chaque machine.Le compte System convient pour exécuter le script, mais ce dernier doit pour exécuter les cmdlets sur les machines distantes passer des credentials donnant des droits sur la (les) machine distante (typiquement le compte administrateur local ou un  autre compte).

    Attention : pas de credentials en clair dans les scripts. Il faut les passer de manière secure.

    En regardant ton code, je pense que le plus simple est de passer les credentials dans New-PSDrive. Ainsi, pour Copy-Item, New-Item, Start-Process, Get-ChildItem ça devrait passer.

    Il existe plusieurs moyens de passer les credentials. Tout dépend, si on veut les saisir de manière interactive (jouable si un ou deux), ou à partir d'un fichier (traitement de masse et mode non-interactif).

    Un petit mémo sur mon github perso ici : https://github.com/myusefulrepo/Tips/blob/master/Tips%20-%20Technics%20to%20pass%20a%20password%20securely.md

    Perso : j'aime bien l'export dans un .xml. On peut voir les comptes (mais pas les passwords bien entendu), on peut en ajouter/retirer à volonté facilement, c'est facile à implémenter.

    Fais toi ton idée.

    cordialement

    Olivier

    lundi 22 février 2021 18:38