Exporter des Scripts affectations-

Remarque :  Nous faisons de notre mieux pour vous fournir le contenu d’aide le plus récent aussi rapidement que possible dans votre langue. Cette page a été traduite automatiquement et peut donc contenir des erreurs grammaticales ou des imprécisions. Notre objectif est de faire en sorte que ce contenu vous soit utile. Pouvez-vous nous indiquer en bas de page si ces informations vous ont aidé ? Voici l’article en anglais à des fins de référence aisée.

Exportations - affectations de l’éducation

< #
   . Résumé
    Exporter les données de l’éducation affectations d’un utilisateur dans une série de classes spécifiées dans un fichier csv.
    . DESCRIPTION
    Le script lit les détails de la classe d’utilisateur à partir d’un fichier csv d’entrée. Obtenir les affectations et les envois de chaque affectation et génère la file(GetAssignmentsReport.csv) file(assignment.json) et un rapport d’affectation. extraire des envois terminée il met à jour la colonne GetSubmissionsProcessed True pour cette classe spécifique. Si le script échoue entre les deux nous pouvons réexécuter le script avec le même fichier d’entrée, car le fichier est mise à jour pour la dernière suppression de la présentation.
   . Exemple
    .\Export-EduAssignments.ps1 - userClassDetailsFile < chemin d’accès complet du fichier csv d’utilisateur classe détails >
   . Paramètre userClassDetailsFile
   Il s’agit de la file(userClassDetails.csv) csv qui contient les résultats de script Get-UserClasses.ps1. Ce fichier dispose d’informations sur les classes utilisateur et que les envois de suppression et get sont traités. Cette valeur doit être le chemin d’accès complet de la file(drive:\GDPR\userClassDetails.csv)
   . Notes
   Nous devons disposer les Microsoft.IdentityModel.Clients.ActiveDirectory.dll et Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll sont requis
#>
paramètre (
    [parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Si (-pas ($_ | Test-Path)) {
            lever « l’userClassDetailsFile n’existe pas ».
        }
        Si (-pas ($_ | Test-Path - PathType feuille)) {
            lever « l’argument userClassDetailsFile doit être un fichier. Chemins d’accès de dossier ne sont pas autorisées. »
        }
        Si ($_ - notmatch « (\.csv) ») {
            lever « l’userClassDetailsFile doit être un fichier séparé, généré à l’aide de Get-UserClasses.ps1 »
        }
        retour $true
    })]
    [chaîne] $userClassDetailsFile
)

N° charger terme ADAL
Ajouter un Type-chemin d’accès «.\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll »
$educationEndpoint = « https://graph.microsoft.com/beta/education/ »
$script : userClassDetails = @()
$script : getAssignmentsReport = @()
$script : maxRetryAttempt = 3
$script : authHeaders = $null
$script : authenticationResult = $null
$graphEndpoint = « https://graph.microsoft.com »
$authString = « https://login.windows.net/common »

#Get l’authheaders
fonction Get-AuthHeaders
{
    Paramètre (
        [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 » - ArgumentList $authString
    Si ($useRefreshToken - eq $false)
    {
        $script : authenticationResult = $authContext.AcquireToken ($graphEndpoint, $clientID, $redirectURI, $promptBehavior)
    }
    Dois-je
    {
        $script : authenticationResult = $authContext.AcquireTokenByRefreshToken (script:authenticationResult.RefreshToken$, $clientId)
    }
    $authHeader = $script:authenticationResult.AccessTokenType + "" + $script:authenticationResult.AccessToken
    $headers = @{« Autorisation » = $authHeader ; « Type de contenu » = « Application/json »}
    retourner $headers
}

Logique #Retry et journalisation des erreurs de script
fonction appeler RequestWithRetry
{
    paramètre (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className,
        [Parameter(Mandatory=$true)] $OperationName
    )

pour ($i = 1 ; $i-le $script : maxRetryAttempt ; $i ++)
    {
        Essayez
        {
            $APIResult = appeler WebRequest-méthode Get - Uri $url-en-têtes $script : authHeaders
            $resultCount = 0
            Si ($OperationName - eq « GetAssignments »)
            {
                $valueStartIndex = ($APIResult.content.indexof('"value":') + 8)
                $valueEndIndex = $APIResult.content.Length
                $valueString = $APIResult.content.substring ($valueStartIndex, $valueEndIndex $valueStartIndex -1)
                $resultCount = (($valuestring | sélectionnez chaîne « ID de « classe » : « - AllMatches). Matches.Count)
            }
            Dois-je
            {
                $submissionsJson = $APIResult.content | ConvertFrom Json
                $resultCount = $submissionsJson.value.count
            }

$script : getAssignmentsReport += [PSCustomObject] @{
                RequestUrl = $url
                Méthode = « Get »
                ResponseCode = $APIResult.StatusCode
                NomClasse = $className
                ID de classe = $classId
                ID de demande = $APIResult.Headers [« demande-id »]
                StatusDescription = $APIResult.StatusDescription
                NumberOfAttempts = $i
                NomOpération = $OperationName
                ResultCount = $resultCount
            }
            retourner $APIResult
        }
        intercepter
        {
            if($_. Exception.Response - garanties $null)
            {
                $responseCode = $_. Exception.Response.StatusCode.Value__
                $requestId = $_. Exception.Response.Headers [« demande-id »]
            }

            $script : getAssignmentsReport += [PSCustomObject] @{
                RequestUrl = $url
                Méthode = « Get »
                ResponseCode = $responseCode
                NomClasse = $className
                ID de classe = $classId
                ID de demande = $requestId
                StatusDescription = $_. Exception.Message
                NumberOfAttempts = $i
                NomOpération = $OperationName
                ResultCount = $resultCount
            }            

Si ($i - eq $script : maxRetryAttempt)
            {
                lever $_
            }

Si ($responseCode - eq 401)
            {
                $script : authHeaders = Get-AuthHeaders - useRefreshToken $true
            }
        }
    }
}

affectations #get
fonction Get-affectations
{
    paramètre (
        [Parameter(Mandatory=$true)] $classDetails
    )
    Essayez
    {
        $classId = $classDetails.ClassId
        $userId = $classDetails.UserId
        $role = $classDetails.Role
        $className = $classId
        Si ($classDetails.ClassName - garanties $null- et $classDetail.ClassName.Length - garanties 0)
        {
            $className = $classDetails.ClassName
        }
        $getAssignmentsUri = (« {0} / classes('{1}')/assignments?TargetUserId = {2} & UserClassRole = {3} » -f $educationEndpoint, $classId, $userId, $role)
        $assignments = $null
        $assignments = appeler RequestWithRetry-url $getAssignmentsUri - identificateur de classe $classId - NomClasse $className - OperationName « GetAssignments »
        $outputstring = » «
        Si ($assignments - garanties $null)
        {
            $valueStartIndex = ($assignments.content.indexof('"value":') + 8)
            $valueEndIndex = $assignments.content.Length
            $valueString = $assignments.content.substring ($valueStartIndex, $valueEndIndex $valueStartIndex -1)

            $valueString = $valueString.TrimEnd("]")
            $valueString = $valueString.TrimStart("[")
            $indexValues = (($valuestring | sélectionnez chaîne « ID de « classe » : « - AllMatches). Matches.Index)
            Écriture-hôte « Récupérées $($indexValues.count) affectations de classe $className »
            $assignmentsStrings = @()
            pour ($i = 0 ; $i - lt $indexValues.count ; $i ++)
            {
                Si ($i - garanties $indexValues.count -1)
                {
                    $assignmentsStrings += $valueString.substring (($indexValues [$i] -1), ($indexValues [$i + 1] - $indexValues [$i] -1))
                }
                Dois-je
                {
                    $assignmentsStrings += $valueString.substring(($indexValues[$i]-1), ($valueString.Length - $indexValues [$i] + 1))
                }

                Si ($role - eq « Étudiant »)
                {
                    $submissionsIndex = $assignmentsStrings[$i].indexof('"submissions":[')
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings .substring (0, $submissionsIndex + 15)
                    $assignmentsStrings [$i] = $assignmentsStrings [$i] + «]} »
                }
            }
            pour ($i = 0 ; $i - lt $assignmentsStrings.Length ; $i ++)
            {
                $assignmentString = $assignmentsStrings [$i]
                $assignmentJson = $assignmentString | ConvertFrom Json
                $assignmentId = $assignmentJson.id
                Écriture-hôte « Envois mise en route pour affectation $($assignmentJson.displayName) »
                $sumbmissionsEndpoint = (« {0} / classes('{1}')/assignments('{2}')/submissions?TargetUserId = {3} & UserClassRole = {4} » -f $educationEndpoint, $classId, $assignmentId, $userId, $role)
                $submissions = appeler RequestWithRetry - identificateur de classe $classId-url $sumbmissionsEndpoint - NomClasse $className - OperationName « GetSubmissions »
                Si ($submissions - garanties $null- et $submissions. Content.Length - garanties 0)
                {
                    $submissionsJson = $submissions.content | ConvertFrom Json
                    Écriture-hôte « Envois récupérées $($submissionsJson.value.count) pour affectation $($assignmentJson.displayName) »
                    $valueStartIndex = ($submissions.content.indexof('"value":') + 9)
                    $valueEndIndex = $submissions.content.lastindexof("}")
                    $submissionsString = $submissions.content.substring ($valueStartIndex, $valueEndIndex $valueStartIndex -1)
                    $assignmentsStrings [$i] = $assignmentsStrings [$i]. TrimEnd("]}")
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings + $submissionsString + «]} »
                }
            }

            $completeAssigmentsString = « [«
            Si ($assignmentsStrings.Length - eq 0)
            {
                $completeAssigmentsString = $completeAssigmentsString + «] »
            }
            Dois-je
            {
                pour ($i = 0 ; $i - lt $assignmentsStrings.Length ; $i ++)
                {
                    Si ($i - eq $assignmentsStrings.Length -1)
                    {
                        $completeAssigmentsString = $completeAssigmentsString + $assignmentsStrings [$i] + «] »
                    }
                    Dois-je
                    {
                        $completeAssigmentsString = $completeAssigmentsString + $assignmentsStrings [$i] + «, »
                    }
                }
            }
            $outputstring = ' {« ID de classe » : » ' + $classId + ' NomClasse » », » : » ' + $className +' affectations «, » » :' + $completeAssigmentsString + '}'
            $dateTimeStamp = $(get-date - f AAAA-MM-JJ)
            $fileName = $directoryPath + « \ » + $className + « _ » + $userId + « _ » + $dateTimeStamp + « .json »
            $outputstring | Sortie de fichiers $fileName
            Écriture Host("Assignments file for $className is generated at $fileName")
            $classDetails.GetSubmissionsProcessed = « True »
            $script : userClassDetails | Exporter Csv-chemin d’accès $($directoryPathOfFile) - NoTypeInformation-Force
        }
    }
    intercepter
    {
        Erreur d’écriture $_. Exception.Message
    }

}                                           

$directoryPathOfFile = (élément de get-$($userClassDetailsFile) chemin d’accès). Nom complet
$directoryPath = (élément de get-chemin d’accès «. \ »-détaillée). Nom complet
$script : authHeaders = Get-AuthHeaders
$script : userClassDetails = importation-csv $userClassDetailsFile

$progressTracker = 1 ;
#loop par chaque ligne et obtenir des envois si la colonne getsubmissionsprocessed est fausse
foreach ($classDetail dans $script : userClassDetails)
{
    L’avancement de l’écriture-activité « Affectation mise en route pour l’utilisateur »-état « traitement de classe : $($classDetail.classId) » - PercentComplete ($progressTracker / $(script$ : userClassDetails | Measure-Object) .count * 100)
    Si ($classDetail.GetSubmissionsProcessed - eq « False »)
    {
        Écriture-hôte « Affectations prise pour $($classDetail.ClassName) »
        Get-affectations - classDetails $classDetail
    }
    $progressTracker ++
}

$script : getAssignmentsReport | Exporter Csv-chemin d’accès.\GetAssignmentsReport.csv - NoTypeInformation
Écriture-Host « Rapport file(GetAssignmentsReport.csv) est généré au $directoryPath\GetAssignmentsReport.csv »
Écriture hôte « file($($directoryPathOfFile)) de détails de classe mis à jour et est généré fichier mis à jour en $($directoryPathOfFile) »

Développez vos compétences dans Office
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoignez le programme Office Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×