Tilldelningar skript - ta bort

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.

Bifogad är power shell skript för ta bort - Utbildningsväsendet tilldelningar, export - Utbildningsväsendet tilldelningar och Get - användaren kurser.

Ta bort - Utbildningsväsendet tilldelningar

< #
   . Sammanfattning
    Ta bort utbildningsväsendet tilldelningar data 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 ta bort inlägg, den också generera en rapport file(DeleteAssignmentsReport.csv) extra information av samtalsinformation. När borttagningen av bidrag görs uppdaterar kolumnen DeleteSubmissionsProcessed 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å
    .\Delete-EduAssignments.ps1 - userClassDetailsFile < fullständig sökväg till användaren information csv-klassfil >
    Detta tar bort alla inskickade objekt men inte bort användarinformation från klassen
    .\Delete-EduAssignments.ps1 - userClassDetailsFile < fullständig sökväg till användaren information csv-klassfil > - removeMemberFromClass
    Då kommer ta bort alla inskickade objekt och ta bort användarinformation från klass
   . 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)
   . Växla Parameter removeMemberFromClass
   När vi använder den här parametern tas användarinformation från varje klass
   . 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,

[parameter(Mandatory=$false)]
    [byta] $removeMemberFromClass
)
# 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: deleteAssignmentsReport = @ ()
$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=$true)] [ValidateSet (”hämta”, ”ta bort” ignorecase = $true)] $httpmethod,
        [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 $httpmethod - 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: deleteAssignmentsReport += [PSCustomObject] @{
                RequestUrl = $url
                Metod = $httpmethod
                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: deleteAssignmentsReport += [PSCustomObject] @{
                RequestUrl = $url
                Metod = $httpmethod
                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
            }
        }
    }
}

#Remove medlem från klassen
funktionen Ta bort MemberFromClass
{
    parameter (
        [Parameter(Mandatory=$true)] $classDetails
    )

$removeMemberUrl = ”{0}/v1.0/groups/{1}/members/{2}/'$ref” -f $graphEndpoint, $($classDetails.ClassId), $($classDetails.UserId)
    Prova
    {
        Anropa RequestWithRetry-URL: en $removeMemberUrl - httpmethod ta bort - klass $($classDetails.ClassId) - klassnamn $($classDetails.ClassName) - OperationName ”RemoveMemberfromClass” | Null-ut
    }
    fånga upp
    {
        kasta $_
    }

}    

funktionen Ta bort tilldelningar
{
    parameter (
        [Parameter(Mandatory=$true)] $classDetail
    )

Prova
    {
        $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 = anropa RequestWithRetry-URL: en $getAssignmentsUri - httpmethod få - klass $classId - klassnamn $className - OperationName ”GetAssignments”
        Om ($assignments - ne $null- och $assignments.content - ne $null- och $role - eq ”Student”))
        {
            $assignmentsCount = ((($assignments.content) | ConvertFrom-Json) .value) .count
            Skriv Host ”Retrieved $assignmentsCount tilldelningar för $className class”
            $assignmentsTracker = 0
            foreach ($assignment i (($assignments.content) | ConvertFrom-Json) .value)
            {
                $assignmentName = $assignment.displayName
                $assignmentId = $assignment.id
                $submissions = $assignment.submissions
                Skriv Host ”ta bort inskickade objekt för $($assignmentName)”
                $submissionsTracker = 0
                foreach ($submission i $submissions)
                {
                    $deleteSDSSubmissionUri = ”{0} / beta/utbildning/klasser / {1} /assignments/ {2} /submissions/ {3} ?TargetUserId = {4} & UserClassRole = Student” -f $graphEndpoint, $classId, $assignmentId, $($submission.id), $userId
                    Om (($submissionsTracker - eq ($submissions. Längd -1))- och ($assignmentsTracker - eq ($assignmentsCount - 1))- och ($removeMemberFromClass.IsPresent))
                    {
                        Skriv Host ”ta bort bidrag och classinfo för användaren”
                        $deleteSDSSubmissionUri = $deleteSDSSubmissionUri + ”& CleanupUserClassData = true”
                    }
                    $deleteResponse = anropa RequestWithRetry-URL: en $deleteSDSSubmissionUri - httpmethod ta bort - klass $classId - klassnamn $className - OperationName ”DeleteSubmission”
                    Om ($deleteResponse - ne $null- och $deleteResponse.Content.Length - ne 0 - och $submissionsTracker - eq ($submissions. Längd -1))
                    {
                        $classDetail.DeleteSubmissionsProcessed = ”true”
                        $script: userClassDetails | Exportera Csv-sökvägen $($directoryPathOfFile) - NoTypeInformation-kraft
                    }
                    $submissionsTracker ++
                }
                $assignmentsTracker ++
            }
        }
    }
    fånga upp
    {   
        kasta $_
    }
}

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

$progressTracker = 0;
foreach ($classDetail i $script: userClassDetails)
{
    Skriv pågående-aktiviteten ”Ta bort tilldelningar för användaren”-Status ”bearbetning för klassen: $classDetail.classId” - värdet för procent färdigt ($progressTracker/$script:userClassDetails.count * 100)
    Om ($classDetail.DeleteSubmissionsProcessed - eq ”FALSKT”)
    {
        Prova
        {
            IF($removeMemberFromClass.IsPresent)
            {
                Skriv Host ”ta bort användare från $($classDetail.ClassName)”
                Ta bort MemberFromClass - classDetails $classDetail
            }
            Skriv host ”ta bort tilldelningar av användaren för $($classDetails.ClassName)”
            Ta bort tilldelningar - classDetails $classDetail
        }
        fånga upp
        {
            Skrivfel $_. Exception.Message
        }
    }
    $progressTracker ++
}

$directoryPath = (get-objekt-sökväg ”. \”-utförlig). Fullständigt namn
$script: deleteAssignmentsReport | Exportera Csv-sökvägen.\DeleteAssignmentsReport.csv - NoTypeInformation-kraft
Skriv Host ”rapport file(DeleteAssignmentsReport.csv) genereras vid $directoryPath\DeleteAssignmentsReport.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.

×