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
}