Office
Se connecter

Supprimer 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.

Joint sont les scripts shell power pour supprimer - affectations de l’éducation, classes d’utilisateurs exportations - affectations de l’éducation et Get.

Supprimer - affectations de l’éducation

< #
   . Résumé
    Supprimer 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 puis supprimez les envois, elle génère également une file(DeleteAssignmentsReport.csv) rapport pour les informations supplémentaires d’informations d’appels. Lorsque la suppression de la présentation est terminée il met à jour la colonne DeleteSubmissionsProcessed sur 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
    .\Delete-EduAssignments.ps1 - userClassDetailsFile < chemin d’accès complet du fichier csv d’utilisateur classe détails >
    Cela supprime toutes les soumissions mais ne supprime pas les informations utilisateur de classe
    .\Delete-EduAssignments.ps1 - userClassDetailsFile < chemin d’accès complet du fichier csv d’utilisateur classe détails > - removeMemberFromClass
    Cette opération supprime toutes les soumissions et supprimez les informations utilisateur de classe
   . 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)
   . Changer le paramètre removeMemberFromClass
   Lorsque nous utilisons ce paramètre il supprime les informations utilisateur à partir de chaque classe
   . 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,

[parameter(Mandatory=$false)]
    [commutateur] $removeMemberFromClass
)
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 : deleteAssignmentsReport = @()
$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=$true)] [ValidateSet ('Get', 'Delete' ignorecase = $true)] $httpmethod,
        [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 $httpmethod - 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 : deleteAssignmentsReport += [PSCustomObject] @{
                RequestUrl = $url
                Méthode = $httpmethod
                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 : deleteAssignmentsReport += [PSCustomObject] @{
                RequestUrl = $url
                Méthode = $httpmethod
                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
            }
        }
    }
}

#Remove membres de classe
fonction Supprimer MemberFromClass
{
    paramètre (
        [Parameter(Mandatory=$true)] $classDetails
    )

$removeMemberUrl = « {0}/v1.0/groups/{1}/members/{2}/'$ref » -f $graphEndpoint, $($classDetails.ClassId), $($classDetails.UserId)
    Essayez
    {
        Appeler RequestWithRetry-url $removeMemberUrl httpmethod - Supprimer - identificateur de classe $($classDetails.ClassId) - NomClasse $($classDetails.ClassName) - OperationName « RemoveMemberfromClass » | Out-Null
    }
    intercepter
    {
        lever $_
    }

}    

fonction Supprimer affectations
{
    paramètre (
        [Parameter(Mandatory=$true)] $classDetail
    )

Essayez
    {
        $classId = $classDetail.ClassId
        $className = $classDetail.ClassName
        $userId = $classDetail.UserId
        $role = $classDetail.Role
        $getAssignmentsUri = (« {0} / classes('{1}')/assignments?TargetUserId = {2} & UserClassRole = {3} » -f $educationEndpoint, $classId, $userId, $role)
        $assignments = $null
        $assignments = appeler RequestWithRetry-url $getAssignmentsUri - httpmethod Get - identificateur de classe $classId - NomClasse $className - OperationName « GetAssignments »
        Si ($assignments - garanties $null- et $assignments.content - garanties $null- et $role - eq « Étudiant »))
        {
            $assignmentsCount = ((($assignments.content) | ConvertFrom-Json) .value) .count
            Écriture-hôte « Affectations récupérées $assignmentsCount pour $className classe »
            $assignmentsTracker = 0
            foreach ($assignment dans (($assignments.content) | ConvertFrom-Json) .value)
            {
                $assignmentName = $assignment.displayName
                $assignmentId = $assignment.id
                $submissions = $assignment.submissions
                Écriture-hôte « Envois suppression pour $($assignmentName) »
                $submissionsTracker = 0
                foreach ($submission dans $submissions)
                {
                    $deleteSDSSubmissionUri = « {0} / bêta / / formations / {1} /assignments/ {2} /submissions/ {3} ?TargetUserId = {4} & UserClassRole = étudiant « -f $graphEndpoint, $classId, $assignmentId, $($submission.id), $userId
                    Si (($submissionsTracker - eq ($submissions. Longueur -1))- et ($assignmentsTracker - eq ($assignmentsCount - 1))- et ($removeMemberFromClass.IsPresent))
                    {
                        Écriture-hôte « soumission de suppression et classinfo pour utilisateur »
                        $deleteSDSSubmissionUri = $deleteSDSSubmissionUri + « & CleanupUserClassData = true »
                    }
                    $deleteResponse = appeler RequestWithRetry-url $deleteSDSSubmissionUri - httpmethod Supprimer - identificateur de classe $classId - NomClasse $className - OperationName « DeleteSubmission »
                    Si ($deleteResponse - garanties $null- et $deleteResponse.Content.Length - ne 0 - et $submissionsTracker - eq ($submissions. Longueur -1))
                    {
                        $classDetail.DeleteSubmissionsProcessed = « True »
                        $script : userClassDetails | Exporter Csv-chemin d’accès $($directoryPathOfFile) - NoTypeInformation-Force
                    }
                    $submissionsTracker ++
                }
                $assignmentsTracker ++
            }
        }
    }
    intercepter
    {   
        lever $_
    }
}

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

$progressTracker = 0 ;
foreach ($classDetail dans $script : userClassDetails)
{
    L’avancement de l’écriture-activité « Suppression de l’affectation pour l’utilisateur »-état « traitement de classe : $classDetail.classId « - PercentComplete ($progressTracker/$script:userClassDetails.count * 100)
    Si ($classDetail.DeleteSubmissionsProcessed - eq « False »)
    {
        Essayez
        {
            if($removeMemberFromClass.IsPresent)
            {
                Écriture-hôte suppression « utilisateurs » à partir de $($classDetail.ClassName)
                Supprimer MemberFromClass - classDetails $classDetail
            }
            Écriture-hôte « Affectations de suppression de l’utilisateur pour $($classDetails.ClassName) »
            Supprimer affectations - classDetails $classDetail
        }
        intercepter
        {
            Erreur d’écriture $_. Exception.Message
        }
    }
    $progressTracker ++
}

$directoryPath = (élément de get-chemin d’accès «. \ »-détaillée). Nom complet
$script : deleteAssignmentsReport | Exporter Csv-chemin d’accès.\DeleteAssignmentsReport.csv - NoTypeInformation-Force
Écriture-Host « Rapport file(DeleteAssignmentsReport.csv) est généré au $directoryPath\DeleteAssignmentsReport.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.

×