Выдержки из моего сообщения в блоге о том, как использовать модуль 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
}
}
}
Создать пользователей
Создание пользователей, перечисленных в электронной таблице.
- Сначала определите отдел на основе типа пользователя.
- Используя отдел, установите переменную для пути к единице организации.
- Создайте необходимую хеш-таблицу для CustomSchemas, чтобы добавить тип EmployeeType для пользователя.
- Генерация случайного безопасного пароля.
- Используя команду
New-GSUser
, создайте нового пользователя.
- Если пользователь успешно создан, используйте команду
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. Я не хочу никаких сюрпризов в конце месяца.