域重新加入后成像任务

时间:2017-06-18 15:51:34

标签: windows powershell deployment

我的问题:

编辑:我特意尝试通过Powershell以编程方式执行此操作。

如何查看当前未加入域的计算机(新建映像)是否在域中有条目,以便在将计算机重新添加到域之前将其删除?即为了确保在我的图像计算机中删除旧记录并且每台机器只存在一个计算机对象?

我知道如何检查计算机当前是否已连接到域,并且我知道如何协调信任关系。我是否犯了错误,不使用脚本将计算机作为预安装任务从域中拉出来?我已经对许多计算机进行了成像,但我忘记了一些软件,并将再次重新成像。所以我希望能够实现这一目标,以便在下次复飞时删除所有重复的条目。

背景

我最近进入了一个网络和域名,文档可用率低于10%。这是一个可爱的系统之一,更多的是胶带,因为它是根据需要使用当时可用的任何教程构建的。

在尝试解决一些更明显的问题时,我已经准备了一个全新的Windows 10映像。

现在,所有计算机已经在域中,但由于组织问题等原因,我使用powershell脚本重新添加它们并将它们放入更好定义的OU中,其名称更有意义。以前的设备是以使用它们的个人命名的,但由于人员变化太多,系统在跟踪设备方面完全无效。

以前的搜索尝试:

我已尝试搜索后期图像任务,以便在将计算机添加到域之前检查计算机是否已存在,但我能通过Google和Spiceworks获得的唯一结果就是继续添加计算机或将其从域中删除,以及修复信任关系的计算机。

可能只是因为我没有意识到这个问题的正确措辞,所以如果这个问题得到了回答,我会欣喜若狂地发布链接给我。

感谢您的阅读!

2 个答案:

答案 0 :(得分:0)

一个简单的get-adcomputer computername会告诉您该帐户是否已存在于域(活动目录)

答案 1 :(得分:0)

解决方案最终只是将计算机添加到域中,然后在90天后我运行了一个脚本来清除任何未报告到Active Directory的内容。我在180天的时候对帐户做了同样的事情。

这意味着我在Active Directory中有大约10,000个额外的项目并且对速度产生了负面影响,但是现在所有内容都被正确跟踪了,我将不必在明年重复这个过程。

如果我意外删除了仅在一年中某些时候使用过的机器,例如ISTEP测试缓存机,我确定使用ldifde备份所有项目。能够支持它们使我更愿意绕过协调条目并简单地清除它们。

以下是遇到相同问题的脚本:

#I always set the location at the start of a script in case I forget at the end of a previous script.
Set-Location C:\

#ActiveDirectory is the only necessary module for this script.
Import-Module ActiveDirectory

#While this is not 100% secure, I still feel it is better than leaving the credentials in plaintext within the code.
$keyfile = "\\[domain controller]\GPO Deployment Files\Scripts\AES.txt"
[byte[]] $key = ([byte array key])
$secure = Get-Content $keyfile | ConvertTo-SecureString -Key $key
$username = "[domain\admin]"
$cred = new-object -typename System.Management.Automation.PSCredential `
         -argumentlist $username, $secure

#Establishes the 90 day cutoff based off the current day.
$datecutoff = (Get-Date).AddDays(-90)

#As I wanted to go district-wide, I did not bother adding an OU based filter.
$computers = Get-ADComputer -Filter {LastLogonDate -lt $datecutoff} -Properties * | Sort LastLogonDate | Select DistinguishedName,Name,LastLogonDate

#This is a test CSV - I ran all code up until this line so I could verify the list with a quick visual skim.
$computers | Add-Content -Path "\\[domain controller]\DeletedADItems\test.csv"

#Stepping through the list
Foreach ($computer in $computers) {

#I know there are likely elegant ways to do this, but using the -replace option was the simplest solution I could come up with at the time.
    $computername = $computer.Name -replace '@{name=',''
    $computername = $computername -replace '}',''
    $computerDN = $computer.DistinguishedName -replace '@{DistinguishedName=',''
    $computerDN = $computerDN -replace '}',''
<# I discovered that LDIFDE doesn't always play nicely with PS drives and such, or at least it failed to do so in my case.
So I back up the files to my local drive and then I copy them to the domain controller path that I used with the test.csv file. #>
    $exportFile = "C:\DeletedADItems\$computername.ldf"

#Prior to deletion, export the object to the export file location.
    ldifde -d "$computerDN" -f "$exportFile"

#Finally, remove the item and mark confirm false so you don't have to confirm hundreds of deletions.
    Remove-ADComputer -Identity "$computerDN" -Confirm:$False

}

这主要是不言自明的,但为了以防万一,我添加了一些基本的评论。