Как использовать модуль PSGSUITE PS для добавления групп Google? - PullRequest
0 голосов
/ 15 января 2019

Хорошо, я работаю в небольшом бизнесе, и они используют электронную таблицу Google в качестве "Phone list" для поиска и связи с сотрудниками. Я установил PSGSUITE модуль powershell, и он, кажется, работает очень хорошо, но я новичок в powershell и кодировании в целом. Лист фильтра, который я сделал вместе со списком телефонов, помещает сотрудников в соответствующие группы. Пример тогда код.

"phone list" 
Name    #   Company code    Ext.    Department  Job Title   Email
Hayden  111-222-333 JOP     IT  Technician  example@example.com

«Фильтр 2 листа»

JOP SPD
hayden@.com lisa@.com
john@.com   arron@.com
david@.com  mike@.com

Я хочу добавить эти письма в соответствующие группы Google

## NOVA BEAZ ##
## add groups in google based on company title 
###
####
# Import Modules
Import-Module PSGSuite
# Create Array of Groups
$Title = (Import-GSSheet -SpreadsheetId "1NtCT5ruoL4Kf4-ec55xe-L8esXcSY8orfd-zOFK4q4k" -SheetName "Filter" -Headers "None"  -Range "A1:1")
$Title = $Title | % { $_ }
$Groups = (Get-GSgroup -Fields "Name" )
    if($Title = $Groups)
        #{add that users email to the group}
    #else 
        {echo "there is now group that matches that"}

Основная проблема в том, что я действительно просто не знаю, как правильно пробежаться по массивам и выбрать все электронные письма в этой строке, чтобы добавить их в группы Google. Мне кажется, мне нужна форма массива или списка объектов для хранения моих электронных писем. хочу, чтобы это было динамичным.

1 Ответ

0 голосов
/ 29 мая 2019

Выдержки из моего сообщения в блоге о том, как использовать модуль PSGusite.

Пожалуйста, проверьте, отвечает ли следующее на ваш вопрос. Если нет, дайте мне знать.

Процесс пользователя

Для начала нам нужно импортировать модуль и затем использовать команду Get-GSDriveFileList, чтобы найти Google Sheet, где хранятся наши данные.

Далее мы используем команду Import-GSSheet для импорта данных наших пользователей и групп.

Получить данные из GSheet

# Import module
Import-Module -Name PSGSuite

# Discover spreadsheet Id in drive file list
$Spreadsheet = Get-GSDriveFileList -Filter "name = 'UserManagement'"

# Get data from each sheet from Google spreadsheet
$UserData = Import-GSSheet -SpreadsheetId $Spreadsheet.Id -SheetName 'Users'
$GroupData = Import-GSSheet -SpreadsheetId $Spreadsheet.Id -SheetName 'Groups'

Создание организационных единиц

Мы используем Get-GSOrganizationalUnit, чтобы определить, существует ли OU. И затем мы используем New-GSOrganizationalUnit, чтобы создать его, если это не так.

foreach ($Group in $GroupData) {
    $SplitPath = $Group.OrgUnitPath -Split '/'
    $ParentPath = $SplitPath[0..($SplitPath.Count -2)] -join '/'
    $OUPath = $SplitPath[-1]

    $OrgUnit = Get-GSOrganizationalUnit -SearchBase $Group.OrgUnitPath -SearchScope Base -ErrorAction SilentlyContinue
    if ($OrgUnit) {
        "Org Unit {0} exists at {1}" -f $OrgUnit.OrgUnitPath,$OrgUnit.ParentOrgUnitPath
    } else {
        "Org Unit {0} does not exist; attempting to create in {1}" -f $Group.OrgUnitPath,$ParentPath
        try {
            $GSOrgUnit = New-GSOrganizationalUnit -Name $OUPath.ToLower() -ParentOrgUnitPath $ParentPath -Description $Group.Description
            "Created {0} : {1}" -f $GSOrgUnit.OrgUnitPath,$GSOrgUnit.Description
        }
        catch {
            "Unable to create {0}" -f $Group.OrgUnitPath
        }
    }
}

Создание групп

Используя команду Get-GSGroup, мы проверяем, существует ли группа. Если группа еще не существует, используйте New-GSGroup, чтобы создать группу из электронной таблицы.

foreach ($Group in $GroupData) {
    $GSGroup = Get-GSGroup -Group $Group.Name -ErrorAction SilentlyContinue
    if ($GSGroup) {
        "Group {0} exists" -f $Group.Name
    } else {
        "Group {0} does not exist; attempting to create" -f $Group.Name
        try {
            $NewGSGroup = New-GSGroup -Name $Group.Name -Email $Group.Email -Description $Group.Description
            "Created {0} : {1}" -f $NewGSGroup.Name,$NewGSGroup.Description
        }
        catch {
            "Unable to create {0}" -f $Group.Name
        }
    }
}

Создать пользователей

Создание пользователей, перечисленных в электронной таблице.

  1. Сначала определите отдел на основе типа пользователя.
  2. Используя отдел, установите переменную для пути к единице организации.
  3. Создайте необходимую хеш-таблицу для CustomSchemas, чтобы добавить тип EmployeeType для пользователя.
  4. Генерация случайного безопасного пароля.
  5. Используя команду New-GSUser, создайте нового пользователя.
  6. Если пользователь успешно создан, используйте команду New-GSUserAlias для наилучшего создания псевдонима электронной почты на основе полного имени пользователя.
foreach ($User in $UserData) {
    $Domain = $User.Email.Split('@')[1]
    switch ($User.UserType) {
        'Faculty' { $Department = 'Academics'}
        'Staff'   { $Department = 'Business' }
    }

    # Set OU path
    $OrgUnitPath = $GroupData.Where({$_.Name -eq $Department}).OrgUnitPath

    # Set employee type custom schema
    $CustomSchemas = @{
        CustomUniversity = @{
            EmployeeType = $User.UserType
        }
    }

    # Set a random secure string
    $Password = ConvertTo-SecureString -String (Get-RandomPassword) -AsPlainText -Force

    $NewGSUserParams = @{
        PrimaryEmail = $User.Email
        FullName = $User.FullName
        GivenName = $User.GivenName
        FamilyName = $User.FamilyName
        OrgUnitPath = $OrgUnitPath
        CustomSchemas = $CustomSchemas
        Password = $Password
    }
    $NewUser = New-GSUser @NewGSUserParams -ErrorAction SilentlyContinue
    if ($NewUser) {
        'Created user {0} with primary email {1}' -f $User.FullName,$User.Email
    } else {
        'Failed to create user {0}' -f $User.Email
    }

    New-GSUserAlias -User $NewUser.PrimaryEmail -Alias ( $NewUser.Name.FullName.Replace(' ',''),$Domain -join '@') -ErrorAction SilentlyContinue | Out-Null
}

Функция Get-RandomPassword представляет собой макет. Вам нужно будет указать свой собственный метод паролей.

Вы можете опустить CustomSchemas из хеш-таблицы. В блоге показано, как вручную создавать новые атрибуты, если вам это интересно.

Назначение пользователей в группы

Далее мы используем Get-GSUserList, чтобы получить список всех пользователей в родительском подразделении, а затем добавляем пользователя в группу с помощью Add-GSGroupMember.

$UserToGroupList = Get-GSUserList -SearchBase '/test' -SearchScope Subtree
foreach ($User in $UserToGroupList) {
    switch -regex ($User.OrgUnitPath) {
        'academics' { $GroupName = 'Academics'}
        'business' { $GroupName = 'Business'}
    }
    try {
        Add-GSGroupMember -Identity $GroupName -Member $User.User -ErrorAction Stop | Out-Null
        'Added {0} to group {1}' -f $User.User,$GroupName
    }
    catch {
        'Failed to add {0} to group {1}' -f $User.User,$GroupName
    }
}

Примечание. Я вручную создал организационную единицу / test и заблокировал автоматическое присвоение лицензии, поскольку я использую свою личную учетную запись G Suite. Я не хочу никаких сюрпризов в конце месяца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...