Создание локальной группы и добавление пользователя в группу - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть сценарий PowerShell, который создает сайты IIS и настраивает параметры.Большинство из них работает должным образом, за исключением функции добавления пользователя домена в определенную локальную группу или, если группа не существует, чтобы создать группу, а затем добавить пользователя.Я получаю эту ошибку при добавлении в группу:

Исключение вызывает "add" с аргументом (ами) "1": "Не удалось добавить или удалить участника из локальной группы, поскольку онне существует.

У меня PowerShell v1.0, поэтому у меня нет доступа к модулю Microsoft.PowerShell.LocalAccounts, поэтому использование Add-LocalGroupMember и New-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 голосов
/ 25 апреля 2019

Проблема заключается в том, что 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"
    }
}
...