Tilldelningar skript - Export

Obs!:  Vi vill kunna erbjuda dig bästa möjliga supportinnehåll så fort som möjligt och på ditt språk. Den här sidan har översatts med hjälp av automatiserad översättning och kan innehålla grammatiska fel eller andra felaktigheter. Vår avsikt är att den här informationen ska vara användbar för dig. Vill du berätta för oss om informationen är till hjälp längst ned på sidan? Här är artikeln på engelska som referens.

Export - Utbildningsväsendet tilldelningar

< #
   . Sammanfattning
    Exportera data för utbildningsväsendet tilldelningar för en användare i en uppsättning klasser som anges i csv-fil.
    . Beskrivning
    Skriptet läser klass-information för användare från indata csv-fil. Få tilldelningar och varje tilldelning av inskickade objekt och genererar tilldelning file(assignment.json) och rapporten file(GetAssignmentsReport.csv). När extrahering av inskickade objekt är klar uppdaterar kolumnen GetSubmissionsProcessed till true för den specifika klassen. Om skriptet misslyckas mellan kan vi köra skriptet med samma indata fil eftersom filen kommer att uppdateras för sista borttagning av bidrag.
   . Exempel på
    .\Export-EduAssignments.ps1 - userClassDetailsFile < fullständig sökväg till användaren information csv-klassfil >
   . Parameter userClassDetailsFile
   Det här är den csv-file(userClassDetails.csv) som är resultatet av Get-UserClasses.ps1 skript. Den här filen finns information om användarklasser och om borttagningen och få inlägg bearbetas. Det här värdet ska vara fullständiga sökvägen till file(drive:\GDPR\userClassDetails.csv)
   . Anteckningar
   Vi behöver ha Microsoft.IdentityModel.Clients.ActiveDirectory.dll och Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll krävs
#>
parameter (
    [parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Om (-inte ($_ | Test-Path)) {
            kasta ”på userClassDetailsFile finns inte”.
        }
        Om (-inte ($_ | Test-Path - typ av sökväg löv)) {
            kasta ”argumentet userClassDetailsFile måste vara en fil. Mappsökvägar tillåts inte ”.
        }
        Om ($_ - notmatch ”(\.csv)”) {
            kasta ”på userClassDetailsFile bör vara en CSV-fil som skapats med Get-UserClasses.ps1”
        }
        returnera $true
    })]
    [sträng] $userClassDetailsFile
)

# Ladda ADAL
Lägga till typ-sökväg ”.\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 authheaders
funktionen Get-AuthHeaders
{
    Parameter (
        [Parameter(Mandatory=$false)]
        [booleskt] $useRefreshToken = $false
    )
    $clientId = ”eb2298a1-a6bb-4f16-a27a-b582815db47b”
    $redirectURI = nytt objekt System.Uri("urn:ietf:wg:oauth:2.0:oob")
    $promptBehavior = [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always
    $authContext = nytt objekt ”Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext” - ArgumentList $authString
    Om ($useRefreshToken - eq $false)
    {
        $script: authenticationResult = $authContext.AcquireToken ($graphEndpoint, $clientID, $redirectURI, $promptBehavior)
    }
    annan
    {
        $script: authenticationResult = $authContext.AcquireTokenByRefreshToken ($script:authenticationResult.RefreshToken, $clientId)
    }
    $authHeader = $script:authenticationResult.AccessTokenType + ”” + $script:authenticationResult.AccessToken
    $headers = @{”godkännande” = $authHeader; ”Innehållstypen” = ”program/json”}
    returnera $headers
}

#Retry logik och loggning av fel skript för
funktionen anropa RequestWithRetry
{
    parameter (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className,
        [Parameter(Mandatory=$true)] $OperationName
    )

för ($i = 1; $i-le $script: maxRetryAttempt; $i ++)
    {
        Prova
        {
            $APIResult = anropa WebRequest-metoden får - Uri $url-sidhuvuden $script: authHeaders
            $resultCount = 0
            Om ($OperationName - eq ”GetAssignments”)
            {
                $valueStartIndex = ($APIResult.content.indexof('"value":') + 8)
                $valueEndIndex = $APIResult.content.Length
                $valueString = $APIResult.content.substring ($valueStartIndex $valueEndIndex-$valueStartIndex -1)
                $resultCount = (($valuestring | Välj strängen ”” klass ””: - AllMatches). Matches.Count)
            }
            annan
            {
                $submissionsJson = $APIResult.content | ConvertFrom Json
                $resultCount = $submissionsJson.value.count
            }

$script: getAssignmentsReport += [PSCustomObject] @{
                RequestUrl = $url
                Metod = ”hämta”
                ResponseCode = $APIResult.StatusCode
                Klassnamn = $className
                Klass = $classId
                Begäran-ID = $APIResult.Headers [”begäran-id”]
                StatusDescription = $APIResult.StatusDescription
                NumberOfAttempts = $i
                OperationName = $OperationName
                ResultCount = $resultCount
            }
            returnera $APIResult
        }
        fånga upp
        {
            IF($_. Exception.Response - ne $null)
            {
                $responseCode = $_. Exception.Response.StatusCode.Value__
                $requestId = $_. Exception.Response.Headers [”begäran-id”]
            }

            $script: getAssignmentsReport += [PSCustomObject] @{
                RequestUrl = $url
                Metod = ”hämta”
                ResponseCode = $responseCode
                Klassnamn = $className
                Klass = $classId
                Begäran-ID = $requestId
                StatusDescription = $_. Exception.Message
                NumberOfAttempts = $i
                OperationName = $OperationName
                ResultCount = $resultCount
            }            

Om ($i - eq $script: maxRetryAttempt)
            {
                kasta $_
            }

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

#get tilldelningar
funktionen Get-tilldelningar
{
    parameter (
        [Parameter(Mandatory=$true)] $classDetails
    )
    Prova
    {
        $classId = $classDetails.ClassId
        $userId = $classDetails.UserId
        $role = $classDetails.Role
        $className = $classId
        Om ($classDetails.ClassName - ne $null- och $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 = anropa RequestWithRetry-URL: en $getAssignmentsUri - klass $classId - klassnamn $className - OperationName ”GetAssignments”
        $outputstring = ””
        Om ($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 | Välj strängen ”” klass ””: - AllMatches). Matches.Index)
            Skriv Host ”Retrieved $($indexValues.count) tilldelningar för $className class”
            $assignmentsStrings = @ ()
            för ($i = 0; $i - lt $indexValues.count; $i ++)
            {
                Om ($i - ne $indexValues.count -1)
                {
                    $assignmentsStrings += $valueString.substring (($indexValues [$i] -1), ($indexValues [$i + 1] - $indexValues [$i] -1))
                }
                annan
                {
                    $assignmentsStrings += $valueString.substring(($indexValues[$i]-1) ($valueString.Length - $indexValues [$i] + 1))
                }

                Om ($role - eq ”Student”)
                {
                    $submissionsIndex = $assignmentsStrings[$i].indexof('"submissions":[')
                    $assignmentsStrings [$i] = $assignmentsStrings [$i] .substring (0, $submissionsIndex + 15)
                    $assignmentsStrings [$i] = $assignmentsStrings [$i] + ”]}”
                }
            }
            för ($i = 0; $i - lt $assignmentsStrings.Length; $i ++)
            {
                $assignmentString = $assignmentsStrings [$i]
                $assignmentJson = $assignmentString | ConvertFrom Json
                $assignmentId = $assignmentJson.id
                Skriv Host ”komma inskickade objekt för $($assignmentJson.displayName) tilldelning”
                $sumbmissionsEndpoint = (”{0} / classes('{1}')/assignments('{2}')/submissions?TargetUserId = {3} & UserClassRole = {4}” -f $educationEndpoint, $classId, $assignmentId, $userId, $role)
                $submissions = anropa RequestWithRetry - klass $classId-URL: en $sumbmissionsEndpoint - klassnamn $className - OperationName ”GetSubmissions”
                Om ($submissions - ne $null- och $submissions. Content.Length - ne 0)
                {
                    $submissionsJson = $submissions.content | ConvertFrom Json
                    Skriv Host ”Retrieved $($submissionsJson.value.count) inskickade objekt för $($assignmentJson.displayName) tilldelning”
                    $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] = $assignmentsStrings [$i] + $submissionsString + ”]}”
                }
            }

            $completeAssigmentsString = ”[”
            Om ($assignmentsStrings.Length - eq 0)
            {
                $completeAssigmentsString = $completeAssigmentsString + ”]”
            }
            annan
            {
                för ($i = 0; $i - lt $assignmentsStrings.Length; $i ++)
                {
                    Om ($i - eq $assignmentsStrings.Length -1)
                    {
                        $completeAssigmentsString = $completeAssigmentsString + $assignmentsStrings [$i] + ”]”
                    }
                    annan
                    {
                        $completeAssigmentsString = $completeAssigmentsString + $assignmentsStrings [$i] + ””,
                    }
                }
            }
            $outputstring = ' {”klass” ”:” + $classId + ”” ”, klassnamn” ”:” + $className + ”” ”, tilldelningar” ”: + $completeAssigmentsString + '}'
            $dateTimeStamp = $(get-datum - f åååå-MM-dd)
            $fileName = $directoryPath + ”\” + $className + ”_” + $userId + ”_” + $dateTimeStamp + ”.json”
            $outputstring | Ut filen $fileName
            Skriv Host("Assignments file for $className is generated at $fileName")
            $classDetails.GetSubmissionsProcessed = ”true”
            $script: userClassDetails | Exportera Csv-sökvägen $($directoryPathOfFile) - NoTypeInformation-kraft
        }
    }
    fånga upp
    {
        Skrivfel $_. Exception.Message
    }

}                                           

$directoryPathOfFile = (get-objekt-sökväg $($userClassDetailsFile)). Fullständigt namn
$directoryPath = (get-objekt-sökväg ”. \”-utförlig). Fullständigt namn
$script: authHeaders = Get-AuthHeaders
$script: userClassDetails = import-csv $userClassDetailsFile

$progressTracker = 1.
#loop igenom varje rad och få inskickade objekt om kolumnen getsubmissionsprocessed är FALSKT
foreach ($classDetail i $script: userClassDetails)
{
    Skriv pågående-aktiviteten ”komma tilldelningar för användaren”-Status ”bearbetning för klassen: $($classDetail.classId)” - värdet för procent färdigt ($progressTracker / $($skript: userClassDetails | Measure-Object) .count * 100)
    Om ($classDetail.GetSubmissionsProcessed - eq ”FALSKT”)
    {
        Skriv host ”komma tilldelningar för $($classDetail.ClassName)”
        Get-tilldelningar - classDetails $classDetail
    }
    $progressTracker ++
}

$script: getAssignmentsReport | Exportera Csv-sökvägen.\GetAssignmentsReport.csv - NoTypeInformation
Skriv Host ”rapport file(GetAssignmentsReport.csv) genereras vid $directoryPath\GetAssignmentsReport.csv”
Skriv Host ”uppdaterad klass information file($($directoryPathOfFile)) och genererade uppdaterade filen är av högst $($directoryPathOfFile)”

Utöka dina Office-kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Office Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×