从本地管理员通过Powershell删除用户/组时出错

时间:2015-11-10 01:28:37

标签: powershell

我需要从本地管理员组中删除少数域用户和组,作为项目的一部分。由于为许多服务器做同样的事情将耗费大量时间,我想通过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); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

请告诉我如何实现目标? 在此先感谢!!!

1 个答案:

答案 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
}