Добавление пользователей в локальные группы при помощи PowerShell

В данной статье будет рассмотрен способ добавления пользователей в определенные для них группы, информация по которым будет браться из базы данных.
Следующий командлет PowerShell добавляет пользователя AD в заданную локальную группу пользователей:

function Add-LocalUser{
     Param(
        $computer   = $env:computername,
        $group      = "GroupName",
        $userdomain = $env:userdomain,
        $username   = $env:username
    )
        ([ADSI]"WinNT://$computer/$group,group").psbase.Invoke("Add",([ADSI]"WinNT://$userdomain/$username").path)
}
Следующий командлет выполняет SQL-запрос на заданной базе данных MS SQL Server и возвращает табличный результат.

function Invoke-SQL {
    param(
        [string] $dataSource = "ServerName",
        [string] $database   = "DbName",
        [string] $sqlCommand = "select [User], [Domain], [Group] from dbo.vUserRights"
      )

    $connectionString = "Data Source=$dataSource; " +
            "Integrated Security=SSPI; " +
            "Initial Catalog=$database"

    $connection = new-object system.data.SqlClient.SQLConnection($connectionString)
    $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
    $connection.Open()

    $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
    $dataset = New-Object System.Data.DataSet
    $adapter.Fill($dataSet) | Out-Null

    $connection.Close()
    $dataSet.Tables
}
Получаем из базы данных таблицу принадлежности пользователей к группам и добавляем каждого пользователя в определенную для него локальную группу на данной машине.

$users = Invoke-SQL -sqlCommand  "select [User], [Domain], [Group] from dbo.vUserRights";
foreach ($user in $users.Rows)
{
    Add-LocalUser -group $user["Group"] -username $user["User"] -userdomain $user["Domain"] 
}