2 votes

Spécifier les informations d'identification pour exécuter le script Powershell script afin d'interroger AD

Je souhaite exécuter un script powershell script pour interroger AD à partir d'une machine qui n'est PAS sur le domaine.

En gros, je veux faire une requête pour voir s'il y a déjà un compte d'ordinateur sur le domaine pour cette machine et le créer si ce n'est pas le cas. Comme cette opération doit avoir lieu avant que la machine ne rejoigne le domaine, je suppose qu'il me faudra spécifier certaines informations d'identification pour qu'elle puisse s'exécuter. (Je suis assez novice en Powershell, donc je m'excuse si c'est une question de débutant !)

Le script que j'utilise pour vérifier le compte est ci-dessous, et une fois qu'il a été exécuté, il rejoint le domaine en utilisant le nom d'ordinateur spécifié.

Pouvez-vous me dire comment spécifier des informations d'identification de domaine pour exécuter cette section du script en tant que ?

チアーズ

Ben

$found=$false
$thisComputer = <SERVICE TAG FROM BIOS>
$ou = [ADSI]"LDAP://OU=My Computer OU,DC=myDomain,DC=com"
foreach ($child in $ou.psbase.Children ) {   
    if ($child.ObjectCategory -like '*computer*') {
        If ($child.Name -eq $thisComputer) {
            $found=$true
        } 
    }
}

If ($found) { <DELETE THE EXISTING ACCOUNT> }

3voto

minty Points 7864

À ma connaissance, il n'existe aucun moyen de transmettre des informations d'identification alternatives à l'aide de l'accélérateur de type ADSI. Vous pouvez essayer de contourner ce problème dans votre code de deux façons :

  • faire en sorte que powershell.exe soit exécuté en tant qu'utilisateur du domaine et non en tant qu'utilisateur local - ceci aura pour effet que tout ce qui se trouve dans le script utilisera les informations d'identification du domaine.
  • utiliser le Invoke-Command qui vous permet de transmettre un bloc script à exécuter et d'autres informations d'identification.

Je n'ai jamais essayé ni l'un ni l'autre, il faudra donc procéder par essais et erreurs.

Une autre option qui pourrait être plus flexible pour vous est de ne pas utiliser l'accélérateur de type ADSI. Il y a deux façons d'y parvenir.

  1. Utiliser le cadre .NET DirectoryService classes. Voici un bon article qui vous accompagne dans cette démarche. Elle comprend un exemple utilisant d'autres informations d'identification.
  2. Utiliser le Quest Active Directory Management cmdlets. Il s'agit d'enveloppes autour d'un grand nombre de fonctions AD qui facilitent beaucoup de choses. Ils vous permettent également de transmettre d'autres informations d'identification.

2voto

bernie Points 44206

Désolé - ceci devrait être un commentaire et non une réponse, mais je voulais poster le code de travail au cas où il serait utile à quelqu'un d'autre.

MattB a vu juste ! J'ai réussi à faire fonctionner les éléments suivants :

$thisComputer = <SERVICE TAG FROM BIOS>
$found = $false

$strFilter = "(&(objectCategory=Computer))"

$objDomain = New-Object System.DirectoryServices.DirectoryEntry "LDAP://mydomain.com", <USER>, <PASSWORD>

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = "Subtree"

$colProplist = "name"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}

$colResults = $objSearcher.FindAll()

foreach ($objResult in $colResults)
    {$objItem = $objResult.Properties; 
        if ($objItem.name -eq $thisComputer) {
            $found = $true
        }   
    }

if ($found) { <DELETE MACHINE ACCOUNT > }

Maintenant que j'ai prouvé le concept, je vais crypter le mot de passe pour le rendre un peu plus sûr.

Merci de votre aide !

1voto

Vous pouvez continuer à utiliser l'accélérateur [ADSI] et à transmettre des informations d'identification en ajoutant la ligne suivante :

Obtenir un justificatif d'identité

Cela devrait être l'une des premières choses dans votre script. Dans mon propre environnement, j'ai dû écrire un script pour me connecter à un domaine différent. Avec ce domaine différent, j'avais des informations d'identification différentes, donc écrire ce qui suit m'a permis de faire ce que j'avais à faire :

Obtenir un justificatif d'identité Import-csv test.csv | foreach { $ou = [ADSI] "LDAP://ou=users,dc=test,dc=com" $newuser = $ou.Create("User", "cn=$name") $newuser.SetInfo()

Je comprends que le code ci-dessus a été utilisé pour créer un utilisateur, mais le concept devrait être valable pour toute autre action.

0voto

Il ne semble pas que vous en ayez encore besoin, mais ici est un lien qui explique comment créer un identifiant PowerShell.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X