배정 스크립트-가져오기

참고:  사용자 언어로 가능한 한 빨리 가장 최신의 도움말 콘텐츠를 제공하고자 합니다. 이 페이지는 자동화를 통해 번역되었으며 문법 오류나 부정확한 설명을 포함할 수 있습니다. 이 목적은 콘텐츠가 사용자에게 유용하다는 것입니다. 이 페이지 하단의 정보가 도움이 되었다면 알려주세요. 쉽게 참조할 수 있는 영어 문서 가 여기 있습니다.

첨부 된 Get-사용자 수업에 대 한 power 셸 스크립트 파일은

< #
   . 개요
    어떤 클래스 사용자는 구성원과 해당 수업에 사용자의 사용자 역할 이란 사용자 클래스 정보를 얻을 합니다.
    . 설명
    스크립트 파일을 읽고 모든 classids 가져오기와 업데이트는 userrole와 역할 언급 했 듯이 되지 않는 경우 언급 한 학생 기본값인 배정 합니다. 그런 다음 가져오고 사용자가 소유자 클래스 및 클래스 사용자가 구성원이 됩니다. 스크립트를 구체화를 특정 클래스의 클래스 세부 정보 및 사용자의 역할을 사용 하 여 출력을 생성 합니다.
   . 예제
    .\Get-userClasses.ps1-사용자 Id < 특정 사용자 Id >
        사용자 구성원 자격에 따라 사용자 세부 정보 받게
    .\Get-userClasses.ps1-사용자 Id < 특정 사용자 Id >-classIdsFile < 완료 csv 파일 경로 >
        Csv 파일 및 사용자 구성원 자격에 지정 된 클래스의 사용자 정보 받게 userRole 매개 변수를 통과 하지는 csv 파일에 지정 된 classIds에 대 한 학생 기본값을 할당할 수는
    .\Get-userClasses.ps1-사용자 Id < 특정 사용자 Id >-classIdsFile < 완료 csv 파일 경로 >-userrole < 학생 또는 교사 >
        Csv 파일 및 사용자 구성원 자격에 지정 된 클래스의 사용자 정보를 받습니다. 파일에 지정 된 classids에 대 한 사용자 데이터 (교사 또는 학생) 지정 userrole에 따라 생성
   . 매개 변수 사용자 Id
   사용자의 사용자 Id를 내보내고 제출 삭제
   . 매개 변수 classIdsFile
   각 줄에 단일 클래스 Id를 포함 하는 일반 텍스트 파일에 전체 경로입니다.
   예제 목록 classIds입니다. 단일 클래스 Id을 사용 해야 하는 각 줄
   e81c2cd2-e3ff-4c0a-8ed0-63df43ff884c
   044b4c35-5fab-454a-9705-bc750108c059
   e81c2cd2-4c0a-e3ff-9705-bc750108c059
   . 매개 변수 userrole
   이 parmeter classIdsFile에 있는 클래스 id에 사용할 사용자와 사용자의 역할은 클래스에서 제거를 지정 하는 데 사용 됩니다.
   .paramter outputFileName
   이 매개 변수 출력 파일 확장명이 없는 스크립트의 이름을 지정 하는 데 사용 됩니다. 이 mandatorty 출력 파일 이름은 UserClassDetails 기본적으로
   . 노트
   Microsoft.IdentityModel.Clients.ActiveDirectory.dll 있어야 하 고 Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll 필요 한가요
#>
매개 변수 (
    [매개 변수 (필수 위치 $true = = 1)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        시도 {
            [System.Guid]::Parse($_) | Null 자료가
            $true
        } 확인할 수 있도록 {
            $_ throw
        }
    })]
    [문자열] $userId,

[매개 변수 (필수 위치 $false = = 2)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        하는 경우 (-Not ($_ | Test-Path)) {
            "파일 또는 폴더가 없습니다. 라는" throw
        }
        하는 경우 (-Not ($_ | Test-Path-PathType 리프)) {
            throw "classIdsFile 인수 파일 이어야 합니다. 폴더 경로 허용 되지 않습니다. "
        }
        하는 경우 ($_ 문자열이 "(\.txt)") {
            "경로 인수에 지정 된 파일 형식 txt 라는" throw
        }
        $true 반환
    })]
    [문자열] $classIdsFile,

[매개 변수 (필수 위치 $false = = 3)]
    [ValidateNotNullOrEmpty()]
    [ValidateSet ('학생', '교사' ignorecase = $false)]
    [문자열] $userrole = "학생"

[매개 변수 (필수 위치 $false = = 4)]
    [ValidateNotNullOrEmpty()]
    [문자열] $outputFileName "UserClassDetails" =
)
# ADAL 로드
형식 추가-경로 ".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

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

# 출력 API 호출의 성공/실패 요약할 수 있습니다.
$script: getClassDetailsReport = @)

#Makes 웹 요청 및 응답 상태 로그
함수 호출 RequestWithRetry
{
    매개 변수 (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className
    )

에 대 한 ($i = 1; $i-le $script: maxRetryAttempt; $i + +)
    {
        시도
        {
            $tempResult 호출 WebRequest =-$url 메서드 가져오기-Uri-머리글 $script: authHeaders
            $script: getClassDetailsReport + = [PSCustomObject] @{
                RequestUrl $url =
                메서드 "가져오기" =
                ResponseCode $tempResult.StatusCode =
                클래스 이름 $className =
                클래스 Id $classId =
                RequestId $tempResult.Headers ["id 요청"] =
                StatusDescription $tempResult.StatusDescription =
                NumberOfAttempts $i =
            }
            $tempResult 반환
        }
        확인할 수 있도록
        {
            if($_. Exception.Response 새로 $null)
            {
                $responseCode = $_ 합니다. Exception.Response.StatusCode.Value__
                $requestId = $_ 합니다. ["Id 요청"] Exception.Response.Headers
            }

            $script: getClassDetailsReport + = [PSCustomObject] @{
                RequestUrl $url =
                메서드 "가져오기" =
                ResponseCode $responseCode =
                클래스 이름 $className =
                클래스 Id $classId =
                RequestId $requestId =
                StatusDescription = $_ 합니다. Exception.Message
                NumberOfAttempts $i =
            }            

하는 경우 ($i eq $script: maxRetryAttempt)
            {
                $_를 throw 합니다. Exception.Message
            }

하는 경우 ($responseCode-eq 401)
            {
                $script: authHeaders Get AuthHeaders useRefreshToken $true =
            }
        }
    }
}

#Get은 authheaders
가져오기 AuthHeaders 작동
{
    매개 변수 (
        [Parameter(Mandatory=$false)]
        [부울] $useRefreshToken $false =
    )
    $clientId "eb2298a1-a6bb-4f16-a27a-b582815db47b" =
    $redirectURI 새로 개체 System.Uri("urn:ietf:wg:oauth:2.0:oob") =
    $promptBehavior = [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always
    $authContext 새로 개체 "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext"-ArgumentList $authString =
    하는 경우 ($useRefreshToken-eq $false)
    {
        $script: authenticationResult $authContext.AcquireToken ($graphEndpoint, $clientID, $redirectURI, $promptBehavior) =
    }
    다른
    {
        $script: authenticationResult $authContext.AcquireTokenByRefreshToken ($script:authenticationResult.RefreshToken, $clientId) =
    }
    $authHeader $script:authenticationResult.AccessTokenType = + "" + $script:authenticationResult.AccessToken
    $headers = @{"권한 부여" $authHeader; = "콘텐츠 입력" = "응용 프로그램/json"}
    $headers 반환
}

그룹 이름 #Get
가져오기-클래스 이름 함수
{
    매개 변수 (
        [Parameter(Mandatory=$true)] $classId
    )

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

Edu를 사용 하 여 사용자 id의 #Get 소유권 세부 정보 endpoit 만드는 것으로 구체화 입력 할당을
가져오기 OwnershipDetails 작동
{
    매개 변수 (
        [Parameter(Mandatory=$true)] $userId
    )
    $ownershipUrl = ("{0} / edu/사용자 / {1} / ownedobjects?'$top 999 ="-f $graphEndpoint, $userId)
    $ownershipQuery = (호출 RequestWithRetry-url $ownershipUrl) | ConvertFrom Json
    $classes $ownershipQuery.value = | Where 개체 {$_.creationOptions-"classAssignments" 포함} | 개체 선택 objectId, displayName
    $classes 반환
}

#Get edu를 사용 하 여 사용자 id의 멤버 자격 정보 끝점 만들기 구체화 입력 할당을
가져오기 MembershipDetails 작동
{
    매개 변수 (
        [Parameter(Mandatory=$true)] $userId
    )
    $membershipUrl = ("{0} / edu/사용자 / {1} / memberof?'$top 999 ="-f $graphEndpoint, $userId)
    $membershipQuery = (호출 RequestWithRetry-url $membershipUrl) | ConvertFrom Json
    $classes $membershipQuery.value = | Where 개체 {$_.creationOptions-"classAssignments" 포함} | 개체 선택 objectId, displayName
    $classes 반환
}

클래스 id, 사용자 id, 응용 프로그램 이름, 역할, getsubmissionprocessed 및 deletesubmissionprocessed 속성을가지고 있는 #Return 사용자 지정 pscutom 개체
생성 ClassRecord 작동
{
    매개 변수 (
        [Parameter(Mandatory=$true)] $userId,
        [Parameter(Mandatory=$true)] $classId,
        [Parameter(Mandatory=$true)] $role,
        [Parameter(Mandatory=$false)] $displayName
    )

$classRecord [PSCustomObject] = @{
        클래스 Id $classId =
        사용자 Id $userId =
        클래스 이름 $displayName =
        역할 $role =
        GetSubmissionsProcessed $false =
        DeleteSubmissionsProcessed $false =
    }

$classRecord 반환
}

$script: authHeaders Get AuthHeaders =

# 모든 "재미 있는" 클래스에 대 한 세부 정보를 포함할이
$script: classDetails = @ {}

# 찾기 (여기서 사용자는 현재 교사) 수업 소유
시도
{
    $ownedClasses get OwnershipDetails-사용자 Id $userId =
    foreach ($ownedClasses에서 $class)
    {
        하는 경우 (-하지 $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord 생성 ClassRecord-사용자 Id $userId-클래스 Id $class.objectId =-역할 "교사"-displayName $class.displayName
            ($class.objectId, $classRecord) $script:classDetails.Add
        }
    }
}
확인할 수 있도록
{
    쓰기 오류 $ _ 합니다. Exception.Message
}

# 찾기 (여기서 사용자는 현재 학생이) 그룹 가입
시도
{
    $joinedClasses get MembershipDetails-사용자 Id $userId =
    foreach ($joinedClasses에서 $class)
    {
        하는 경우 (-하지 $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord 생성 ClassRecord-사용자 Id $userId-클래스 Id $class.objectId =-역할 "학생"-displayName $class.displayName
            ($class.objectId, $classRecord) $script:classDetails.Add
        }
    }
}
확인할 수 있도록
{
    쓰기 오류 $ _ 합니다. Exception.Message
}

# 파일에서 추가 그룹에 대 한 세부 정보를 찾습니다.
if(![ 문자열]:: IsNullOrEmpty($classIdsFile))
{
    $classIdsFromFile = 선택 문자열-"\w" 패턴-경로 $($classIdsFile) | ForEach 개체 {
        $_. 선
    }

foreach ($classIdsFromFile에서 $classId)
    {
        # 사용자의 현재 클래스의 목록을 추가 클래스 집합이 차지 precendence
        # 역할 식별 이미는 경우, 즉, 필요가 다시 실행 합니다.
        하는 경우 (-하지 $script: classDetails.ContainsKey($classId.Trim("")))
        {
            시도
            {
                $displayName $classId 클래스-Id 받기를 클래스 이름 =
                $classRecord 생성 ClassRecord-사용자 Id $userId-클래스 Id $classId =-역할 $userrole displayName $displayName
                ($classId, $classRecord) $script:classDetails.Add
            }
            확인할 수 있도록
            {
                쓰기 호스트 $ _ 합니다. Exception.Message
            }

        }
    }
}            

$script:classDetails.Values | 내보내기 Csv-경로.\$($outputFileName).csv NoTypeInformation
$script: getClassDetailsReport | 내보내기 Csv-경로.\UserClassDetailsReport.csv NoTypeInformation
$directoryPath = (get 항목-경로 ". \"-세부 정보 표시). FullName
쓰기 호스트 "file($($outputFileName).csv) $directoryPath\($($outputFileName).csv)에 생성 되는 클래스 세부 정보"
쓰기 호스트 "report(UserClassDetailsReport.csv) $directoryPath\UserClassDetailsReport.csv에 생성 되는 클래스 세부 정보"

Office 기술 확장
교육 살펴보기
새로운 기능 우선 가져오기
Office Insider 참여

이 정보가 유용한가요?

의견 주셔서 감사합니다!

피드백을 주셔서 감사합니다. Office 지원 에이전트와 연락하는 것이 도움이 될 것 같습니다.

×