Abrufen von Zuordnungen Skripts-

Hinweis:  Wir möchten Ihnen die aktuellsten Hilfeinhalte so schnell wie möglich in Ihrer eigenen Sprache bereitstellen. Diese Seite wurde automatisiert übersetzt und kann Grammatikfehler oder Ungenauigkeiten enthalten. Unser Ziel ist es, Ihnen hilfreiche Inhalte bereitzustellen. Teilen Sie uns bitte über den Link am unteren Rand dieser Seite mit, ob die Informationen für Sie hilfreich sind. Hier finden Sie den englischen Artikel als Referenz.

Befinden sich die Power Shell-Skripts als für Get - Benutzerklassen

< #
   . Zusammenfassung
    Erhalten Sie Benutzer Klassen Informationen, wie in welchen Klassen der Benutzer ist Mitglied und was die Benutzerrolle des Benutzers in diesen Klassen ist.
    . Beschreibung
    Skripts liest die Datei und alle die Classids abrufen und Updates, die Rolle mit der Userrole angegeben ist, ist dies nicht erwähnt, Student Standardeinstellung zuweisen. Dann wird die in der der Benutzer Besitzer ist und Klassen Stelle, an der der Benutzer Mitglied ist. Skript optimiert wurde und das Ergebnis mit dem Class Details und die Rolle des Benutzers in bestimmten Klasse generiert.
   . Beispiel
    .\Get-userClasses.ps1 - Benutzer-ID < bestimmte Benutzer-Id >
        Dadurch die Benutzerdetails entsprechend der Benutzer die Mitgliedschaft kommen
    .\Get-userClasses.ps1 - Benutzer-ID < bestimmte Benutzer-Id > - ClassIdsFile < abgeschlossen CSV-Dateipfad >
        Diese erhalten die Benutzerdetails in der CSV-Datei und Benutzer Mitgliedschaft angegebenen Klassen Wenn wir den UserRole Parameter übergeben, wird es auf Student Standardeinstellung für die CSV-Datei angegebenen ClassIds zugewiesen werden
    .\Get-userClasses.ps1 - Benutzer-ID < bestimmte Benutzer-Id > - ClassIdsFile < abgeschlossen CSV-Dateipfad > - Userrole < Student oder Lehrer >
        Dadurch kommen die Benutzerdetails in der CSV-Datei und Benutzer Mitgliedschaft angegebenen Klassen. Für die angegebene Datei Classids Benutzerdaten generiert werden, entsprechend der angegebenen Userrole (Lehrer oder Student)
   . Parameter-Benutzer-ID
   Benutzer-ID des Benutzers, exportieren und Löschen von Übermittlungen
   . Parameter ClassIdsFile
   Vollständigen Pfad zu einer nur-Text-Datei, die eine einzelne ClassId in jeder Zeile enthält.
   Beispiel für Liste ClassIds. Jede Zeile sollte die einzelnen ClassId werden
   e81c2cd2-e3ff-4c0a-8ed0-63df43ff884c
   044b4c35-5fab-454a-9705-bc750108c059
   e81c2cd2-4c0a-e3ff-9705-bc750108c059
   . Parameter Userrole
   Diese-Parameters wird verwendet, um anzugeben, dass die Rolle des Benutzers für die Klassen-Ids in ClassIdsFile präsentieren verwendet werden soll, und der Benutzer von Klasse entfernt wird.
   .Paramter OutputFileName
   Für diesen Parameter wird verwendet, um die Ausgabe Dateiname des Skripts, ohne Erweiterung. Dies ist keine Mandatorty standardmäßig ist die Dateinamen für die UserClassDetails
   . Notizen
   Wir muss die Microsoft.IdentityModel.Clients.ActiveDirectory.dll und Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll sind erforderlich
#>
Parameter (
    [Parameter (obligatorisch = $true, Position = 1)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Versuchen Sie es {
            [System.Guid]::Parse($_) | Out-Null
            $true
        } hinausgelangen {
            Auslösen von $_
        }
    })]
    [Zeichenfolge] $userId,

[Parameter (obligatorisch = $false, Position = 2)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Wenn (-nicht ($_ | Test-Path)) {
            Auslösen "Datei oder eines Ordners ist nicht vorhanden"
        }
        Wenn (-nicht ($_ | Test-Path - PathType Blatt)) {
            Lösen Sie aus "das Argument ClassIdsFile muss eine Datei sein. Ordnerpfade sind nicht zulässig."
        }
        Wenn ($_ - Notmatch "(\.txt)") {
            Auslösen "im Pfadargument angegebene Datei muss vom Typ Txt sein"
        }
        Zurückgeben von $true
    })]
    [Zeichenfolge] $classIdsFile,

[Parameter (obligatorisch = $false, Position = 3)]
    [ValidateNotNullOrEmpty()]
    [ValidateSet ('Student', 'Lehrer' Ignorecase = $false)]
    [Zeichenfolge] $userrole = "Student"

[Parameter (obligatorisch = $false, Position = 4)]
    [ValidateNotNullOrEmpty()]
    [Zeichenfolge] $outputFileName = "UserClassDetails"
)
Nr., laden Sie ADAL
Hinzufügen von Typ-Pfad ".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

$script: MaxRetryAttempt = 3
$script: AuthenticationResult = $null
$graphEndpoint = "https://graph.microsoft.com"
$authString = "https://login.windows.net/common"

Nr., Ausgabe Erfolg/Fehlschlagen des API-Aufrufe zusammenfassen.
$script: GetClassDetailsReport = @)

#Makes Web-Anforderung und den Antwortstatus protokolliert
Funktion aufrufen-RequestWithRetry
{
    Parameter (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className
    )

für ($i = 1; $i-le $script: MaxRetryAttempt; $i ++)
    {
        Versuchen Sie es
        {
            $tempResult = aufrufen-WebRequest-$url abrufen Methode - Uri-Kopfzeilen $script: AuthHeaders
            $script: GetClassDetailsReport += [PSCustomObject] @{
                RequestUrl = $url
                Methode "Abrufen" =
                ResponseCode = $tempResult.StatusCode
                Objektname $className =
                ClassId = $classId
                RequestId $tempResult.Headers ["Anforderung-Id"] =
                StatusDescription = $tempResult.StatusDescription
                NumberOfAttempts = $i
            }
            Zurückgeben von $tempResult
        }
        hinausgelangen
        {
            If($_. Exception.Response - Ne $null)
            {
                $responseCode = $_. Exception.Response.StatusCode.Value__
                $requestId = $_. Exception.Response.Headers ["Anforderung-Id"]
            }

            $script: GetClassDetailsReport += [PSCustomObject] @{
                RequestUrl = $url
                Methode "Abrufen" =
                ResponseCode = $responseCode
                Objektname $className =
                ClassId = $classId
                RequestId = $requestId
                StatusDescription = $_. Exception.Message
                NumberOfAttempts = $i
            }            

Wenn ($i - Eq $script: MaxRetryAttempt)
            {
                Lösen $_ aus. Exception.Message
            }

Wenn ($responseCode - Eq 401)
            {
                $script: AuthHeaders = Get-AuthHeaders - UseRefreshToken $true
            }
        }
    }
}

#Get der Authheaders
Funktion Get-AuthHeaders
{
    Parameter (
        [Parameter(Mandatory=$false)]
        [Bool] $useRefreshToken $false =
    )
    $clientId = "eb2298a1-a6bb-4f16-a27a-b582815db47b"
    $redirectURI = New-Object System.Uri("urn:ietf:wg:oauth:2.0:oob")
    $promptBehavior = [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always
    $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" - Argumentliste $authString
    Wenn ($useRefreshToken - Eq $false)
    {
        $script: AuthenticationResult $authContext.AcquireToken ($graphEndpoint, $clientID, $redirectURI, $promptBehavior) =
    }
    sonst
    {
        $script: AuthenticationResult = $authContext.AcquireTokenByRefreshToken ($script:authenticationResult.RefreshToken, $clientId)
    }
    $authHeader = $script:authenticationResult.AccessTokenType + "" + $script:authenticationResult.AccessToken
    $headers = @{"Autorisierung" = $authHeader; "Inhaltstyp" = "Application/Json"}
    Zurückgeben von $headers
}

#Get der Gruppe Namen
Get-Objektname Funktion
{
    Parameter (
        [Parameter(Mandatory=$true)] $classId
    )

$getClassDetailsUrl = "{0}/v1.0/groups/{1}" -f $graphEndpoint, $classId
    $getClassDetailsResult = (aufrufen-RequestWithRetry-Url $getClassDetailsUrl) | ConvertFrom Json
    $className = $getclassDetailsResult.displayName
    Zurückgeben von $className
}

Benutzer-Id mit Edu #Get Besitz Details Endpoit und verfeinern mit der Erstellung geben Zuordnungen
Funktion Get-OwnershipDetails
{
    Parameter (
        [Parameter(Mandatory=$true)] $userId
    )
    $ownershipUrl = ("{0} / Edu/Benutzer / {1} / Ownedobjects?'$top = 999" -f $graphEndpoint, $userId)
    $ownershipQuery = (aufrufen-RequestWithRetry-Url $ownershipUrl) | ConvertFrom Json
    $classes = $ownershipQuery.value | Where-Object {$_.creationOptions-enthält "ClassAssignments"} | Select-Object ObjectId, DisplayName
    Zurückgeben von $classes
}

#Get die Mitgliedschaftsdetails der Benutzer-Id mit Edu Endpunkt und verfeinern mit der Erstellung geben Zuordnungen
Funktion Get-MembershipDetails
{
    Parameter (
        [Parameter(Mandatory=$true)] $userId
    )
    $membershipUrl = ("{0} / Edu/Benutzer / {1} / Memberof?'$top = 999" -f $graphEndpoint, $userId)
    $membershipQuery = (aufrufen-RequestWithRetry-Url $membershipUrl) | ConvertFrom Json
    $classes = $membershipQuery.value | Where-Object {$_.creationOptions-enthält "ClassAssignments"} | Select-Object ObjectId, DisplayName
    Zurückgeben von $classes
}

#Return benutzerdefinierte Pscutom-Objekt das Eigenschaften Classid, Benutzer-ID, Objektname, Rolle, Getsubmissionprocessed und Deletesubmissionprocessed
Funktion generieren-ClassRecord
{
    Parameter (
        [Parameter(Mandatory=$true)] $userId,
        [Parameter(Mandatory=$true)] $classId,
        [Parameter(Mandatory=$true)] $role,
        [Parameter(Mandatory=$false)] $displayName
    )

$classRecord = [PSCustomObject] @{
        ClassId = $classId
        Benutzer-ID = $userId
        Objektname = $displayName
        Rolle = $role
        GetSubmissionsProcessed = $false
        DeleteSubmissionsProcessed = $false
    }

Zurückgeben von $classRecord
}

$script: AuthHeaders = Get-AuthHeaders

# Dies sind die Details für alle "interessante" Klassen enthalten
$script: ClassDetails = @ {}

Nr. Suchen im Besitz Klassen (wobei Benutzer haben derzeit Lehrer)
Versuchen Sie es
{
    $ownedClasses = Get-OwnershipDetails - Benutzer-ID $userId
    Foreach ($class in $ownedClasses)
    {
        Wenn (-nicht $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = generieren-ClassRecord - Benutzer-ID $userId ClassId - $class.objectId-Rolle "Lehrer" DisplayName - $class.displayName
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
hinausgelangen
{
    Schreibfehler $_. Exception.Message
}

Nr. Suchen beigetreten Gruppen (wobei Benutzer aktuell Student ist)
Versuchen Sie es
{
    $joinedClasses = Get-MembershipDetails - Benutzer-ID $userId
    Foreach ($class in $joinedClasses)
    {
        Wenn (-nicht $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = generieren-ClassRecord - Benutzer-ID $userId ClassId - $class.objectId-Rolle "Student" DisplayName - $class.displayName
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
hinausgelangen
{
    Schreibfehler $_. Exception.Message
}

Nr., finden Sie Details für die zusätzlichen Gruppen aus der Datei ein.
If(![ Zeichenfolge]:: IsNullOrEmpty($classIdsFile))
{
    $classIdsFromFile = Select-String-Muster "\w"-Pfad $($classIdsFile) | ForEach-Object {
        $_. Zeile
    }

Foreach ($classId in $classIdsFromFile)
    {
        Nr., Liste der aktuellen Klassen des Benutzers hat der zusätzliche Satz von Klassen Precendence
        #, d. h., wenn wir die Rolle bereits festgestellt haben, nicht wir erneut erledigen müssen.
        Wenn (-nicht $script: classDetails.ContainsKey($classId.Trim("")))
        {
            Versuchen Sie es
            {
                $displayName = Get-Objektname - ClassId $classId
                $classRecord = generieren-ClassRecord - Benutzer-ID $userId - ClassId $classId-Rolle $userrole - DisplayName $displayName
                $script:classDetails.Add ($classId, $classRecord)
            }
            hinausgelangen
            {
                Schreiben-Host $_. Exception.Message
            }

        }
    }
}            

$script:classDetails.Values | Export-Csv-Pfad.\$($outputFileName).csv - NoTypeInformation
$script: GetClassDetailsReport | Export-Csv-Pfad.\UserClassDetailsReport.csv - NoTypeInformation
$directoryPath = (Get-Element-Pfad ". \"-Ausführliche). FullName
Schreiben-Host "Class Details auf $directoryPath\($($outputFileName).csv) file($($outputFileName).csv) generiert"
Schreiben-Host "Class Details, die report(UserClassDetailsReport.csv) zur $directoryPath\UserClassDetailsReport.csv generiert wird"

Ihre Office-Fähigkeiten erweitern
Schulung erkunden
Neue Funktionen als Erster erhalten
An Office Insider teilnehmen

War diese Information hilfreich?

Vielen Dank für Ihr Feedback!

Vielen Dank für Ihr Feedback. Es klingt, als ob es hilfreich sein könnte, Sie mit einem unserer Office-Supportmitarbeiter zu verbinden.

×