Сценарии предназначены для создания и удаления учетных записей, корневых папок для перенаправленных папок пользователей и соответствующих ссылок DFS
function New-Employee
{
<#
.SYNOPSIS
Командлет предназначен для создания нового пользователя
.DESCRIPTION
Командлет на основании эталонной учетной записи создает новую
учетную запись, корневую папку для перенаправленных папок
пользователя и соответствующую ссылку в DFS
.INPUTS
-
.OUTPUTS
-
.NOTES
Версия 1.0
(c) 2019 Александр Галков, [email protected]
.EXAMPLE
New-Employee
.LINK
www.galkov.pro/powershell_script_for_creating_and_removing_users
#>
[CmdletBinding()]
Param ()
$logicalRoot = "\\domain.local\dfs\redirected\"
$physicalRoot = "\\fs.domain.local\redirected\"
#####
Write-Host "Создаем учетную запись..."
#####
$refAccountName = Read-Host "`tИмя эталонной учетной записи"
$refAccount = Get-ADUser -Identity $refAccountName -Properties *
$newAccountName = Read-Host "`tИмя новой учетной записи"
$plainTextPassword = Get-Random -Minimum 1000 -Maximum 10000
if ($ent_val = Read-Host ("`tПароль [{0}]" -f $plainTextPassword))
{
$plainTextPassword = $ent_val
}
$securePasword = ConvertTo-SecureString -AsPlainText $plainTextPassword -Force
$userPrincipalName = $newAccountName + $refAccount.UserPrincipalName.Substring($refAccount.UserPrincipalName.IndexOf('@'),
$refAccount.UserPrincipalName.Length - $refAccount.UserPrincipalName.IndexOf('@'))
if ($ent_val = Read-Host ("`tUPN [{0}]" -f $userPrincipalName))
{
$userPrincipalName = $ent_val
}
$OU = $refAccount.DistinguishedName -replace ".*?[^\\],(.*)",'$1'
if ($ent_val = Read-Host ("`tOU [{0}]" -f $OU))
{
$OU = $ent_val
}
$lastName = Read-Host "`tФамилия"
$firstName = Read-Host "`tИмя и отчество"
$fullName = $lastName + " " + $firstName
$phone = Read-Host "`tНомер телефона"
$office = Read-Host "`tНомер кабинета"
$email = $newAccountName + $refAccount.Mail.Substring($refAccount.Mail.IndexOf('@'),
$refAccount.Mail.Length - $refAccount.Mail.IndexOf('@'))
if ($ent_val = Read-Host ("`tЭлектронная почта [{0}]" -f $email))
{
$email = $ent_val
}
New-ADUser -Path $OU -UserPrincipalName $userPrincipalName -SamAccountName $newAccountName `
-AccountPassword $securePasword -DisplayName $lastName -Surname $lastName -GivenName $firstName `
-Name $fullName -OfficePhone $phone -Office $office -EmailAddress $email -CannotChangePassword $true `
-PasswordNeverExpires $true -Enabled $true
Write-Host "`tПользователь создан"
#####
Write-Host "Изменяем членство в группах..."
#####
$groups = Get-ADPrincipalGroupMembership -Identity $refAccountName
foreach ($group in $groups)
{
do
{
$flag = Read-Host -Prompt ("`tДобавить пользователя в группу `"{0}`" (y/n)?" -f $group.Name)
if ($flag -eq "y")
{
Add-ADPrincipalGroupMembership -Identity $newAccountName -MemberOf $group
Write-Host ("`tПользователь добавлен в группу `"{0}`" " -f $group.Name)
}
} while (($flag -ne "y") -and ($flag -ne "n"))
}
#####
Write-Host "Создаем корневую папку для перенаправленных папок пользователя..."
#####
$logicalPath = $logicalRoot + $newAccountName
if ($ent_val = Read-Host ("`t`"Логический`" путь к перенаправленным папкам [{0}]" -f $logicalPath))
{
$logicalPath = $ent_val
}
$physicalPath = $physicalRoot + $newAccountName
if ($ent_val = Read-Host ("`t`"Физический`" путь к перенаправленным папкам [{0}]" -f $physicalPath))
{
$physicalPath = $ent_val
}
New-Item -ItemType Directory -Path $physicalPath | Out-Null
$account = New-Object System.Security.Principal.NTAccount($userPrincipalName)
$rights = [System.Security.AccessControl.FileSystemRights]"FullControl"
$inFlags = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit,ObjectInherit"
$prFlags = [System.Security.AccessControl.PropagationFlags]"None"
$access =[System.Security.AccessControl.AccessControlType]::Allow
$ace = New-Object System.Security.AccessControl.FileSystemAccessRule($account, $rights, $inFlags, $prFlags, $access)
$acl = Get-ACL $physicalPath
$acl.AddAccessRule($ace)
Set-ACL $physicalPath $acl
Write-Host "`tКорневая папка создана"
New-DfsnFolderTarget -Path $logicalPath -TargetPath $physicalPath | Out-Null
Write-Host "`tСсылка в DFS на корневую папку создана"
#####
Write-Host "Завершаем выполнение сценария..."
#####
}
замечание: регулярное выражение, используемое для получения FQDN родительского объекта, извлекает из FQDN эталонной учетной записи все символы, следующие за первой запятой, перед которой нет символа "\". Такое условие позволяет использовать в CN запятые, представляемые сочетанием символов "\,"
function Remove-Employee
{
<#
.SYNOPSIS
Командлет предназначен для удаления пользователя
.DESCRIPTION
Командлет удаляет учетную запись, перенаправленные папки
пользователя и соответствующую ссылку в DFS
.INPUTS
-
.OUTPUTS
-
.NOTES
Версия 1.0
(c) 2019 Александр Галков, [email protected]
.EXAMPLE
Remove-Employee
.LINK
www.galkov.pro/powershell_script_for_creating_and_removing_users
#>
[CmdletBinding()]
Param ()
$logicalRoot = "\\domain.local\dfs\redirected\"
$accountName = Read-Host "Имя учетной записи"
$account = Get-ADUser -Identity $accountName
$logicalPath = $logicalRoot + $accountName
if ($ent_val = Read-Host ("`"Логический`" путь к перенаправленным папкам [{0}]" -f $logicalPath))
{
$logicalPath = $ent_val
}
$physicalPath = (Get-DfsnFolderTarget -Path $logicalPath).TargetPath
if ($ent_val = Read-Host ("`"физический`" путь к перенаправленным папкам [{0}]" -f $physicalPath))
{
$physicalPath = $ent_val
}
Write-Host "Удаляем ссылку в DFS..."
Remove-DfsnFolder -Path $logicalPath -Confirm
Write-Host "Удаляем перенаправленные папки..."
Remove-Item -LiteralPath $physicalPath -Recurse -Force -Confirm
Write-Host "Удаляем учетную запись..."
Remove-ADUser -Identity $accountName -Confirm
Write-Host "Завершаем выполнение сценария..."
}