我想运行一个PowerShell脚本来查询AD不在域的机器。
基本上我想查询是否有计算机帐户已经在这台机器的域名,并创build它,如果没有。 因为这必须在机器join域之前发生,所以我认为我需要指定一些证书来使其运行。 (我对Powershell很新颖,所以如果这是一个新手问题,请道歉!)
我用来检查帐户的脚本如下,然后一旦运行它将使用指定的计算机名称join域。
你能告诉我如何指定一些域凭据来运行脚本的这一部分?
干杯,
本
$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> }
据我所知,没有办法使用ADSItypes加速器传递备用凭据。 你可以尝试在代码中解决这个问题的两种方法是:
Invoke-Command cmdlet,它允许您传递脚本块来执行,并使用备用凭据。 我从来没有尝试过这些,所以这将需要一些试验和错误。
另一个可能更灵活的select是不使用ADSItypes加速器。 有两种方法可以做到这一点。
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 > }
现在我已经certificate了这个概念,将密码encryption,使它更安全。
谢谢你的帮助!
您可以继续使用[ADSI]加速器并通过添加以下行来传递凭据:
GET-凭据
这应该是你的脚本中的第一件事情之一。 在我自己的环境中,我需要编写一个脚本来连接到不同的域。 有了这个不同的域我有不同的凭据,所以编写以下允许我做我需要做的事情:
Get-Credential Import-csv test.csv | foreach {$ ou = [ADSI]“LDAP:// ou = users,dc = test,dc = com”$ newuser = $ ou.Create(“User”,“cn = $ name”$ newuser.SetInfo()
我明白,上面的代码是用来创build一个用户,但这个概念应该适用于任何其他行动
不出现,你仍然需要它,但这里是一个关于如何创build一个PowerShell凭证的链接。