Scripts de atribuições - obter

Observação:  Desejamos fornecer o conteúdo da Ajuda mais recente no seu idioma da forma mais rápida possível. Esta página foi traduzida de forma automatizada e pode conter imprecisões ou erros gramaticais. Nosso objetivo é que este conteúdo seja útil para você. As informações foram úteis? Dê sua opinião no final desta página. Aqui está o artigo em inglês para facilitar a referência.

Anexados são os scripts de shell do power para Get - classes de usuário

< #
   . Resumo
    Obter as informações de classes de usuário, como nas quais classes o usuário é membro e qual é a função de usuário do usuário nessas classes.
    . Descrição
    Scripts lê o arquivo e obter todo o classids e atualizações a função com o userrole mencionado, se não mencionados atribuir ao aluno que é padrão. Em seguida, ele obtém as classes no qual o usuário é o proprietário e onde o usuário é membro. Script refina e gera a saída com os detalhes de classe e a função de usuário em classe específica.
   . Exemplo
    .\Get-userClasses.ps1 - ID de usuário < Id de usuário específica >
        Isso obterá os detalhes do usuário de acordo com a associação de usuário
    .\Get-userClasses.ps1 - ID de usuário < Id de usuário específica > - classIdsFile < caminho de arquivo csv completa >
        Isso obterá os detalhes do usuário de classes especificados na associação de usuário e arquivo csv, se nós não passar o parâmetro userRole, ela será atribuída ao padrão de aluno para o classIds especificado no arquivo csv
    .\Get-userClasses.ps1 - ID de usuário < Id de usuário específica > - classIdsFile < caminho de arquivo csv completa > - userrole < aluno ou professor >
        Isso obterá os detalhes do usuário de classes especificados na associação de usuário e arquivo csv. Para o classids especificado no arquivo de dados do usuário são gerados acordo com a userrole especificado (professor ou aluno)
   . ID de usuário do parâmetro
   ID de usuário para exportar e excluir envios
   . Parâmetro classIdsFile
   Caminho completo para um arquivo de texto sem formatação que contém uma única identificação de classe em cada linha.
   exemplo de lista de classIds. Cada linha deve ter a identificação de classe única
   e81c2cd2-e3ff-4c0a-8ed0-63df43ff884c
   044b4c35-5fab-454a-9705-bc750108c059
   e81c2cd2-4c0a-e3ff-9705-bc750108c059
   . Parâmetro userrole
   Este parâmetro é usado para especificar a função do usuário a ser usado para as ids de classe presentes no classIdsFile e o usuário é removida de classe.
   outputFileName .paramter
   Este parâmetro é usado para nomear o arquivo de saída do script, sem extensões. Isso não é mandatorty por padrão, o nome do arquivo de saída é UserClassDetails
   . Anotações
   Precisamos ter a Microsoft.IdentityModel.Clients.ActiveDirectory.dll e Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll são necessários
#>
parâmetro (
    [Parâmetro (obrigatório = $true, posição = 1)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        tente {
            [System.Guid]::Parse($_) | Out-Null
            $true
        } capturar {
            joga $_
        }
    })]
    [sequência] $userId,

[parâmetro (obrigatório = $false, posição = 2)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Se (-não ($_ | Test-Path)) {
            joga "arquivo ou pasta não existe"
        }
        Se (-não ($_ | Test-Path - PathType folha)) {
            joga "o argumento classIdsFile deve ser um arquivo. Caminhos de pasta não são permitidos."
        }
        Se ($_ - notmatch "(\.txt)") {
            joga "o arquivo especificado no caminho do argumento deve ser do tipo txt"
        }
        retornar $true
    })]
    [sequência] $classIdsFile,

[Parâmetro (obrigatório = $false, posição = 3)]
    [ValidateNotNullOrEmpty()]
    [ValidateSet ('Aluno', 'Professor', ignorecase = $false)]
    [sequência] $userrole = "Aluno,"

[parâmetro (obrigatório = $false, posição = 4)]
    [ValidateNotNullOrEmpty()]
    [sequência] $outputFileName = "UserClassDetails"
)
# Carregar ADAL
Adicionar tipo-caminho ".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

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

# Saída para resumir sucesso/falha de chamadas API.
$script: getClassDetailsReport = @)

Solicitação de #Makes web e registra o status de resposta
função chamar RequestWithRetry
{
    parâmetro (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className
    )

para ($i = 1; $i-entidade legal $script: maxRetryAttempt; $i + +)
    {
        tente
        {
            $tempResult = chamar WebRequest-método obter - Uri $url-cabeçalhos $script: authHeaders
            $script: getClassDetailsReport + = [PSCustomObject] @{
                RequestUrl = $url
                Método = "Obter"
                ResponseCode = $tempResult.StatusCode
                Nome da classe = $className
                Identificação de classe = $classId
                Identificação da solicitação = $tempResult.Headers ["solicitação-id"]
                StatusDescription = $tempResult.StatusDescription
                NumberOfAttempts = $i
            }
            retornar $tempResult
        }
        capturar
        {
            if($_. Exception.Response - ne $null)
            {
                $responseCode = $_. Exception.Response.StatusCode.Value__
                $requestId = $_. Exception.Response.Headers ["solicitação-id"]
            }

            $script: getClassDetailsReport + = [PSCustomObject] @{
                RequestUrl = $url
                Método = "Obter"
                ResponseCode = $responseCode
                Nome da classe = $className
                Identificação de classe = $classId
                Identificação da solicitação = $requestId
                StatusDescription = $_. Exception.Message
                NumberOfAttempts = $i
            }            

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

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

#Get o authheaders
função Get-AuthHeaders
{
    Parâmetro (
        [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
    Se $useRefreshToken - eq ($false)
    {
        $script: authenticationResult = $authContext.AcquireToken ($graphEndpoint, $clientID, $redirectURI, $promptBehavior)
    }
    pessoa
    {
        $script: authenticationResult = $authContext.AcquireTokenByRefreshToken ($script:authenticationResult.RefreshToken, $clientId)
    }
    $authHeader = $script:authenticationResult.AccessTokenType + "" + $script:authenticationResult.AccessToken
    $headers = @{"Autorização" = $authHeader; "Tipo de conteúdo" = "Application/json"}
    retornar $headers
}

O nome do grupo de #Get
função Get-nome da classe
{
    parâmetro (
        [Parameter(Mandatory=$true)] $classId
    )

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

Detalhes de propriedade #Get id de usuário usando edu endpoit e refinar com a criação digite às atribuições de
função Get-OwnershipDetails
{
    parâmetro (
        [Parameter(Mandatory=$true)] $userId
    )
    $ownershipUrl = ("{0} / edu/usuários/{1}/ownedobjects? ' $top = 999" -f $graphEndpoint, $userId)
    $ownershipQuery = (chamar RequestWithRetry-url $ownershipUrl) | Json ConvertFrom
    $classes = $ownershipQuery.value | Where-Object {$_.creationOptions-contém "classAssignments"} | ID do objeto Select-Object, displayName
    retornar $classes
}

#Get os detalhes de associação de id de usuário usando edu ponto de extremidade e refinar com a criação digite às atribuições de
função Get-MembershipDetails
{
    parâmetro (
        [Parameter(Mandatory=$true)] $userId
    )
    $membershipUrl = ("{0} / edu/usuários/{1}/memberof? ' $top = 999" -f $graphEndpoint, $userId)
    $membershipQuery = (chamar RequestWithRetry-url $membershipUrl) | Json ConvertFrom
    $classes = $membershipQuery.value | Where-Object {$_.creationOptions-contém "classAssignments"} | ID do objeto Select-Object, displayName
    retornar $classes
}

Objeto de pscutom personalizado #Return que têm propriedades de identificação de classe, ID de usuário, nome da classe, função, getsubmissionprocessed e deletesubmissionprocessed
função Generate-ClassRecord
{
    parâmetro (
        [Parameter(Mandatory=$true)] $userId,
        [Parameter(Mandatory=$true)] $classId,
        [Parameter(Mandatory=$true)] $role,
        [Parameter(Mandatory=$false)] $displayName
    )

$classRecord = [PSCustomObject] @{
        Identificação de classe = $classId
        ID de usuário = $userId
        Nome da classe = $displayName
        Função = $role
        GetSubmissionsProcessed = $false
        DeleteSubmissionsProcessed = $false
    }

retornar $classRecord
}

$script: authHeaders = Get-AuthHeaders

# Este conterá os detalhes para todas as classes "interessantes"
$script: classDetails = @ {}

# Localizar pertencente classes (onde usuário é atualmente um professor)
tente
{
    $ownedClasses = get-OwnershipDetails - ID de usuário $userId
    foreach ($class em $ownedClasses)
    {
        Se (-não $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = gerar-ClassRecord - ID de usuário $userId - identificação de classe $class.objectId-função "Professor" - displayName $class.displayName
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
capturar
{
    Erro de gravação $_. Exception.Message
}

# Localizar unidas grupos (onde usuário é atualmente um aluno)
tente
{
    $joinedClasses = get-MembershipDetails - ID de usuário $userId
    foreach ($class em $joinedClasses)
    {
        Se (-não $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = gerar-ClassRecord - ID de usuário $userId - identificação de classe $class.objectId-função "Aluno" - displayName $class.displayName
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
capturar
{
    Erro de gravação $_. Exception.Message
}

# Encontre detalhes para os grupos adicionais do arquivo.
if(![ cadeia de caracteres]: IsNullOrEmpty($classIdsFile))
{
    $classIdsFromFile = select-String-padrão "\w"-$($classIdsFile) de caminho | ForEach-Object {
        $_. Linha
    }

foreach ($classId em $classIdsFromFile)
    {
        # Lista de classes atual do usuário tem precendence sobre o conjunto adicional de classes
        # Isto é, se já identificamos a função, não precisamos fazê-lo novamente.
        Se (-não $script: classDetails.ContainsKey($classId.Trim("")))
        {
            tente
            {
                $displayName = get-nome da classe - identificação de classe $classId
                $classRecord = gerar-ClassRecord - ID de usuário $userId - identificação de classe $classId-função $userrole - displayName $displayName
                $script:classDetails.Add ($classId, $classRecord)
            }
            capturar
            {
                Write-Host $_. Exception.Message
            }

        }
    }
}            

$script:classDetails.Values | Export-Csv-caminho.\$($outputFileName).csv - NoTypeInformation
$script: getClassDetailsReport | Export-Csv-caminho.\UserClassDetailsReport.csv - NoTypeInformation
$directoryPath = (get-Item-caminho ". \"-detalhado). FullName
Write-Host "Detalhes de classe file($($outputFileName).csv) é gerado em $directoryPath\($($outputFileName).csv)"
Write-Host "Detalhes de classe report(UserClassDetailsReport.csv) é gerado em $directoryPath\UserClassDetailsReport.csv"

Expanda suas habilidades no Office
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Office Insider

Essas informações foram úteis?

Obrigado por seus comentários!

Agradecemos pelos seus comentários! Parece que pode ser útil conectar você a um de nossos agentes de suporte do Office.

×