Eliminare le assegnazioni script-

Nota:  Riteniamo importante fornire il contenuto della Guida più recente non appena possibile, nella lingua dell'utente. Questa pagina è stata tradotta automaticamente e potrebbe contenere errori di grammatica o imprecisioni. L'intento è quello di rendere fruibile il contenuto. Nella parte inferiore della pagina è possibile indicare se le informazioni sono risultate utili. Questo è l' articolo in lingua inglese per riferimento.

Allegati sono gli script di shell power per Delete - assegnazioni EDU, esportazioni - assegnazioni EDU e Get - utente classi.

Elimina - assegnazioni l'istruzione

< #
   . Riepilogo
    Eliminare i dati Edu assegnazioni di un utente in un set di classi specificate nel file csv.
    . Descrizione
    Lo script legge i dettagli della classe dell'utente da un file csv di input. Ottenere le assegnazioni e invii di ogni assegnazione e quindi eliminare l'invio, genera anche un file(DeleteAssignmentsReport.csv) report per informazioni aggiuntive delle informazioni di chiamata. Quando viene eseguita l'eliminazione di invio Aggiorna la colonna di DeleteSubmissionsProcessed su true per la classe specifica. Se lo script non riesce tra è possibile eseguire nuovamente lo script con lo stesso file di input, perché il file verrà aggiornato per l'eliminazione ultimo di presentazione.
   . Esempio
    .\Delete-EduAssignments.ps1 - userClassDetailsFile < percorso completo del file csv i dettagli di classe utente >
    Questa operazione si elimineranno tutti gli inoltri ma non rimuove le informazioni utente dalla classe
    .\Delete-EduAssignments.ps1 - userClassDetailsFile < percorso completo del file csv i dettagli di classe utente > - removeMemberFromClass
    Verranno eliminare tutti gli inoltri e rimuovere le informazioni utente dalla classe
   . Parametro userClassDetailsFile
   Verrà visualizzata la file(userClassDetails.csv) csv che è l'output di script Get-UserClasses.ps1. Questo file offrono informazioni sulle classi utente e se vengono elaborati invii get e l'eliminazione. Questo valore deve essere percorso completo della file(drive:\GDPR\userClassDetails.csv)
   . Passare parametro removeMemberFromClass
   Quando si utilizza questo parametro rimuoverà le informazioni utente da ogni classe
   . Note
   È necessario che il Microsoft.IdentityModel.Clients.ActiveDirectory.dll e Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll sono necessari
#>
parametri (
    [parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Se (-non ($_ | Test-Path)) {
            generare "il userClassDetailsFile non esiste".
        }
        Se (-non ($_ | Test-Path - PathType foglia)) {
            generare "l'argomento userClassDetailsFile deve essere un file. Percorsi delle cartelle non sono consentiti."
        }
        Se ($_ - notmatch "(\.csv)") {
            generare "il userClassDetailsFile deve essere un file delimitati da virgole, generato utilizzando Get-UserClasses.ps1"
        }
        restituire $true
    })]
    [stringa] $userClassDetailsFile,

[parameter(Mandatory=$false)]
    [parametro] $removeMemberFromClass
)
# Caricare ADAL
Aggiungi tipo-percorso ".\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 il authheaders
funzione Get-AuthHeaders
{
    Parametri (
        [Parameter(Mandatory=$false)]
        [bool] $useRefreshToken = $false
    )
    $clientId = "eb2298a1-a6bb-4f16-a27a-b582815db47b"
    $redirectURI = nuovo oggetto System.Uri("urn:ietf:wg:oauth:2.0:oob")
    $promptBehavior = [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always
    $authContext = "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" nuovo oggetto - ArgumentList $authString
    Se ($useRefreshToken - eq $false)
    {
        $script: authenticationResult = $authContext.AcquireToken ($graphEndpoint, $clientID, $redirectURI, $promptBehavior)
    }
    altre
    {
        $script: authenticationResult = $authContext.AcquireTokenByRefreshToken ($script:authenticationResult.RefreshToken, $clientId)
    }
    $authHeader = $script:authenticationResult.AccessTokenType + "" + $script:authenticationResult.AccessToken
    $headers = @{"Autorizzazione" = $authHeader; "Tipo di contenuto" = "Application/json"}
    restituire $headers
}

Logica #Retry e la registrazione degli errori di script
funzione richiama RequestWithRetry
{
    parametri (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$true)] [ValidateSet ('Get', 'Elimina' ignorecase = $true)] $httpmethod,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className,
        [Parameter(Mandatory=$true)] $OperationName
    )

per ($i = 1; $i-le $script: maxRetryAttempt; $i + +)
    {
        Provare a
        {
            $APIResult = richiama WebRequest-metodo $httpmethod - Uri $url-intestazioni $script: authHeaders
            $resultCount = 0
            Se ($OperationName - eq "GetAssignments")
            {
                $valueStartIndex = ($APIResult.content.indexof('"value":') + 8)
                $valueEndIndex = $APIResult.content.Length
                $valueString = $APIResult.content.substring ($valueStartIndex, $valueEndIndex $valueStartIndex -1)
                $resultCount = (($valuestring | selezionare stringa ' "classId":' - AllMatches). Matches.Count)
            }
            altre
            {
                $submissionsJson = $APIResult.content | ConvertFrom Json
                $resultCount = $submissionsJson.value.count
            }

$script: deleteAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                Metodo = $httpmethod
                ResponseCode = $APIResult.StatusCode
                NomeClasse = $className
                ClassId = $classId
                ID richiesta = $APIResult.Headers ["id richiesta"]
                StatusDescription = $APIResult.StatusDescription
                NumberOfAttempts = $i
                Invece = $OperationName
                ResultCount = $resultCount
            }
            restituire $APIResult
        }
        rilevare
        {
            if($_. Exception.Response - ne $null)
            {
                $responseCode = $_. Exception.Response.StatusCode.Value__
                $requestId = $_. Exception.Response.Headers ["id richiesta"]
            }

            $script: deleteAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                Metodo = $httpmethod
                ResponseCode = $responseCode
                NomeClasse = $className
                ClassId = $classId
                ID richiesta = $requestId
                StatusDescription = $_. Exception. Message
                NumberOfAttempts = $i
                Invece = $OperationName
                ResultCount = $resultCount
            }            

Se ($i - eq $script: maxRetryAttempt)
            {
                generare $_
            }

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

#Remove membro della classe
funzione Rimuovi MemberFromClass
{
    parametri (
        [Parameter(Mandatory=$true)] $classDetails
    )

$removeMemberUrl = "{0}/v1.0/groups/{1}/members/{2}/'$ref" -f $graphEndpoint, $($classDetails.ClassId), $($classDetails.UserId)
    Provare a
    {
        Richiamare RequestWithRetry-url $removeMemberUrl - httpmethod Elimina - classId $($classDetails.ClassId) - NomeClasse $($classDetails.ClassName) - invece "RemoveMemberfromClass" | In uscita Null
    }
    rilevare
    {
        generare $_
    }

}    

funzione Elimina assegnazioni
{
    parametri (
        [Parameter(Mandatory=$true)] $classDetail
    )

Provare a
    {
        $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 = richiama RequestWithRetry-url $getAssignmentsUri - httpmethod Get - classId $classId - NomeClasse $className - invece "GetAssignments"
        Se ($assignments - ne $null- e $assignments.content - ne $null- e $role - eq "Student"))
        {
            $assignmentsCount = ((($assignments.content) | ConvertFrom-Json) valido) .count
            Scrittura-Host "Recuperata $assignmentsCount assegnazioni per la classe $className"
            $assignmentsTracker = 0
            foreach ($assignment in (($assignments.content) | ConvertFrom-Json) valido)
            {
                $assignmentName = $assignment.displayName
                $assignmentId = $assignment.id
                $submissions = $assignment.submissions
                Scrittura-Host "Eliminazione invii per $($assignmentName)"
                $submissionsTracker = 0
                foreach ($submission in $submissions)
                {
                    $deleteSDSSubmissionUri = "{0} / beta/education/classi / {1 \ /assignments/ {2} /submissions/ {3 \ ?TargetUserId = {4 \ & UserClassRole = studente" -f $graphEndpoint, $classId, $assignmentId, $($submission.id), $userId
                    Se (($submissionsTracker - eq ($submissions. Lunghezza -1))- e ($assignmentsTracker - eq ($assignmentsCount - 1))-($removeMemberFromClass.IsPresent) e)
                    {
                        Scrittura Host "eliminazione presentazione e classinfo per utente"
                        $deleteSDSSubmissionUri = $deleteSDSSubmissionUri + "& CleanupUserClassData = true"
                    }
                    $deleteResponse = richiama RequestWithRetry-url $deleteSDSSubmissionUri - httpmethod eliminare - classId $classId - NomeClasse $className - invece "DeleteSubmission"
                    Se ($deleteResponse - ne $null-$deleteResponse.Content.Length - ne e 0 - e $submissionsTracker - eq ($submissions. Lunghezza -1))
                    {
                        $classDetail.DeleteSubmissionsProcessed = "True"
                        $script: userClassDetails | Esportazione Csv-percorso $($directoryPathOfFile) - NoTypeInformation-forza
                    }
                    $submissionsTracker +
                }
                $assignmentsTracker +
            }
        }
    }
    rilevare
    {   
        generare $_
    }
}

$directoryPathOfFile = (get-elemento-percorso $($userClassDetailsFile)). FullName
$script: authHeaders = Get-AuthHeaders
$script: userClassDetails = importazione-csv $userClassDetailsFile

$progressTracker = 0;
foreach ($classDetail in $script: userClassDetails)
{
    Lo stato di avanzamento scrittura-attività "Eliminazione assegnazioni per utente"-lo stato "elaborazione per classe: $classDetail.classId" - la percentuale di completamento ($progressTracker/$script:userClassDetails.count * 100)
    Se ($classDetail.DeleteSubmissionsProcessed - eq "False")
    {
        Provare a
        {
            if($removeMemberFromClass.IsPresent)
            {
                Scrittura-Host ""eliminazione utente da $($classDetail.ClassName)
                Rimuovi MemberFromClass - classDetails $classDetail
            }
            Scrittura-host "Assegnazioni eliminazione dell'utente per $($classDetails.ClassName)"
            Elimina assegnazioni - classDetails $classDetail
        }
        rilevare
        {
            Errore di scrittura $_. Exception. Message
        }
    }
    $progressTracker +
}

$directoryPath = (get-elemento-percorso ". \"-dettagliato). FullName
$script: deleteAssignmentsReport | Esportazione Csv-percorso.\DeleteAssignmentsReport.csv - NoTypeInformation-forza
Scrittura-Host "Report file(DeleteAssignmentsReport.csv) viene generato in $directoryPath\DeleteAssignmentsReport.csv"
Scrittura Host "classe Updated dettagli file($($directoryPathOfFile)) e file aggiornato generato si trova al $($directoryPathOfFile)"

Amplia le tue competenze su Office
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa al programma Office Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×