Il se peut que le mot de passe administrateur local soit requis pour X ou Y raison mais qu'il soit tout simplement oublié! Dans ce cas, il devient utile de connaitre les manipulations permettant de modifier le mot de passe administrateur local!

Cette manipulation s'effectue uniquement sur le poste depuis lequel il est nécessaire de changer le mot de passe administrateur. Je vous fournirai très prochainement la méthode pour faire cela sur un ordinateur distant.

Comment faire?

Nous aurons besoin au choix de :

  • Une console PS depuis une session ayant des droits d'administrateur sur le domaine
  • Une élévation de droits sur la console powershell

Nous allons créer un objet correspondant à une entrée dans la base de comptes locale, puis invoquer un paramètre permettant d'effectuer la modification.

Comme vous allez le voir, la syntaxe est assez spécifique, je vous l'expliquerai.

La commande ne fait que 2 lignes :

$compte = [adsi]("WinNT://localhost/Nom_compte,user")
$compte.psbase.invoke("SetPassword","NouveauM0tdepasse")

J'avais prévenu quand à la syntaxe!

Arrêtons nous quelques instants tout d'abord sur la définition de la variable $compte

$compte = [adsi]("WinNT://localhost/Nom_compte,user")

Pourquoi [adsi] alors que nous allons piocher dans une base locale? Et surtout... Qu'est ce qu'[adsi]?!

Il s'agit d'un adaptateur! Afin de rendre certaines opérations plus simples, Powershell inclut plusieurs "adaptateurs" tels qu'[adsi]. Ici, il simplifie la connexion à ADSI, peu importe que nous soyons en train de gérer un compte sur l'AD ou un compte local. Sans cela, nous aurions du créer une instance .NET de type System.DirectoryServices.DirectoryEntry afin de faire la même chose... Cette syntaxe crée donc cette instance pour nous!

WinNT quand à lui, est utilisé plutôt que LDAP car nous allons piocher dans une base locale. Nous aurions pu nous en servir également pour aller piocher dans un compte sur l'AD en utilisant la syntaxe "WinNT://domaine/utilisateur".

Quand à :

$compte.psbase.invoke("SetPassword","NouveauM0tdepasse")

Cette commande va tout simplement faire la modification du mot de passe en fonction de ce que vous avez rentré... Attention, le mot de passe est sensible à la casse, il se peut donc que vous ne puissiez faire la modification si vous ne respectez pas les règles de complexité!

Je fais un petit aparté quand à ça :

$compte.psbase.invoke("SetPassword","NouveauM0tdepasse")

Il s'agit d'une de ces "charmantes" subtilités (et une de ces raisons pour laquelle parfois Powershell me hérisse le poil), c'est que si nous faisons un get-member sur $compte, nous obtenons ceci :

compte%20sans%20gm%20force

Maintenant, faisons la même mais en ajoutant le paramètre -Force à Get-member. Vous remarquez la différence?

compte%20gm%20force

Non? Vous ne voyez pas? Je vous donne la réponse...

compte%20commandes

26 commandes sans le -Force pour 32 avec -Force.

Pourquoi?! Tout simplement parce que Get-member filtre de manière "intelligente" (une légère acidité dans le terme, oui) les commandes les plus utiles en filtrant celles qu'il ne juge pas forcément intéressantes Et bien sur, dans notre commande, PSBASE n’apparaît QUE avec -Force... Voila qui m'a rendu chèvre!

Ajouter un commentaire

Article précédent Article suivant