每周我都会收到一台计算机列表和一台与每台计算机关联的用户名。我需要从关联计算机上的Administrators组中删除每个特定用户。
有没有办法编写脚本?
答案 0 :(得分:2)
正如我在评论中所说的那样,Austin French的答案应该可以正常运行,但它可能有点慢,因为它依赖于一个外部应用程序(PSExec)来建立与远程计算机的连接,执行操作,然后向PowerShell报告。还期待一些令人讨厌的错误,因为PSExec与PowerShell并不完全相同。
作为替代方案,我建议使用ADSI类型适配器[ADSI]
通过.Net功能执行操作。
$List = Import-CSV File.CSV
ForEach($Item in $List){
$objUser = [ADSI]("WinNT://domain/$($Item.UserName)")
$objGroup = [ADSI]("WinNT://$($Item.ComputerName)/Administrators")
$objGroup.PSBase.Invoke("Remove",$objUser.PSBase.Path)
}
这应该工作得很好。显然,您需要将域名放在域名所在的位置,或者如果要删除的用户是本地用户帐户,则需要将其更改为$($ Item.computername)。我相当肯定,这比PSExec工作得快得多,而且不依赖于外部应用程序。
答案 1 :(得分:1)
我无法对此进行全面测试,但您应该能够做到这一点:
导入列表:
Import-Csv "File.csv" | Foreach-Object {
$User= $_.Username
$PC = $_.ComputerName
psexec "$PC" net user "$User" /delete
}
这假设您有名为Username和ComputerName的标题列。