Script di assegnazioni - Esporta

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.

Esportazioni - assegnazioni l'istruzione

< #
   . Riepilogo
    Esportare 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 genera file(GetAssignmentsReport.csv) di file(assignment.json) e report delle assegnazioni. Quando viene eseguita l'estrazione di invii Aggiorna la colonna di GetSubmissionsProcessed 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
    .\Export-EduAssignments.ps1 - userClassDetailsFile < percorso completo del file csv i dettagli di classe utente >
   . 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)
   . 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
)

# Caricare ADAL
Aggiungi tipo-percorso ".\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 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=$false)] $classId,
        [Parameter(Mandatory=$false)] $className,
        [Parameter(Mandatory=$true)] $OperationName
    )

per ($i = 1; $i-le $script: maxRetryAttempt; $i + +)
    {
        Provare a
        {
            $APIResult = richiama WebRequest-metodo Get - 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: getAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                Metodo = "Ottieni"
                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: getAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                Metodo = "Ottieni"
                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
            }
        }
    }
}

le assegnazioni #get
funzione Get assegnazioni
{
    parametri (
        [Parameter(Mandatory=$true)] $classDetails
    )
    Provare a
    {
        $classId = $classDetails.ClassId
        $userId = $classDetails.UserId
        $role = $classDetails.Role
        $className = $classId
        Se ($classDetails.ClassName - ne $null- e $classDetail.ClassName.Length - ne 0)
        {
            $className = $classDetails.ClassName
        }
        $getAssignmentsUri = ("{0} / classes('{1}')/assignments?TargetUserId = {2} & UserClassRole = {3 \" -f $educationEndpoint, $classId, $userId, $role)
        $assignments = $null
        $assignments = richiama RequestWithRetry-url $getAssignmentsUri - classId $classId - NomeClasse $className - invece "GetAssignments"
        $outputstring = ""
        Se ($assignments - ne $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 | selezionare stringa ' "classId":' - AllMatches). Matches.Index)
            Scrittura-Host "Recuperata $($indexValues.count) assegnazioni per la classe $className"
            $assignmentsStrings = @ ()
            per ($i = 0; $i - lt $indexValues.count; $i + +)
            {
                Se ($i - ne $indexValues.count -1)
                {
                    $assignmentsStrings + = $valueString.substring (($indexValues [$i] -1), ($indexValues [$i + 1] - $indexValues [$i] -1))
                }
                altre
                {
                    $assignmentsStrings + = $valueString.substring(($indexValues[$i]-1), ($valueString.Length - $indexValues [$i] + 1))
                }

                Se ($role - eq "Student")
                {
                    $submissionsIndex = $assignmentsStrings[$i].indexof('"submissions":[')
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings .substring (0, $submissionsIndex + 15)
                    $assignmentsStrings [$i] = $assignmentsStrings [$i] + "]}"
                }
            }
            per ($i = 0; $i - lt $assignmentsStrings.Length; $i + +)
            {
                $assignmentString = $assignmentsStrings [$i]
                $assignmentJson = $assignmentString | ConvertFrom Json
                $assignmentId = $assignmentJson.id
                Scrittura-Host "Invii Guida per l'assegnazione di $($assignmentJson.displayName)"
                $sumbmissionsEndpoint = ("{0} / classes('{1}')/assignments('{2}')/submissions?TargetUserId = {3 \} & UserClassRole = {4 \" -f $educationEndpoint, $classId, $assignmentId, $userId, $role)
                $submissions = richiama RequestWithRetry - classId $classId-url $sumbmissionsEndpoint - NomeClasse $className - invece "GetSubmissions"
                Se ($submissions - ne $null- e $submissions. Content.Length - ne 0)
                {
                    $submissionsJson = $submissions.content | ConvertFrom Json
                    Scrittura-Host "Invii recuperata $($submissionsJson.value.count) per l'assegnazione di $($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 = "["
            Se ($assignmentsStrings.Length - eq 0)
            {
                $completeAssigmentsString = $completeAssigmentsString + "]"
            }
            altre
            {
                per ($i = 0; $i - lt $assignmentsStrings.Length; $i + +)
                {
                    Se ($i - eq $assignmentsStrings.Length -1)
                    {
                        $completeAssigmentsString = $completeAssigmentsString + $assignmentsStrings [$i] + "]"
                    }
                    altre
                    {
                        $completeAssigmentsString = $completeAssigmentsString $assignmentsStrings [$i] + ","
                    }
                }
            }
            $outputstring = ' {"ClassId": "" + $classId + ' NomeClasse"",":" "+ $className +' assegnazioni","": "+ $completeAssigmentsString + '}'
            $dateTimeStamp = $(Data get - f gg / MM-AAAA)
            $fileName = $directoryPath + "\" + $className + "_" + $userId + "_" + $dateTimeStamp + ".json"
            $outputstring | In uscita File $fileName
            Scrittura Host("Assignments file for $className is generated at $fileName")
            $classDetails.GetSubmissionsProcessed = "True"
            $script: userClassDetails | Esportazione Csv-percorso $($directoryPathOfFile) - NoTypeInformation-forza
        }
    }
    rilevare
    {
        Errore di scrittura $_. Exception. Message
    }

}                                           

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

$progressTracker = 1.
#loop tra ogni riga e ottenere invii se la colonna getsubmissionsprocessed è falsa
foreach ($classDetail in $script: userClassDetails)
{
    Lo stato di avanzamento scrittura-attività "Guida assegnazioni per utente"-lo stato "elaborazione per classe: $($classDetail.classId)" - la percentuale di completamento ($progressTracker / $(script$: userClassDetails | Measure-Object) .count * 100)
    Se ($classDetail.GetSubmissionsProcessed - eq "False")
    {
        Scrittura-host "Guida assegnazioni per $($classDetail.ClassName)"
        Le assegnazioni Get - classDetails $classDetail
    }
    $progressTracker +
}

$script: getAssignmentsReport | Esportazione Csv-percorso.\GetAssignmentsReport.csv - NoTypeInformation
Scrittura-Host "Report file(GetAssignmentsReport.csv) viene generato in $directoryPath\GetAssignmentsReport.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.

×