创建本地组并将用户添加到该组

时间:2019-04-25 15:17:59

标签: powershell iis-7 powershell-v1.0

我有一个PowerShell脚本,该脚本可以构建IIS网站并配置设置。除了将域用户添加到特定本地组的功能,或者该组不存在以创建组而不是添加用户的功能外,大多数功能都能按预期工作。添加到群组时出现此错误:

  

使用“ 1”作为参数调用“ add”的异常:“由于该成员不存在,无法将其添加到本地组或从本地组中删除该成员。

我拥有PowerShell v1.0,因此我无法访问Microsoft.PowerShell.LocalAccounts模块,因此不能使用Add-LocalGroupMemberNew-LocalGroup

function addEventLogWriter($appPoolUser) {
    $user = $appPoolUser
    $group = "Event Log Writers"
    $description = "Members of this group can write event logs from local machine" 

    #try{
    $groupObj =[ADSI]"WinNT://./$group,group" 
    $membersObj = @($groupObj.psbase.Invoke("Members")) 
    $members = ($membersObj | foreach {
        $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
    })

    Write-Output "Adding Service Account To Event Log Writers..."
    if ($members -contains $user) {
        Write-Host "$user already exists in the group $group..."
    } else {
        $groupObj.add("WinNT://./$user,user")
        Write-Output "$user added to $group"
    }
}

目前已经创建了“事件日志编写器”组,但如果没有(例如:建立新服务器等),我希望我的功能检查以确保该组存在,然后创建组,然后添加用户。

1 个答案:

答案 0 :(得分:0)

问题是因为ADSI需要使用斜杠而不是像典型用户名那样的反斜杠。

此外,组成员身份如何返回,在这种情况下,它会删除域名,因此,在查看用户名是否存在时,我们必须将其拆分。

因此,如果您的$appPoolUser是具有完整用户名的凭据对象:

function addEventLogWriter($appPoolUser) {
    $AdsiUsername = $appPoolUser.replace('\','/')
    $user = $appPoolUser.Split('\')[1]

    $group = "Event Log Writers"
    $description = "Members of this group can write event logs from local machine" 

    #try{
    $groupObj =[ADSI]"WinNT://./$group,group" 
    $membersObj = @($groupObj.psbase.Invoke("Members")) 
    $members = ($membersObj | foreach {
        $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
    })

    Write-Output "Adding Service Account To Event Log Writers..."
    if ($members -contains $user) {
        Write-Host "$user already exists in the group $group..."
    } else {
        $groupObj.add("WinNT://./$AdsiUsername,user")
        Write-Output "$user added to $group"
    }
}