我需要从本地管理员组中删除少数域用户和组,作为项目的一部分。由于为许多服务器做同样的事情将耗费大量时间,我想通过PowerShell做同样的事情。 以下是我正在使用的代码: 首先,我试图在一台服务器上本地执行此操作。一旦成功,我将使用forloop一次为所有服务器运行它。
$RemoteComputer = "US05APP9008.jnj.com"
$Computer = [ADSI]("WinNT://$RemoteComputer,computer")
$Group = $Computer.PSBase.Children.Find("Administrators")
$account="domain\groupname"
$Group.Remove("WinNT://$account")
错误 使用“1”参数调用“删除”的异常:“无法添加成员t o或从本地组中删除,因为该成员不存在。 “ 在C:\ Users \ admin_broy5 \ Desktop \ remtest.ps1:6 char:14 + $ Group.Remove<<<< ( “WINNT:// NA \ admin_broy5”) + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:CatchFromBaseAdapterMethodInvokeTI
我尝试通过另一个代码在stackoverflow中的其他论坛中找到了同样的内容,但它也给出了同样的错误:
$CompStat = Get-WmiObject win32_computersystem;
$Localhst = $CompStat.Name;
$Computer = [ADSI]('WinNT://'+$localhst+',computer');
$accName = [ADSI]('WinNT://NA\admin_broy5,user');
$group = [ADSI]('WinNT://'+$Localhst+'/Administrators,group');
$group.remove($accName.path);
错误: 使用“1”参数调用“remove”的异常:“无效的目录 路径名已通过 “ 在C:\ Users \ admin_broy5 \ Desktop \ rem.ps1:6 char:1 + $ group.remove($ accName.path); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请告诉我如何实现目标? 在此先感谢!!!
答案 0 :(得分:0)
您使用的命令看起来没有任何问题,只是它们不适用,您需要添加其他代码来解决它们。在第一种情况下,您似乎正在尝试从不是其成员的组中删除用户。没关系,只需使用try / catch处理异常。
以下是使用try / catch处理错误的示例函数:
function Remove-LocalUserAccount {
param ( [string]$userName,
[string]$computerName = $ENV:COMPUTERNAME )
[ADSI]$computer="WinNT://" + $computerName
try { $computer.delete("User",$userName) }
catch { logmsg -msg $error -entrytype "Error"; return $false }
return $true
}
在你的情况下,你会在$ group.remove()周围使用相同的技术,就像你期望发生错误的那样:
try {
$group.remove($accName.path);
}
catch {
# do something, if you need to act on the error... or not
}