Укажите учетные данные для запуска скрипта Powershell для запроса AD
Я хочу запустить скрипт powershell для запроса AD с компьютера, который НЕ находится в домене.
В основном я хочу запросить, есть ли учетная запись компьютера в домене для этой машины, и создать ее, если ее нет. Поскольку это должно произойти до того, как машина присоединится к домену, я предполагаю, что мне потребуется указать некоторые учетные данные, чтобы она могла работать. (Я довольно новичок в Powershell, поэтому извиняюсь, если это вопрос новичка!)
Сценарий, который я использую для проверки учетной записи, приведен ниже, а затем, после его запуска, он присоединится к домену с использованием указанного имени компьютера.
Можете ли вы сказать мне, как указать некоторые учетные данные домена для запуска этого раздела сценария как?
Ура,
Бен
$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> }
4 ответа
Насколько я знаю, нет возможности передать альтернативные учетные данные с помощью ускорителя типа ADSI. Есть два способа обойти это в вашем коде:
- powershell.exe запускается как пользователь домена, а не как локальный пользователь - это заставит все в сценарии использовать учетные данные домена
- использовать
Invoke-Command
Командлет, который позволяет передать блок сценария для выполнения и альтернативные учетные данные.
Я никогда не пробовал ни одного из них, так что это потребует проб и ошибок.
Другой вариант, который может быть более гибким для вас, это не использовать ускоритель типа ADSI. Есть 2 способа сделать это.
- Используйте.NET Framework
DirectoryService
классы. Вот хорошая статья, которая проведет вас через этот процесс. Он включает в себя пример использования альтернативных учетных данных. - Используйте командлеты Quest Active Directory Management. Это обертки вокруг множества рекламных материалов, которые облегчают многие вещи. Они также позволяют вам ввести альтернативные учетные данные.
Извините - это действительно должен быть комментарий, а не ответ, но я хотел опубликовать рабочий код на тот случай, если он пригодится кому-то еще.
MattB был ударом по деньгам! Получил следующую работу:
$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 > }
Теперь я доказал концепцию, зашифрую пароль, чтобы сделать его немного более безопасным.
Спасибо за вашу помощь!
Вы можете продолжать использовать ускоритель [ADSI] и передавать учетные данные, добавив следующую строку:
Get-Credential
Это должно быть одной из первых вещей в вашем сценарии. В моем собственном окружении мне нужно было написать скрипт для подключения к другому домену. С этим другим доменом у меня были разные учетные данные, поэтому написание следующего позволило мне сделать то, что мне нужно было сделать:
Get-Credential Import-csv test.csv | foreach {$ ou = [ADSI] "LDAP: // ou = пользователи,dc=test,dc=com" $newuser = $ou.Create("Пользователь", "cn=$name" $ newuser.SetInfo()
Я понимаю, что приведенный выше код был использован для создания пользователя, но концепция должна быть верна для любого другого действия
Не похоже, что он вам все еще нужен, но вот ссылка о том, как создать учетные данные PowerShell.