Tilldelningar skript - hämta

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 Get - användaren kurser

< #
   . Sammanfattning
    Få klasser användarinformation som i vilka kurser användaren är medlem och vad är användarroll för användare i dessa klasser.
    . Beskrivning
    Skript som läser filen och hämta alla klass-ID och uppdateringar roll med userrole som nämns, om inte nämns tilldela student som är standard. Det får sedan klasser där användaren är ägare och kurser där användaren är medlem. Skript förfinar och genererar utdata med klass information och roll användare i specifika klass.
   . Exempel på
    .\Get-userClasses.ps1 - användar-ID < specifika användar-Id >
        Här kommer användarinformation enligt användarmedlemskap
    .\Get-userClasses.ps1 - användarnamn < specifika användar-Id > - classIdsFile < fullständig csv-sökväg >
        Här kommer användarinformation med kurser som anges i CSV-filen och användaren medlemskap om vi inte klarar parametern userRole, den ska tilldelas till Student standard för klass-ID som anges i csv-filen
    .\Get-userClasses.ps1 - användarnamn < specifika användar-Id > - classIdsFile < fullständig csv-sökväg > - userrole < Student eller lärare >
        Här kommer användarinformation med kurser som anges i CSV-filen och användaren medlemskap. För klass-ID som anges i filen användardata genereras enligt userrole anges (lärare och studenter)
   . Parameter användar-ID
   Användar-ID för användaren att exportera och ta bort inskickade objekt
   . Parameter classIdsFile
   Fullständig sökväg till en oformaterad textfil som innehåller en enda klass på varje rad.
   exempellista över klass. Varje rad ska ha enstaka klass
   e81c2cd2-e3ff-4c0a-8ed0-63df43ff884c
   044b4c35-5fab-454a-9705-bc750108c059
   e81c2cd2-4c0a-e3ff-9705-bc750108c059
   . Parameter userrole
   Den här parmeter används för att ange rollen som användaren ska användas för klass-ID i classIdsFile och användaren tas bort från klass.
   .paramter utdatafilnamn
   Den här parametern används för att namnge utdatafil av skript några tillägg. Det här är inte mandatorty som standard är namnet på utdatafilen UserClassDetails
   . Anteckningar
   Vi behöver ha Microsoft.IdentityModel.Clients.ActiveDirectory.dll och Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll krävs
#>
parameter (
    [Parameter (obligatoriskt = $true, Position = 1)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Prova {
            [System.Guid]::Parse($_) | Null-ut
            $true
        } fånga upp {
            kasta $_
        }
    })]
    [sträng] $userId,

[parameter (obligatoriskt = $false, Position = 2)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Om (-inte ($_ | Test-Path)) {
            kasta ”filen eller mappen finns inte”
        }
        Om (-inte ($_ | Test-Path - typ av sökväg löv)) {
            kasta ”argumentet classIdsFile måste vara en fil. Mappsökvägar tillåts inte ”.
        }
        Om ($_ - notmatch ”(\.txt)”) {
            Kasta ”den fil som anges i Sökvägsargumentet måste vara av typen txt”
        }
        returnera $true
    })]
    [sträng] $classIdsFile,

[Parameter (obligatoriskt = $false, Position = 3)]
    [ValidateNotNullOrEmpty()]
    [ValidateSet (”Student', 'Lärare” ignorecase = $false)]
    [sträng] $userrole = ”Student”

[parameter (obligatoriskt = $false, Position = 4)]
    [ValidateNotNullOrEmpty()]
    [sträng] $outputFileName = ”UserClassDetails”
)
# Ladda ADAL
Lägga till typ-sökväg ”.\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll”

$script: maxRetryAttempt = 3
$script: authenticationResult = $null
$graphEndpoint = ”https://graph.microsoft.com”
$authString = ”https://login.windows.net/common”

# Utdata ska summeras framgå/fel av API-anrop.
$script: getClassDetailsReport = @)

#Makes web begäran och loggar på svarsstatus
funktionen anropa RequestWithRetry
{
    parameter (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className
    )

för ($i = 1; $i-le $script: maxRetryAttempt; $i ++)
    {
        Prova
        {
            $tempResult = anropa WebRequest-metoden får - Uri $url-sidhuvuden $script: authHeaders
            $script: getClassDetailsReport += [PSCustomObject] @{
                RequestUrl = $url
                Metod = ”hämta”
                ResponseCode = $tempResult.StatusCode
                Klassnamn = $className
                Klass = $classId
                Begäran-ID = $tempResult.Headers [”begäran-id”]
                StatusDescription = $tempResult.StatusDescription
                NumberOfAttempts = $i
            }
            returnera $tempResult
        }
        fånga upp
        {
            IF($_. Exception.Response - ne $null)
            {
                $responseCode = $_. Exception.Response.StatusCode.Value__
                $requestId = $_. Exception.Response.Headers [”begäran-id”]
            }

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

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

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

#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
}

#Get gruppen namn
funktionen Get-klassnamn
{
    parameter (
        [Parameter(Mandatory=$true)] $classId
    )

$getClassDetailsUrl = ”{0}/v1.0/groups/{1}” -f $graphEndpoint, $classId
    $getClassDetailsResult = (anropa RequestWithRetry-URL: en $getClassDetailsUrl) | ConvertFrom Json
    $className = $getclassDetailsResult.displayName
    returnera $className
}

#Get ägarskap information om användar-id med hjälp av utbildningsväsendet endpoit och förfina med för att skapa skriva till tilldelningar
funktionen Get-OwnershipDetails
{
    parameter (
        [Parameter(Mandatory=$true)] $userId
    )
    $ownershipUrl = (”{0} / utbildningsväsendet/användare / {1} / ownedobjects?'$top = 999” -f $graphEndpoint, $userId)
    $ownershipQuery = (anropa RequestWithRetry-URL: en $ownershipUrl) | ConvertFrom Json
    $classes = $ownershipQuery.value | WHERE-Object {$_.creationOptions-innehåller ”classAssignments”} | Select-Object objekt-ID, displayName
    returnera $classes
}

#Get medlemskap information om användar-id med hjälp av utbildningsväsendet slutpunkt och förfina med för att skapa skriva till tilldelningar
funktionen Get-MembershipDetails
{
    parameter (
        [Parameter(Mandatory=$true)] $userId
    )
    $membershipUrl = (”{0} / utbildningsväsendet/användare / {1} / memberof?'$top = 999” -f $graphEndpoint, $userId)
    $membershipQuery = (anropa RequestWithRetry-URL: en $membershipUrl) | ConvertFrom Json
    $classes = $membershipQuery.value | WHERE-Object {$_.creationOptions-innehåller ”classAssignments”} | Select-Object objekt-ID, displayName
    returnera $classes
}

#Return anpassade pscutom objekt som har egenskaper för klass, användar-ID, klassnamn, roller, getsubmissionprocessed och deletesubmissionprocessed
funktionen generera ClassRecord
{
    parameter (
        [Parameter(Mandatory=$true)] $userId,
        [Parameter(Mandatory=$true)] $classId,
        [Parameter(Mandatory=$true)] $role,
        [Parameter(Mandatory=$false)] $displayName
    )

$classRecord = [PSCustomObject] @{
        Klass = $classId
        Användar-ID = $userId
        Klassnamn = $displayName
        Roll = $role
        GetSubmissionsProcessed = $false
        DeleteSubmissionsProcessed = $false
    }

returnera $classRecord
}

$script: authHeaders = Get-AuthHeaders

# Detta ska innehålla information för alla ”intressant” klasser
$script: classDetails = @ {}

# Sök ägs klasser (där användaren är för närvarande läraren)
Prova
{
    $ownedClasses = get-OwnershipDetails - användar-ID $userId
    foreach ($class i $ownedClasses)
    {
        Om (-inte $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = generera ClassRecord användar-- ID $userId - klass $class.objectId-roll ”lärare” - displayName $class.displayName
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
fånga upp
{
    Skrivfel $_. Exception.Message
}

# Sök ansluten grupper (där användaren är för närvarande student)
Prova
{
    $joinedClasses = get-MembershipDetails - användar-ID $userId
    foreach ($class i $joinedClasses)
    {
        Om (-inte $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = generera ClassRecord användar-- ID $userId - klass $class.objectId-roll ”Student” - displayName $class.displayName
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
fånga upp
{
    Skrivfel $_. Exception.Message
}

# Ha mer information om fler grupper från filen.
IF(![ sträng]:: IsNullOrEmpty($classIdsFile))
{
    $classIdsFromFile = Välj sträng-mönster ”\w”-sökvägen $($classIdsFile) | ForEach-Object {
        $_. Raden
    }

foreach ($classId i $classIdsFromFile)
    {
        # Listan över användarens aktuella kurser tar precendence över ytterligare uppsättning klasser
        # dvs om vi redan har identifierat rollen vi behöver inte göra det igen.
        Om (-inte $script: classDetails.ContainsKey($classId.Trim("")))
        {
            Prova
            {
                $displayName = get-klassnamn - klass $classId
                $classRecord = generera ClassRecord användar-- ID $userId - klass $classId-roll $userrole - displayName $displayName
                $script:classDetails.Add ($classId, $classRecord)
            }
            fånga upp
            {
                Skriv Host $_. Exception.Message
            }

        }
    }
}            

$script:classDetails.Values | Exportera Csv-sökvägen.\$($outputFileName).csv - NoTypeInformation
$script: getClassDetailsReport | Exportera Csv-sökvägen.\UserClassDetailsReport.csv - NoTypeInformation
$directoryPath = (get-objekt-sökväg ”. \”-utförlig). Fullständigt namn
Skriv Host ”Class information file($($outputFileName).csv) genereras vid $directoryPath\($($outputFileName).csv)”
Skriv Host ”Class information report(UserClassDetailsReport.csv) genereras vid $directoryPath\UserClassDetailsReport.csv”

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.

×