Authentifizierungsrichtlinie für Benutzer außerhalb des Geltungsbereichs
Wenn eine Authentifizierungsrichtlinie für die Administratoren- und/oder Helpdesk-Gruppe erstellt wird, diese sich jedoch außerhalb der Gruppe des uReset 8 Gatekeepers befinden, muss ihnen die Berechtigung erteilt werden, relevante Informationen zu den Benutzerobjekten zu lesen/schreiben.
Führen Sie die folgenden Schritte aus, um Administratoren/Helpdesk-Benutzern außerhalb des uReset 8 zu erlauben.
Voraussetzungen: Das Active Directory PowerShell Snapin
- Speichern Sie das untenstehende Skript in einer Datei (z.B.
C:\Scripts\uResetUserPermissions.ps1
) - Dot-Source das Skript in eine PowerShell-Sitzung.
- Führen Sie das Grant-uResetPermissionForUserOutsideScope Cmdlet für jeden Benutzer außerhalb des Geltungsbereichs aus, der sich bei uReset 8 registrieren muss.
Befehl:
# "Dot-Source das Skript, um das
# 'Grant-uResetPermissionForUserOutsideScope' Cmdlet zu laden.
. C:\Scripts\uResetUserPermissions.ps1
# Führen Sie dieses Skript für jeden Benutzer außerhalb des Geltungsbereichs aus, der sich bei uReset registrieren muss
# GatekeepersGroup: sAMAccountName oder DN der Gatekeepers-Gruppe (Standard ist 'Specops Authentication Gatekeepers')
# TargetUser: sAMAccountName oder DN des Zielbenutzers
Grant-uResetPermissionForUserOutsideScope
-GatekeepersGroup 'Specops Authentication Gatekeepers'
-TargetUser JohnDoe
Skript:
function Grant-SpecopsPermissionForUserOutsideScope {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$GatekeepersGroup,
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$TargetUser,
[Parameter(Mandatory = $false)]
[ValidateNotNullOrEmpty()]
[string]$MobileNumberAttribute = 'mobile'
)
$VerbosePreference = 'Continue'
$ErrorActionPreference = 'Stop'
Write-Verbose "Gatekeeper's group: $GatekeepersGroup"
Write-Verbose "Target user: $TargetUser"
$domain = Get-ADDomain
try {
$gkGroup = Get-ADGroup $GatekeepersGroup
$gatekeepersGroup = $domain.NetBIOSName + '\' + $gkGroup.sAMAccountName
} catch {
throw ("Could not find Gatekeepers group ('{0}') failed." -f $GatekeepersGroup)
}
try {
$user = Get-ADUser $TargetUser
$targetUserDn = $user.DistinguishedName
} catch {
throw ("Could not find target user ('{0}') failed." -f $TargetUser)
}
[array]$permissionsArray = @(
'CCDC;classStore;', # CreateChild für classStore
'SD;;' # DeleteChild Berechtigung
'LC;;', # List children Berechtigung
'RP;userAccountControl;', # Leseeigenschaft userAccountControl
'RP;msDS-User-Account-Control-Computed;', # Leseeigenschaft msDS-User-Account-Control-Computed
'RP;pwdLastSet;', # Leseeigenschaft pwdLastSet
'RP;lockoutTime;', # Leseeigenschaft lockoutTime
'RP;tokenGroups;', # Leseeigenschaft tokenGroups
"RPWP;$MobileNumberAttribute;" # Lese-/Schreibeigenschaft für Mobilnummer (oder benutzerdefiniertes Attribut)
)
$sb = New-Object System.Text.StringBuilder
[void]$sb.Append('"')
[void]$sb.Append($targetUserDn)
[void]$sb.Append('" /G')
$permissionsArray | ForEach-Object {
[void]$sb.Append(' "')
[void]$sb.Append($gatekeepersGroup + ':' + $_)
[void]$sb.Append('"')
}
$commandLine = $sb.ToString()
function RunDsAcls($commandLine) {
$startInfo = New-Object System.Diagnostics.ProcessStartInfo
$startInfo.FileName = 'dsacls.exe'
$startInfo.Arguments = $commandLine
$startInfo.UseShellExecute = $false
$startInfo.CreateNoWindow = $true
$startInfo.RedirectStandardOutput = $true
$startInfo.RedirectStandardError = $true
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $startInfo
Write-Verbose ''
Write-Verbose "dsacls $commandLine"
Write-Verbose ''
$process.Start() | Out-Null
$stdout = $process.StandardOutput.ReadToEnd()
$stderr = $process.StandardError.ReadToEnd()
$process.WaitForExit()
if ($process.ExitCode -ne 0) {
$msg = ("dsacls failed with exit code {0}." -f $process.ExitCode)
Write-Verbose $stdout
Write-Verbose $stderr
Write-Verbose $msg
throw $msg
}
Write-Verbose $stdout
Write-Verbose "dsacls completed successfully."
}
Write-Verbose ''
Write-Verbose "Wird Berechtigung für `"$gatekeepersGroup`" erteilen, um auf `"$targetUserDn`" zu operieren."
Write-Verbose ''
RunDsAcls $commandLine
}