割り当てのスクリプトのエクスポート

注:  最新のヘルプ コンテンツをできるだけ早く、お客様がお使いの言語で提供したいと考えております。 このページは、自動翻訳によって翻訳されているため、文章校正のエラーや不正確な情報が含まれている可能性があります。私たちの目的は、このコンテンツがお客様の役に立つようにすることです。お客様にとって役立つ情報であったかどうかを、このページの下部でお知らせください。 簡単に参照できるように、こちらに 英語の記事 があります。

ファイルのエクスポート - EDU 割り当て

< #
   .概要
    Csv ファイルで指定されたクラスのセット内のユーザーの Edu 割り当てデータをエクスポートします。
    .説明
    入力 csv ファイルからユーザーのクラスの詳細を読み込みます。課題割り当てごとの送信を理解して、割り当て file(assignment.json) とレポート file(GetAssignmentsReport.csv) が生成されます。許可申請の抽出が完了したら、その特定のクラスの true に GetSubmissionsProcessed 列を更新します。スクリプトが間に失敗した場合、同じ入力ファイルをスクリプトを実行して、ファイルが送信の最後の削除を更新するためおできます。
   .例
    < ユーザー クラス詳細 csv ファイルの完全なパス > を.\Export-EduAssignments.ps1 userClassDetailsFile
   .パラメーター userClassDetailsFile
   Get UserClasses.ps1 スクリプトの出力は csv file(userClassDetails.csv) です。このファイルでは、ユーザーのクラスや削除、および get 提出を処理するかどうかの情報があります。この値は、file(drive:\GDPR\userClassDetails.csv) の完全なパス
   .ノート
   [Microsoft.IdentityModel.Clients.ActiveDirectory.dll が必要し、Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll が必要な
#>
パラメーター (
    [parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        場合 (のない ($_ |Test-Path)) {
            スロー「、userClassDetailsFile 存在しません」
        }
        場合 (のない ($_ |Test-Path - PathType リーフ)) {
            スロー"userClassDetailsFile 引数はファイルである必要があります。フォルダーのパスは使用できません。"
        }
        場合 ($_ - 沿って"(\.csv)") {
            「、userClassDetailsFile が Get UserClasses.ps1 を使用して生成された、カンマ区切りファイルである必要があります」が破棄
        }
        返す $true
    })]
    [文字列] $userClassDetailsFile
)

# ADAL を読み込む
種類の追加-パス".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
$educationEndpoint ="https://graph.microsoft.com/beta/education/"
$script: userClassDetails = @ ()
$script: getAssignmentsReport = @ ()
$script: maxRetryAttempt = 3
$script: authHeaders = $null
$script: authenticationResult = $null
$graphEndpoint ="https://graph.microsoft.com"
$authString ="https://login.windows.net/common"

#Get、authheaders
Get 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"られなかった $authString
    場合 ($useRefreshToken 示します $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 を返す
}

#Retry ロジックとスクリプト エラーのログ
関数呼び出し RequestWithRetry
{
    パラメーター (
        [Parameter(Mandatory=$true)] $url
        [Parameter(Mandatory=$false)] $classId、
        [Parameter(Mandatory=$false)] $className、
        [Parameter(Mandatory=$true)] $OperationName
    )

($i = 1 $i-le $script: maxRetryAttempt; $i + +)
    {
        試して
        {
            $APIResult = 呼び出し WebRequest-取得 Uri $url-ヘッダー $script: authHeaders
            $resultCount = 0
            場合 ($OperationName 示します"GetAssignments")
            {
                $valueStartIndex = ($APIResult.content.indexof('"value":') + 8)
                $valueEndIndex = $APIResult.content.Length
                $valueString $APIResult.content.substring ($valueStartIndex、$valueEndIndex $valueStartIndex-1) =
                $resultCount = (($valuestring | 選択文字列 ' クラス"Id":' - AllMatches)。Matches.Count)
            }
            他
            {
                $submissionsJson = $APIResult.content |ConvertFrom Json
                $resultCount = $submissionsJson.value.count
            }

$script: getAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                メソッドの取得"=
                ResponseCode = $APIResult.StatusCode
                クラス名 = $className
                クラス Id = $classId
                要求 Id $APIResult.Headers ["要求 id"] =
                StatusDescription = $APIResult.StatusDescription
                NumberOfAttempts = $i
                OperationName = $OperationName
                ResultCount = $resultCount
            }
            $APIResult を返す
        }
        検出
        {
            if($_.Exception.Response - 新しい $null)
            {
                $responseCode = $_ します。Exception.Response.StatusCode.Value__
                $requestId = $_ します。["要求 id"] Exception.Response.Headers
            }

            $script: getAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                メソッドの取得"=
                ResponseCode = $responseCode
                クラス名 = $className
                クラス Id = $classId
                要求 Id = $requestId
                StatusDescription = $_ します。Exception.Message
                NumberOfAttempts = $i
                OperationName = $OperationName
                ResultCount = $resultCount
            }            

場合 ($i 示します $script: maxRetryAttempt)
            {
                スロー $_
            }

場合 ($responseCode 示します 401)
            {
                $script: authHeaders = $true を取得する AuthHeaders useRefreshToken
            }
        }
    }
}

#get 割り当て
Get 割り当て機能
{
    パラメーター (
        [Parameter(Mandatory=$true)] $classDetails
    )
    試して
    {
        $classId = $classDetails.ClassId
        $userId = $classDetails.UserId
        $role = $classDetails.Role
        $className = $classId
        場合 ($classDetails.ClassName が使って $null- と $classDetail.ClassName.Length が使って 0)
        {
            $className = $classDetails.ClassName
        }
        $getAssignmentsUri = ("{0}/classes('{1}')/assignments?TargetUserId = {2} & UserClassRole = {3}"-f $educationEndpoint、$classId、$userId、$role)
        $assignments = $null
        $assignments = 呼び出し RequestWithRetry-url $getAssignmentsUri - クラス Id $classId - クラス名 $className _"GetAssignments"
        $outputstring =""
        場合 ($assignments 新しい $null)
        {
            $valueStartIndex = ($assignments.content.indexof('"value":') + 8)
            $valueEndIndex = $assignments.content.Length
            $valueString $assignments.content.substring ($valueStartIndex、$valueEndIndex $valueStartIndex-1) =

            $valueString = $valueString.TrimEnd("]")
            $valueString = $valueString.TrimStart("[")
            $indexValues = (($valuestring | 選択文字列 ' クラス"Id":' - AllMatches)。Matches.Index)
            書き込みホスト"取得 $($indexValues.count) 割り当て $className クラスの"
            $assignmentsStrings = @ ()
            ($i = 0; $i - lt $indexValues.count; $i + +)
            {
                場合 ($i が使って $indexValues.count-1)
                {
                    $assignmentsStrings = $valueString.substring (($indexValues [$i]-1)、($indexValues [$i + 1] ~ $indexValues [$i]-1))
                }
                他
                {
                    $assignmentsStrings = $valueString.substring(($indexValues[$i]-1)、($valueString.Length - $indexValues [$i] +1))
                }

                場合 ($role 示します「学生」)
                {
                    $submissionsIndex = $assignmentsStrings[$i].indexof('"submissions":[')
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings .substring (0 $submissionsIndex + 15)
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings +"]}"
                }
            }
            ($i = 0; $i - lt $assignmentsStrings.Length; $i + +)
            {
                $assignmentString $assignmentsStrings [$i] =
                $assignmentJson = $assignmentString |ConvertFrom Json
                $assignmentId = $assignmentJson.id
                書き込みホスト「$($assignmentJson.displayName) 割り当ての取得発信」
                $sumbmissionsEndpoint = ("{0}/classes('{1}')/assignments('{2}')/submissions?TargetUserId = {3} & UserClassRole = {4}"f $educationEndpoint、$classId、$assignmentId、$userId $role)
                $submissions = $classId を呼び出し RequestWithRetry クラス Id-$className を url $sumbmissionsEndpoint クラス名 _"GetSubmissions"
                場合 ($submissions が使って $null-$submissions とします。0 を Content.Length が使って)
                {
                    $submissionsJson = $submissions.content |ConvertFrom Json
                    書き込みホスト「$($assignmentJson.displayName) 割り当ての取得 $($submissionsJson.value.count) 送信」
                    $valueStartIndex = ($submissions.content.indexof('"value":') + 9)
                    $valueEndIndex = $submissions.content.lastindexof("}")
                    $submissionsString $submissions.content.substring ($valueStartIndex、$valueEndIndex $valueStartIndex-1) =
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings します。TrimEnd("]}")
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings + $submissionsString +"]}"
                }
            }

            $completeAssigmentsString ="["
            場合 ($assignmentsStrings.Length 示します 0)
            {
                $completeAssigmentsString = $completeAssigmentsString +"]"
            }
            他
            {
                ($i = 0; $i - lt $assignmentsStrings.Length; $i + +)
                {
                    場合 ($i 示します $assignmentsStrings.Length-1)
                    {
                        $completeAssigmentsString = $completeAssigmentsString + $assignmentsStrings [$i] +"]"
                    }
                    他
                    {
                        $completeAssigmentsString = $completeAssigmentsString + $assignmentsStrings [$i] +「,」
                    }
                }
            }
            $outputstring = '{"クラス Id":"' $classId + + '「,」クラス名":"' $className + +'「,」割り当て":' $completeAssigmentsString + +'}'
            $dateTimeStamp = $(get 日付 f yyyy-MM-dd)
            $fileName $directoryPath +「\」$className +「_」+ $userId +「_」+ $dateTimeStamp +".json"=
            $outputstring |出力ファイルの $fileName
            書き込み Host("Assignments file for $className is generated at $fileName")
            $classDetails.GetSubmissionsProcessed ="true"
            $script: userClassDetails |エクスポート Csv-パス $($directoryPathOfFile) - NoTypeInformation-強制
        }
    }
    検出
    {
        書き込みエラー $ _ します。Exception.Message
    }

}                                           

$directoryPathOfFile = (取得する項目のパス $($userClassDetailsFile))。フルネーム
$directoryPath = (get アイテムのパス". \"-詳細)。フルネーム
$script: authHeaders = Get AuthHeaders
$script: userClassDetails = $userClassDetailsFile - csv のインポート

$progressTracker = 1 です。
各 #loop の行し、getsubmissionsprocessed 列が false の場合は、送信を取得する
foreach ($script で $classDetail: userClassDetails)
{
    書き込み、進行中の「ユーザーの割り当てを取得する」のアクティビティ-状態"クラスの処理: $($classDetail.classId)"の達成率 ($progressTracker/$($スクリプト: userClassDetails |Measure-object) .count * 100)
    場合 ($classDetail.GetSubmissionsProcessed 示します"False")
    {
        書き込みホスト「$($classDetail.ClassName) の作業割り当て」
        Get 割り当て-classDetails $classDetail
    }
    $progressTracker + +
}

$script: getAssignmentsReport |エクスポート Csv-パス.\GetAssignmentsReport.csv - NoTypeInformation
書き込みホスト「レポート file(GetAssignmentsReport.csv) が $directoryPath\GetAssignmentsReport.csv で生成される」
書き込みホスト「更新クラス file($($directoryPathOfFile)) の詳細し、$($directoryPathOfFile) では、更新されたファイルが生成される」

Office のスキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×