Obtener las asignaciones de secuencias de comandos:

Nota:  Nos gustaría proporcionarle el contenido de ayuda actual lo más rápido posible en su idioma. Esta página se ha traducido mediante un sistema automático y es posible que contenga imprecisiones o errores gramaticales. Nuestro objetivo es que este contenido sea útil para usted. ¿Puede informarnos sobre si la información le ha sido útil al final de la página? Aquí tiene el artículo en inglés para que pueda consultarlo fácilmente.

Adjuntos son las secuencias de comandos de shell de power para Get - clases de usuario

< #
   . Resumen
    Obtener la información de clases de usuario, como en las clases que el usuario es miembro y cuál es la función de usuario del usuario en esas clases.
    . DESCRIPCIÓN
    Lee el archivo de secuencias de comandos y obtener todos los ClassID y actualizaciones de la función con el userrole mencionado, si no se menciona asignar a estudiantes que es el valor predeterminado. A continuación, obtiene las clases en el que el usuario es propietario y que el usuario es miembro. Script refina y genera el resultado con los detalles de la clase y el rol de usuario de clase específica.
   . Ejemplo
    .\Get-userClasses.ps1 - ID de usuario < Id de usuario específico >
        Esto proporciona los detalles del usuario según la pertenencia a usuario
    .\Get-userClasses.ps1 - ID de usuario < Id de usuario específico > - classIdsFile < ruta del archivo csv completa >
        Esto proporciona los detalles del usuario de clases especificadas en pertenencia de usuario y el archivo csv, si no se transfiere el parámetro userRole, se asignará a predeterminado de Student para los ClassID especificados en el archivo csv
    .\Get-userClasses.ps1 - ID de usuario < Id de usuario específico > - classIdsFile < ruta del archivo csv completa > - userrole < estudiante o profesor >
        Esto proporciona los detalles del usuario de clases especificadas en la suscripción de usuario y el archivo csv. Para los ClassID especificados en el archivo de datos de usuario se generan según userrole especificado (profesor o estudiante)
   . ID de parámetro
   Identificador de usuario del usuario para exportar y eliminar envíos
   . Parámetro classIdsFile
   Ruta de acceso completa a un archivo de texto sin formato que contiene un ID único en cada línea.
   lista de ejemplo de classIds. Cada línea debería tener solo ID
   e81c2cd2-e3ff-4c0a-8ed0-63df43ff884c
   044b4c35-5fab-454a-9705-bc750108c059
   e81c2cd2-4c0a-e3ff-9705-bc750108c059
   . Parámetro userrole
   Este parámetro se utiliza para especificar el rol de usuario que se usará para los identificadores de clase presentes en classIdsFile y el usuario se quita de la clase.
   outputFileName .paramter
   Este parámetro se utiliza un nombre al archivo de salida de la secuencia de comandos, sin extensiones. Esto no es mandatorty de forma predeterminada, el nombre de archivo de salida es UserClassDetails
   . Notas
   Se necesita tener la Microsoft.IdentityModel.Clients.ActiveDirectory.dll y Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll son necesarios
#>
parámetros (
    [Parámetro (obligatorio = $true, posición = 1)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Intente {
            [System.Guid]::Parse($_) | Out-Null
            $true
        } detectar {
            iniciar $_
        }
    })]
    [cadena] $userId,

[parámetro (obligatorio = $false, posición = 2)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Si (-no ($_ | Test-Path)) {
            producir "archivo o carpeta no existe"
        }
        Si (-no ($_ | Hoja de Test-Path - PathType)) {
            producir "el argumento classIdsFile debe ser un archivo. No se permiten rutas de carpeta."
        }
        Si ($_ - notmatch "(\.txt)") {
            producir "debe ser el archivo especificado en el argumento de ruta de acceso de tipo txt"
        }
        devolver $true
    })]
    [cadena] $classIdsFile,

[Parámetro (obligatorio = $false, posición = 3)]
    [ValidateNotNullOrEmpty()]
    [ValidateSet ('Alumno', 'Profesor' ignorecase = $false)]
    [cadena] $userrole = "Estudiantes"

[parámetro (obligatorio = $false, posición = 4)]
    [ValidateNotNullOrEmpty()]
    [cadena] $outputFileName = "UserClassDetails"
)
# Cargar ADAL
Agregar tipo-ruta de acceso ".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

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

# Salida para resumir éxito o error de llamadas API.
$script: getClassDetailsReport = @)

Solicitud #Makes web y registra el estado de respuesta
función invocación RequestWithRetry
{
    parámetros (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className
    )

para ($i = 1; $i-le $script: maxRetryAttempt; $i ++)
    {
        Intente
        {
            $tempResult = invocar WebRequest-método Get - Uri $url-encabezados $script: authHeaders
            $script: getClassDetailsReport += [PSCustomObject] @{
                RequestUrl = $url
                Método = "Get"
                ResponseCode = $tempResult.StatusCode
                Nombre de clase = $className
                ID = $classId
                ID = $tempResult.Headers ["solicitud id"]
                StatusDescription = $tempResult.StatusDescription
                NumberOfAttempts = $i
            }
            devolver $tempResult
        }
        detectar
        {
            If($_. Exception.Response - ne $null)
            {
                $responseCode = $_. Exception.Response.StatusCode.Value__
                $requestId = $_. Exception.Response.Headers ["solicitud id"]
            }

            $script: getClassDetailsReport += [PSCustomObject] @{
                RequestUrl = $url
                Método = "Get"
                ResponseCode = $responseCode
                Nombre de clase = $className
                ID = $classId
                ID = $requestId
                StatusDescription = $_. Exception.Message
                NumberOfAttempts = $i
            }            

Si ($i - EC $script: maxRetryAttempt)
            {
                producir $_. Exception.Message
            }

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

#Get la authheaders
función Get-AuthHeaders
{
    Parámetros (
        [Parameter(Mandatory=$false)]
        [bool] $useRefreshToken = $false
    )
    $clientId = "eb2298a1-a6bb-4f16-a27a-b582815db47b"
    $redirectURI = New-Object System.Uri("urn:ietf:wg:oauth:2.0:oob")
    $promptBehavior = [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always
    $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" - ArgumentList $authString
    Si ($useRefreshToken - EC $false)
    {
        $script: authenticationResult = $authContext.AcquireToken ($graphEndpoint, $clientID, $redirectURI, $promptBehavior)
    }
    más
    {
        $script: authenticationResult = $authContext.AcquireTokenByRefreshToken (script:authenticationResult.RefreshToken$, $clientId)
    }
    $authHeader = $script:authenticationResult.AccessTokenType + "" + $script:authenticationResult.AccessToken
    $headers = @{"Autorización" = $authHeader; "Tipo de contenido" = "Application/json"}
    devolver $headers
}

El nombre del grupo de #Get
Obtener nombre de clase de la función
{
    parámetros (
        [Parameter(Mandatory=$true)] $classId
    )

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

Detalles de la propiedad #Get de identificador de usuario mediante edu endpoit y refinar con la creación escriba asignaciones
función Get-OwnershipDetails
{
    parámetros (
        [Parameter(Mandatory=$true)] $userId
    )
    $ownershipUrl = ("{0} / edu/usuarios / {1} / ownedobjects?'$top = 999" -f $graphEndpoint, $userId)
    $ownershipQuery = (invocar RequestWithRetry-url $ownershipUrl) | Json ConvertFrom
    $classes = $ownershipQuery.value | Objeto de dónde {$_.creationOptions-contiene "classAssignments"} | Id. de objeto de Seleccionar objeto, displayName
    devolver $classes
}

#Get los detalles de pertenencia de identificador de usuario mediante edu extremo y refinar con la creación escriba asignaciones
función Get-MembershipDetails
{
    parámetros (
        [Parameter(Mandatory=$true)] $userId
    )
    $membershipUrl = ("{0} / edu/usuarios / {1} / memberof?'$top = 999" -f $graphEndpoint, $userId)
    $membershipQuery = (invocar RequestWithRetry-url $membershipUrl) | Json ConvertFrom
    $classes = $membershipQuery.value | Objeto de dónde {$_.creationOptions-contiene "classAssignments"} | Id. de objeto de Seleccionar objeto, displayName
    devolver $classes
}

Objeto de pscutom personalizado #Return que tienen propiedades ID, identificador de usuario, nombre de clase, roles, getsubmissionprocessed y deletesubmissionprocessed
función Generate ClassRecord
{
    parámetros (
        [Parameter(Mandatory=$true)] $userId,
        [Parameter(Mandatory=$true)] $classId,
        [Parameter(Mandatory=$true)] $role,
        [Parameter(Mandatory=$false)] $displayName
    )

$classRecord = [PSCustomObject] @{
        ID = $classId
        Identificador de usuario = $userId
        Nombre de clase = $displayName
        Función = $role
        GetSubmissionsProcessed = $false
        DeleteSubmissionsProcessed = $false
    }

devolver $classRecord
}

$script: authHeaders = Get-AuthHeaders

# Contendrá los detalles de todas las clases "interesantes"
$script: classDetails = @ {}

# Buscar su propiedad clases (donde usuario actualmente es un profesor)
Intente
{
    $ownedClasses = OwnershipDetails get - ID de usuario $userId
    foreach ($class en $ownedClasses)
    {
        Si (-no $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = generar ClassRecord - ID $userId ID - $class.objectId-rol "Profesor" displayName - $class.displayName
            $script:classDetails.Add (class.objectId$, $classRecord)
        }
    }
}
detectar
{
    Error de escritura $_. Exception.Message
}

# Buscar unido grupos (donde usuario actualmente es un estudiante)
Intente
{
    $joinedClasses = MembershipDetails get - ID de usuario $userId
    foreach ($class en $joinedClasses)
    {
        Si (-no $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = generar ClassRecord - ID $userId ID - $class.objectId-rol "Estudiantes" displayName - $class.displayName
            $script:classDetails.Add (class.objectId$, $classRecord)
        }
    }
}
detectar
{
    Error de escritura $_. Exception.Message
}

# Ver los detalles de los grupos adicionales del archivo.
If(![ cadena]:: IsNullOrEmpty($classIdsFile))
{
    $classIdsFromFile = select-String-trama "\w"-ruta de acceso $($classIdsFile) | Objeto ForEach {
        $_. Línea
    }

foreach ($classId en $classIdsFromFile)
    {
        # Lista de clases actual del usuario tiene preferencia sobre el conjunto de clases adicional
        #, es decir, si ya hemos identificado el rol, no es necesario realizar de nuevo.
        Si (-no $script: classDetails.ContainsKey($classId.Trim("")))
        {
            Intente
            {
                $displayName = nombre de clase de get - ID $classId
                $classRecord = generar ClassRecord - ID $userId - ID $classId-función $userrole - displayName $displayName
                $script:classDetails.Add ($classId, $classRecord)
            }
            detectar
            {
                Host de escritura $_. Exception.Message
            }

        }
    }
}            

$script:classDetails.Values | Exportar Csv-ruta.\$($outputFileName).csv - NoTypeInformation
$script: getClassDetailsReport | Exportar Csv-ruta.\UserClassDetailsReport.csv - NoTypeInformation
$directoryPath = (elemento de get-ruta de acceso ". \"-detallado). FullName
Host de escritura "Detalles de la clase file($($outputFileName).csv) se genera en $directoryPath\($($outputFileName).csv)"
Host de escritura "Detalles de la clase report(UserClassDetailsReport.csv) se genera en $directoryPath\UserClassDetailsReport.csv"

Ampliar sus conocimientos de Office
Explorar los cursos
Obtener nuevas características primero
Únase a los participantes de Office Insider

¿Le ha sido útil esta información?

¡Gracias por sus comentarios!

Gracias por sus comentarios. Quizá le interese ponerse en contacto con uno de nuestros agentes de soporte de Office.

×