Я хочу запустить сценарий 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> }
Насколько мне известно, нет возможности передать альтернативные учетные данные с помощью ускорителя типа ADSI. Вы можете попытаться обойти это в своем коде двумя способами:
Invoke-Command
командлет, который позволяет передать блок сценария для выполнения и альтернативные учетные данные.Я никогда не пробовал ни то, ни другое, так что потребуется несколько проб и ошибок.
Другой вариант, который может быть более гибким для вас, - не использовать ускоритель типа ADSI. Это можно сделать двумя способами.
DirectoryService
классы. Вот хорошая статья который проведет вас через этот процесс. Он включает пример использования альтернативных учетных данных.Извините, на самом деле это должен быть комментарий, а не ответ, но я хотел опубликовать рабочий код на случай, если он будет полезен кому-то еще.
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 = users, dc = test, dc = com" $ newuser = $ ou.Create ("User", "cn = $ name" $ newuser.SetInfo ()
Я понимаю, что приведенный выше код использовался для создания пользователя, но концепция должна оставаться верной для любого другого действия.
Не похоже, что он вам еще нужен, но Вот это ссылка о том, как создать учетные данные PowerShell.