1

我正在尝试使用 powershell 脚本替换本地组中的用户。

Function ReplaceUserInGroup {

    Param (
        [string]$Group,
        [string]$OldUserName,
        [string]$NewUserName        
    )

    [string]$computer=$env:ComputerName


    If($Group -And $OldUserName -And $NewUserName ) {
        $LocalGroup = [ADSI]"WinNT://$computer/$Group,group"

        $LocalGroup.Add("WinNT://$computer/$NewUserName")

        $LocalGroup.Remove("WinNT://$OldUserName")
    }
    Else {
            Write-Warning " ReplaceUserInGroup : Some or all the parameters are empty"
    }


}

此脚本的问题是,如果本地组中不存在 OldUserName,它将失败。

我想在从本地组中删除用户之前检查用户是否存在于组中。

换句话说,我想在一些 if 条件下包装 Remove 函数行,如下所示。

If (UserName exists in Localgroup) {
    $LocalGroup.Remove("WinNT://$OldUserName")
}

如何检查用户是否存在?

4

2 回答 2

2
    $members = $LocalGroup.psbase.Invoke("Members") | Foreach-Object  {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) }

    if($members -contains $OldUserName)
    {
        "$OldUserName is member"
    }
    else
    {
        "$OldUserName is NOT a member"
    }
于 2012-07-31T12:08:47.580 回答
1
    $objOu = [ADSI]"WinNT://${env:Computername}"
    $localUsers = $objOu.Children | where {$_.SchemaClassName -eq 'user'}  | % {$_.name[0].ToString()}

    # Ensure we have local user BOB
    if($localusers -contains "BOB" ){
       Write-Host "local user ${env:Computername}/BOB already exists"
    }
    else{
       Write-Host "Creating local user: /BOB"
       NET USER BOB "qwefgnbm" /ADD
    }

这将检查用户是否存在,如果不存在则添加一个。它可能有用。

于 2017-02-13T11:40:33.057 回答