我有一个简单的任务要完成。我们正在淘汰很多旧机器,作为流程的一部分,我需要从 AD 中删除主机名。我从我们的库存系统中下载了要淘汰的系统列表(CSV 文件),我的目标是Powershell
导入此列表,然后进行批量删除。
问题是,我们使用Bitlocker
,因此我无法使用Remove-ADcomputer
(给出叶子错误)。我尝试使用以下脚本Remove-ADOjbect
,但没有成功。
Import-Module ActiveDirectory
$Computers = Import-CSV -LiteralPath C:\MIS\scripts\RemoveAD.csv
foreach ($Computer in $Computers)
{
Get-ADComputer -Identity $Computers | Remove-ADobject -Recursive -Confirm:$false
}
我之前从未使用 Powershell 编写过任何脚本,只是用命令来检索信息。任何帮助都非常感谢!
答案1
在本地主机上进行快速测试:
$env:COMPUTERNAME |
foreach {
$TargetHost = $PSItem
Try
{
"Processing hostname $PSItem"
# Check Bitlocker state
If (Get-BitLockerVolume | Where-Object VolumeStatus -eq 'FullyDecrypted' -ErrorAction Stop)
{
# Rest of your code here
"$TargetHost is not encrypted"
}
}
catch
{
# Drive encrypted - Catch errors here
Write-Warning "$TargetHost is encrypted"
$PSItem.Exception.Message
}
}
# Results
<#
Processing hostname localhost
localhost is not encrypted
#>
我现在不在我的 ADDS 实验室中尝试这个,但是像这样简单的事情应该可以让你实现这个目标:
Import-Csv -Path 'C:\MIS\scripts\RemoveAD.csv' |
foreach {
$TargetHost = Get-ADComputer -Identity $PSItem
Try
{
"Processing hostname $PSItem"
# Check Bitlocker state
If (Get-BitLockerVolume | Where-Object VolumeStatus -eq 'FullyDecrypted' -ErrorAction Stop)
{
# Rest of your code here
Remove-ADobject -Identity $TargetHost -WhatIf
}
}
catch
{
# Drive encrypted - Catch errors here
$PSItem.Exception.Message
Remove-BitLockerKeyProtector -WhatIf
Remove-ADobject -Identity $TargetHost -WhatIf
}
}