{"id":580,"date":"2011-08-11T17:21:44","date_gmt":"2011-08-11T15:21:44","guid":{"rendered":"http:\/\/stephane.weblog.starend.org\/?p=580"},"modified":"2011-08-11T17:21:44","modified_gmt":"2011-08-11T15:21:44","slug":"verifier-dans-lad-les-comptes-verrouilles","status":"publish","type":"post","link":"http:\/\/stephane.weblog.starend.org\/?p=580","title":{"rendered":"V\u00e9rifier dans l&rsquo;AD les comptes verrouill\u00e9s"},"content":{"rendered":"<p style=\"text-align: justify;\">Dans l&rsquo;AD de Micro$oft, il n&rsquo;y a pas d&rsquo;objet sp\u00e9cifique pour g\u00e9rer l&rsquo;\u00e9tat actif\/inactif d&rsquo;un compte.<br \/>\nOn peut le manipuler via l&rsquo;interface de la console <em>ADUC<\/em>, mais \u00e7a n&rsquo;appara\u00eet pas directement dans la console <em>ADSI Edit<\/em>.<\/p>\n<p><!--more--><\/p>\n<p style=\"text-align: justify;\">En fait, c&rsquo;est g\u00e9r\u00e9 dans le champ <em>userAccountControl<\/em> en hexad\u00e9cimal (dans la console <em>ADSI edit<\/em>). Et c&rsquo;est le deuxi\u00e8me bit, soit la valeur 2. A <em>0<\/em> le compte est actif, \u00e0 <em>1<\/em> il est inactif. Il faut donc l&rsquo;extraire ou l&rsquo;injecter en hexa au bon endroit&#8230;<br \/>\nPfu :-(<\/p>\n<p>L&rsquo;extraction :<\/p>\n<pre>$code = \"Toto\"\n$ldapquery = \"LDAP:\/\/CN=\" + $code + \",OU=Users,DC=example,DC=lan\"<\/pre>\n<p style=\"text-align: justify;\">L&rsquo;objet retourn\u00e9 contient toutes les infos sur le compte. Le champ <em>UserAccountControl<\/em> est visible comme un nombre affich\u00e9 en d\u00e9cimal. Dans la console <em>ADSI edit<\/em>, il est affich\u00e9 en tant que nombre en hexad\u00e9cimal. Sauf que c&rsquo;est un objet de type <em>System.DirectoryServices.PropertyValueCollection<\/em> et non un <em>System.Int32<\/em> . Et, \u00e9videment, impossible de convertir cette valeur en hexa tagu\u00e9 objet AD en \u00ab\u00a0nombre\u00a0\u00bb hexa&#8230; Il faut passer par l&rsquo;\u00e9tat \u00ab\u00a0string\u00a0\u00bb pour ensuite le convertir en nombre. Et enfin on peut faire dessus des op\u00e9rations bool\u00e9ennes :<\/p>\n<pre>([int]([string](([ADSI]$ldapquery).UserAccountControl)) -band 0x2) -eq 0<\/pre>\n<p style=\"text-align: justify;\">Il y a une autre m\u00e9thode plus longue mais moins tordu :<\/p>\n<pre>$ldapuser = [ADSI]$ldapquery\n($ldapuser.Get('UserAccountControl') -band 0x2) -eq 0<\/pre>\n<p>Et pour \u00e9crire, deux cas. Le premier, on d\u00e9sactive inconditionnellement un code (bit 2 \u00e0 1) :<\/p>\n<pre>$ldapuser = [ADSI]$ldapquery\n$ldapuser.Put('UserAccountControl',($ldapuser.Get('UserAccountControl') -bor 0x2))\n$ldapuser.SetInfo()<\/pre>\n<p>Le deuxi\u00e8me cas, on active inconditionnellement le code (bit 2 \u00e0 0) :<\/p>\n<pre>$ldapuser = [ADSI]$ldapquery\n$ldapuser.Put('UserAccountControl',($ldapuser.Get('UserAccountControl') -band 0x7ffffffd))\n$ldapuser.SetInfo()<\/pre>\n<p>Et voila :-)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans l&rsquo;AD de Micro$oft, il n&rsquo;y a pas d&rsquo;objet sp\u00e9cifique pour g\u00e9rer l&rsquo;\u00e9tat actif\/inactif d&rsquo;un compte. On peut le manipuler via l&rsquo;interface de la console ADUC, mais \u00e7a n&rsquo;appara\u00eet pas directement dans la console ADSI Edit.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[314,404],"_links":{"self":[{"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=\/wp\/v2\/posts\/580"}],"collection":[{"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=580"}],"version-history":[{"count":0,"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=\/wp\/v2\/posts\/580\/revisions"}],"wp:attachment":[{"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=580"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=580"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/stephane.weblog.starend.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=580"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}