今天我遇到了一个有趣的问题。基本上,从一个域中删除了一大堆机器帐户。由于计算机帐户分布在众多的u中,纯粹的数字删除帐户,以及删除和实现之间的持续时间,做某种类型的恢复将被证明是有趣的。所以…提出了这个问题。如何远程使大量的机器重新加入域一旦他们的帐户已从目录删除?
当然,需要使用某种自动化脚本。由于倾向于使用PowerShell,我知道我将使用什么。这就留下了一个真正的问题:如何做到这一点?NetDom我想到了,就试了一下。但是,出于某种原因,似乎需要存在机器帐户,以便将机器放入一个工作组,然后再返回域。
失败后,我变成了一个信任的老朋友叫WMI和两个方法命名:UnjoinDomainOrWorkgroup和JoinDomainOrWorkgroup。最后,它成功了,为了每个人的利益,我决定发布部分结果脚本。
* * *注意* * *
该脚本需要PowerShell 2.0 CTP2。而且,它又快又脏……通常我用大量的错误处理之类的方法来清理我的脚本。但是,我没有时间,所以请注意。
所以,脚本的所有荣耀(注意格式):
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # - # # - foreach(记录Machine_List美元){$ ObjMachine = Get-WMIObject海尔集团“Win32_ComputerSystem”名称空间“根\ cimv2”-电脑记录。美元MachineName凭据LocalMachineCred认证6模拟3 write-host
#主要
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#——
#设置配置变量
#——
美元Machine_CSV = " machine_list.csv "
美元域名= " mydomain "
#定义的datatable
#——
$MachinesTable = new-object System.Data.DataTable
MachinesTable美元。表= "机器"
[空白]MachinesTable.Columns.Add美元(“名字”)
[空白]MachinesTable.Columns.Add美元(“状态”)
[空白]MachinesTable.Columns.Add美元(“UnJoinStatus”)
[空白]MachinesTable.Columns.Add美元(“JoinStatus”)
#获取域信誉
#——
$ DomainCred = Get-Credential
定义通用陷阱
#——
陷阱{write-host $_ -Foregroundcolor Red;
继续}
$Machine_List = Import-Csv
& {
(MachineName = $美元Record.MachinePath) .Split (", ")
(MachineParentOU = $美元Record.MachinePath) .SubString($(美元MachineName[0]。长度+ 1))
(MachineName = $美元MachineName [0] .Split (" = ")) [1]
Add-Member -inputObject $Record -membertype noteProperty '
-name "MachineName" -value $MachineName
Write-Host”检查$ (Record.MachineName美元)"-NoNewline
{。
陷阱{继续}
$Ping = new-object Net.NetworkInformation.Ping
结果= Ping.Send美元($ Record.MachineName)
}
如果美元的结果。地位eq“成功”){
写host ' t "[ONLINE]" -Foregroundcolor Green
Add-Member -inputObject $Record -membertype noteProperty '
-名称“Status”-值“Online”
}
其他{
write-host ' t "[脱机]" -前色为红色
Add-Member -inputObject $Record -membertype noteProperty '
-名称“Status”-值“脱机”
}
如果美元的纪录。地位eq“在线”){
$ LocalMachineCred = Get-Credential
$ = [System.Runtime.InteropServices.marshal]:型:SecureStringToBSTR (DomainCred.Password美元)
密码= [System.Runtime.InteropServices.marshal]:美元:PtrToStringAuto(美元)型
UnJoinStatus = ObjMachine美元。UnjoinDomainOrWorkgroup($Null, $Null)
JoinStatus = ObjMachine美元。JoinDomainOrWorkgroup($DomainName, $Password, $($DomainCred.UserName), $MachineParentOU, 3)
}
[空白](MachinesTable.Rows.Add美元纪录。MachineName,美元纪录。地位,UnJoinStatus美元。ReturnValue JoinStatus.ReturnValue美元)
}
}
MachinesTable美元