Script di assegnazioni - Guida

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 Get - classi utente

< #
   . Riepilogo
    È possibile ottenere le informazioni di classi utente come le classi che l'utente è membro e qual è il ruolo di utente dell'utente in tali classi.
    . Descrizione
    Script legge il file e ottenere tutte le classids e aggiornamenti il ruolo con la userrole menzionati, in caso contrario menzionati assegnare a studente valore predefinito. Viene quindi ottenuto le classi in cui l'utente è proprietario e in cui l'utente è membro. Script perfeziona e genera l'output con i Dettagli classe e il ruolo dell'utente in classe specifica.
   . Esempio
    .\Get-userClasses.ps1 - ID utente < Id specifico utente >
        Per ottenere i dettagli utente in base alle appartenenza utente
    .\Get-userClasses.ps1 - ID utente < Id specifico utente > - classIdsFile < percorso del file csv completa >
        Per ottenere i dettagli utente di classi all'appartenenza di utente e file csv, se si non passa il parametro userRole, verranno assegnata per impostazione predefinita di Student per classIds specificato nel file csv
    .\Get-userClasses.ps1 - ID utente < Id specifico utente > - classIdsFile < percorso del file csv completa > - userrole < insegnanti o >
        Si otterrà dettagli utente di classi all'appartenenza utente e file csv. Per classids specificato nel file di dati utente viene generati in base alle userrole specificato (insegnante o studente)
   . ID utente di parametro
   ID utente dell'utente per esportare ed eliminare invii
   . Parametro classIdsFile
   Percorso completo per un file di testo che contiene un singolo classId in ogni riga.
   esempio di elenco di classIds. Ogni riga è necessario applicare classId singola
   e81c2cd2-e3ff-4c0a-8ed0-63df43ff884c
   044b4c35-5fab-454a-9705-bc750108c059
   e81c2cd2-4c0a-e3ff-9705-bc750108c059
   . Parametro userrole
   Questo parametro viene utilizzato per specificare il ruolo di utente da utilizzare per l'ID di classe presente in classIdsFile e l'utente viene rimosso dalla classe.
   outputFileName .paramter
   Questo parametro viene utilizzato un nome al file di output dello script senza estensione. Non si tratta di mandatorty per impostazione predefinita, il nome del file di output è UserClassDetails
   . Note
   È necessario che il Microsoft.IdentityModel.Clients.ActiveDirectory.dll e Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll sono necessari
#>
parametri (
    [Parametri (obbligatorio = $true, posizione = 1)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Provare a {
            [System.Guid]::Parse($_) | In uscita Null
            $true
        } intercettare {
            generare $_
        }
    })]
    [stringa] $userId,

[parametri (obbligatorio = $false, posizione = 2)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Se (-non ($_ | Test-Path)) {
            generare "File o una cartella non esiste"
        }
        Se (-non ($_ | Test-Path - PathType foglia)) {
            generare "l'argomento classIdsFile deve essere un file. Percorsi delle cartelle non sono consentiti."
        }
        Se ($_ - notmatch "(\.txt)") {
            generare "il file specificato nell'argomento del percorso deve essere di tipo txt"
        }
        restituire $true
    })]
    [stringa] $classIdsFile,

[Parametri (obbligatorio = $false, posizione = 3)]
    [ValidateNotNullOrEmpty()]
    [ValidateSet ('Student', 'Insegnante' ignorecase = $false)]
    [stringa] $userrole = "Student"

[parametri (obbligatorio = $false, posizione = 4)]
    [ValidateNotNullOrEmpty()]
    [stringa] $outputFileName = "UserClassDetails"
)
# Caricare ADAL
Aggiungi tipo-percorso ".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

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

# Output per riepilogare successo/errore di chiamate API.
$script: getClassDetailsReport = @)

Richiesta #Makes web e registrare lo stato della risposta
funzione richiama RequestWithRetry
{
    parametri (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className
    )

per ($i = 1; $i-le $script: maxRetryAttempt; $i + +)
    {
        Provare a
        {
            $tempResult = richiama WebRequest-metodo Get - Uri $url-intestazioni $script: authHeaders
            $script: getClassDetailsReport + = [PSCustomObject] @{
                RequestUrl = $url
                Metodo = "Ottieni"
                ResponseCode = $tempResult.StatusCode
                NomeClasse = $className
                ClassId = $classId
                ID richiesta = $tempResult.Headers ["id richiesta"]
                StatusDescription = $tempResult.StatusDescription
                NumberOfAttempts = $i
            }
            restituire $tempResult
        }
        rilevare
        {
            if($_. Exception.Response - ne $null)
            {
                $responseCode = $_. Exception.Response.StatusCode.Value__
                $requestId = $_. Exception.Response.Headers ["id richiesta"]
            }

            $script: getClassDetailsReport + = [PSCustomObject] @{
                RequestUrl = $url
                Metodo = "Ottieni"
                ResponseCode = $responseCode
                NomeClasse = $className
                ClassId = $classId
                ID richiesta = $requestId
                StatusDescription = $_. Exception. Message
                NumberOfAttempts = $i
            }            

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

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

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

#Get il gruppo nome
funzione Get NomeClasse
{
    parametri (
        [Parameter(Mandatory=$true)] $classId
    )

$getClassDetailsUrl = "{0}/v1.0/groups/{1}" -f $graphEndpoint, $classId
    $getClassDetailsResult = (richiama RequestWithRetry-url $getClassDetailsUrl) | ConvertFrom Json
    $className = $getclassDetailsResult.displayName
    restituire $className
}

Dettagli la proprietà #Get dell'id utente con l'istruzione endpoit e perfeziona con la creazione digitare alle assegnazioni
funzione Get-OwnershipDetails
{
    parametri (
        [Parameter(Mandatory=$true)] $userId
    )
    $ownershipUrl = ("{0} / edu/utenti / {1 \} / ownedobjects?'$top = 999" -f $graphEndpoint, $userId)
    $ownershipQuery = (richiama RequestWithRetry-url $ownershipUrl) | ConvertFrom Json
    $classes = $ownershipQuery.value | Oggetto dove {$_.creationOptions-contiene "classAssignments"} | Selezionare oggetto objectId, displayName
    restituire $classes
}

#Get i dettagli di appartenenza dell'id utente con l'istruzione endpoint e perfeziona con la creazione digitare alle assegnazioni
funzione Get-MembershipDetails
{
    parametri (
        [Parameter(Mandatory=$true)] $userId
    )
    $membershipUrl = ("{0} / edu/utenti / {1 \} / memberof?'$top = 999" -f $graphEndpoint, $userId)
    $membershipQuery = (richiama RequestWithRetry-url $membershipUrl) | ConvertFrom Json
    $classes = $membershipQuery.value | Oggetto dove {$_.creationOptions-contiene "classAssignments"} | Selezionare oggetto objectId, displayName
    restituire $classes
}

Oggetto pscutom personalizzato #Return che hanno proprietà classid, ID utente, NomeClasse, ruoli, getsubmissionprocessed e deletesubmissionprocessed
funzione genera ClassRecord
{
    parametri (
        [Parameter(Mandatory=$true)] $userId,
        [Parameter(Mandatory=$true)] $classId,
        [Parameter(Mandatory=$true)] $role,
        [Parameter(Mandatory=$false)] $displayName
    )

$classRecord = [PSCustomObject] @{
        ClassId = $classId
        ID utente = $userId
        NomeClasse = $displayName
        Ruolo = $role
        GetSubmissionsProcessed = $false
        DeleteSubmissionsProcessed = $false
    }

restituire $classRecord
}

$script: authHeaders = Get-AuthHeaders

# Che conterrà i dettagli per tutte le classi "interessanti"
$script: classDetails = @ {}

# Trova proprietà classi (dove si trova utente un insegnante)
Provare a
{
    $ownedClasses = OwnershipDetails get - ID utente $userId
    foreach ($class in $ownedClasses)
    {
        Se (-non $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = genera ClassRecord - ID utente $userId - classId $class.objectId-ruolo "Insegnante" - displayName $class.displayName
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
rilevare
{
    Errore di scrittura $_. Exception. Message
}

# Trova partecipi gruppi (dove si trova utente uno studente)
Provare a
{
    $joinedClasses = MembershipDetails get - ID utente $userId
    foreach ($class in $joinedClasses)
    {
        Se (-non $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = genera ClassRecord - ID utente $userId - classId $class.objectId-ruolo "Student" - displayName $class.displayName
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
rilevare
{
    Errore di scrittura $_. Exception. Message
}

# Informazioni dettagliate per i gruppi aggiuntivi del file.
if(![ stringa]:: IsNullOrEmpty($classIdsFile))
{
    $classIdsFromFile = selezionare stringa-motivo "\w"-percorso $($classIdsFile) | Oggetto ForEach {
        $_. Riga
    }

foreach ($classId in $classIdsFromFile)
    {
        # Elenco classi corrente dell'utente avrà la precedenza sul ulteriore insieme di classi
        # ad esempio, se sono già state identificati il ruolo, non è necessario eseguire nuovamente.
        Se (-non $script: classDetails.ContainsKey($classId.Trim("")))
        {
            Provare a
            {
                $displayName = NomeClasse get - classId $classId
                $classRecord = genera ClassRecord - ID utente $userId - classId $classId-ruolo $userrole - displayName $displayName
                $script:classDetails.Add ($classId, $classRecord)
            }
            rilevare
            {
                Scrittura Host $_. Exception. Message
            }

        }
    }
}            

$script:classDetails.Values | Esportazione Csv-percorso.\$($outputFileName).csv - NoTypeInformation
$script: getClassDetailsReport | Esportazione Csv-percorso.\UserClassDetailsReport.csv - NoTypeInformation
$directoryPath = (get-elemento-percorso ". \"-dettagliato). FullName
Scrittura-Host "Dettagli classe file($($outputFileName).csv) viene generato in $directoryPath\($($outputFileName).csv)"
Scrittura-Host "Dettagli classe report(UserClassDetailsReport.csv) viene generato in $directoryPath\UserClassDetailsReport.csv"

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.

×