指定凭据以运行 Powershell 脚本来查询 AD

指定凭据以运行 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> }

答案1

据我所知,没有办法使用 ADSI 类型加速器传递备用凭据。您可以尝试在代码中解决这个问题的两种方法是:

  • 让 powershell.exe 以域用户而不是本地用户的身份运行 - 这将导致脚本中的所有内容使用域凭据
  • 使用Invoke-Commandcmdlet,它允许您传入要执行的脚本块和备用凭据。

我从来没有尝试过这两种方法,因此需要进行一些反复试验。

另一个对您来说更灵活的选择是不使用 ADSI 类型的加速器。有两种方法可以实现这一点。

  1. 使用.NET 框架DirectoryService类。这是一篇好文章引导您完成此过程。其中包括使用备用凭据的示例。
  2. 使用Quest Active Directory 管理cmdlet。这些是许多 AD 内容的包装器,可使很多事情变得更容易。它们还允许您传递备用凭据。

答案2

抱歉-这实际上应该是一条评论,而不是答案,但我想发布工作代码以防其他人有用。

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 > }

现在我已经证明了这个概念,将加密密码以使其更安全一些。

感谢您的帮助!

答案3

您可以通过添加以下行来继续使用 [ADSI] 加速器并传递凭据:

获取凭证

这应该是您脚本中的第一件事。在我自己的环境中,我需要编写一个脚本来连接到不同的域。对于该不同的域,我拥有不同的凭据,因此编写以下内容使我能够完成我需要做的事情:

获取凭据导入 csv test.csv | foreach { $ou = [ADSI]"LDAP://ou=users,dc=test,dc=com" $newuser = $ou.Create("User", "cn=$name" $newuser.SetInfo()

我知道上述代码用于创建用户,但这个概念也适用于任何其他操作

答案4

看起来你不再需要它了,但是这里是关于如何创建 PowerShell 凭据的链接。

相关内容