Question [Résolu] Déploiement compte admin local server

Plus d'informations
il y a 8 ans 6 mois #24211 par baptiste
Bonjour,

Je suis confronté à un problème et mes connaissances étant limitées je fait appel à vous.

J'ai un AD sous windows serveur 2012 r2, et on me demande de déployer sur toutes les machines du réseau une session locale, qui soit administrateur et sans que le mot de passe ne soit envoyé en clair.

Si possible on aimerait éviter d'avoir à déployer des logiciels sur les postes clients comme le propose LAPS.

Créer une GPO pour cela n'est maintenant plus possible, car le mot de passe ne peux plus être envoyé via les GPO (bloqué par Microsoft).

Je pensait passer par un script qui me créerais un fichier avec le mot de passe crypté que je mettrais dans un dossier partagé avec des droits restreints pour que seuls les administrateurs du domaine et le système puissent y avoir accès, et de déployer par gpo un script qui décrypterais le fichier du mot de passe et qui aurais créé dans la foulée un compte administrateur local.

J'ai passé une journée de recherche sur tout type de sites, j'ai testé plusieurs scripts trouvés et modifié avec les informations d'un réseau virtuel, mais rien ne fonctionne vraiment.

Voici un exemple d'un script qui se rapproche le plus de ce que je recherche:

script de création du mot de passe crypté:

[code:1]
$LocalAdminPW = \"azerty@1\" #the password that is used to set as the local admin password
$EncryptionPW = \"azerty@2\" #password to encrypt and decrypt the password
$File = \"C:\Temp\Password.tsv\" #file to create

#Create encryption key
$Sha256 = new-object System.Security.Cryptography.SHA256CryptoServiceProvider
$SecureStringKey = $Sha256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionPW))

#Encrypt the password with the user supplied encryption password
$PasswordSecureString = ConvertTo-SecureString -AsPlainText -Force -String $LocalAdminPW

#Create TSV-File with the encrypted password
ConvertFrom-SecureString -Key $SecureStringKey -SecureString $PasswordSecureString | Out-File -Force -FilePath \"$File\"

#Gathering the new encrypted password for the local administrator account
$LocalAdminPW = Get-Content $File
[/code:1]

script de décryptage et de création de l'utilisateur:

[code:1]
#function to get decrypted password
Function Get-DecryptedPassword {
[CmdletBinding()]
param(
$EncryptedPW,
$LocalAdminPW
)

#Decrypt the password with the user supplied encryption password
$Sha256 = new-object System.Security.Cryptography.SHA256CryptoServiceProvider
$SecureStringKey = $Sha256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionPW))
[SecureString]$SecureStringPassword = ConvertTo-SecureString -String $LocalAdminPW -Key $SecureStringKey
return ([System.Runtime.InteropServices.Marshal]::«»PtrToStringAuto([System.Runtime.InteropServices.Marshal]::«»SecureStringToCoTaskMemUnicode($SecureStringPassword)))
}

#Change password local admin account

$userAccount = \"admin-local\"
$objUser.psbase.Invoke(\"SetPassword\", (Get-DecryptedPassword -EncryptedPW $EncryptionPW -LocalAdminPW $LocalAdminPW))

$vm = [ADSI]\"WinNT://$env:computername,computer\"
$group = [ADSI]\"WinNT://$env:computername/administrators,group\"
$count = 0

$userAccounts | ForEach-Object {
$User = $vm.Create(\"User\",\"$_\"«»)
$User.SetPassword($passwords[$count])
$User.SetInfo()
$group.Add(\"WinNT://$env:computername/$_,Administrateurs\"«»)
$count++
}

#$LocalAdmin = \"Administrateur\"
#$objUser = [ADSI]\"WinNT://localhost/$($LocalAdmin), user\"
#$objUser.psbase.Invoke(\"SetPassword\", (Get-DecryptedPassword -EncryptedPW $EncryptionPW -LocalAdminPW $LocalAdminPW))
[/code:1]

3 lignes me font des erreurs, quand je test les scripts avant de les intégrers dans une GPO:

la ligne:
[code:1]
$objUser.psbase.Invoke(\"SetPassword\", (Get-DecryptedPassword -EncryptedPW $EncryptionPW -LocalAdminPW $LocalAdminPW))
[/code:1]

me fait l'erreur:

Impossible d’appeler une méthode dans une expression Null.
Au caractère C:\Users\test1\Desktop\decryptPassCreateAdmin.ps1:19 : 1
+ $objUser.psbase.Invoke(\"SetPassword\", (Get-DecryptedPassword -Encrypt ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull


la ligne:

[code:1]
$User.SetInfo()
[/code:1]

me fait l'erreur:

Exception lors de l'appel de «SetInfo» avec «0» argument(s): «Ce mot de passe ne correspond pas aux critères de stratégie de mot de passe. Vérifiez la longueur de mot de
passe minimale, la complexité du mot de passe et l’historique des critères de mots de passe.
»
Au caractère C:\Users\test1\Desktop\decryptPassCreateAdmin.ps1:28 : 5
+ $User.SetInfo()
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

la ligne:

[code:1]
$group.Add(\"WinNT://$env:computername/$_,Administrateurs\"«»)
[/code:1]

me fait l'erreur:

L'exception suivante s'est produite lors de la récupération du membre « Add » : « Le nom de groupe est introuvable.
»
Au caractère C:\Users\test1\Desktop\decryptPassCreateAdmin.ps1:29 : 5
+ $group.Add(\"WinNT://$env:computername/$_,Administrateurs\")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], ExtendedTypeSystemException
+ FullyQualifiedErrorId : CatchFromBaseGetMember

Merci pour votre aide :)<br><br>Message édité par: Arnaud, à: 27/09/17 11:26

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

Plus d'informations
il y a 8 ans 6 mois #24217 par Philippe
salut Livarkhal

c'est le problème des copier/coller incomplet

il manque plein de ligne de code sur ton script de décryptage
regarder sur le site ou tu la trouver pour l'avoir complet

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

Plus d'informations
il y a 8 ans 6 mois #24219 par baptiste
je suis un énorme boulet ... exact, le site où j'ai lâchement copier ces scripts étaient sur un autre forum où la personne demandait de l'aide, et une personne à répondu en corrigeant juste les erreurs de syntaxe ...
Je suis désolé pour le post inutile du coup ^^ et je te remercie pour ta réponse :)
Je clos donc le sujet et je met cis-joint le script original de microsoft (vu qu'il l'avait copié du site de microsoft).

support.microsoft.com/en-us/help/2962486....0%3Fwa%3Dwsignin1.0

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

Plus d'informations
il y a 8 ans 6 mois #24220 par Philippe
merci Livarkhal

heureux de voir que t'a trouver le problème :)
et merci pour le lien vers le script original B)

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

Plus d'informations
il y a 8 ans 6 mois #24221 par baptiste
Alors je reviens pour une autre problème avec le script proposé par microsoft :whistle:

Dans leur script ils proposent une solution pour créer des password random qui seront stockés dans un fichier TSV ... Seulement moi je veux que le compte admin qui sera créé soit le même sur tout les postes, avec le même mot de passe ...

De plus dans leur script (de ce que je comprend) ils demandent de renseigner le computername, mais nous les noms des machines sont ceux que windows définit à l'installation ... et ce paramètre ne nous intéresse pas vu que le script sera déployé par gpo sur tout le domaine.

faut vraiment que je me plonge dans le powershell :lol:

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

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