工作分派的指令碼-匯出

附註:  我們想要以您的語言,用最快的速度為您提供最新的說明內容。 本頁面是經由自動翻譯而成,因此文中可能有文法錯誤或不準確之處。讓這些內容對您有所幫助是我們的目的。希望您能在本頁底部告訴我們這項資訊是否有幫助。 此為 英文文章 出處,以供參考。

匯出-教育工作分派

< #
   .總覽
    教育工作分派資料匯出一組指定 csv 檔案中的類別中的使用者。
    .描述
    指令碼會讀取輸入的 csv 檔案中的資訊,請參閱使用者的類別詳細資料。取得工作分派和每個工作分派的送出,並產生工作分派 file(assignment.json) 和報表 file(GetAssignmentsReport.csv)。擷取的送出 」 完成時為 true 的特定類別的更新 GetSubmissionsProcessed 資料行。如果指令碼失敗之間我們可以重新執行指令碼相同的輸入檔案,因為檔案就會更新的送出的最後一個刪除。
   .範例
    .\Export-EduAssignments.ps1 userClassDetailsFile < 使用者課程詳細資料 csv 檔案的完整路徑 >
   .參數 userClassDetailsFile
   這是這是取得 UserClasses.ps1 指令碼的輸出 csv file(userClassDetails.csv)。此檔案有使用者的類別,然後是否處理刪除和取得送出資料的相關資訊。此值應該是完整路徑 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 引數必須是檔案。資料夾路徑不允許。 」
        }
        如果 ($_-notmatch 」 (\.csv) 」) {
            擲回 「 userClassDetailsFile 應該是以逗號分隔檔案],使用取得 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
函數取得 AuthHeaders
{
    參數 (
        [Parameter(Mandatory=$false)]
        [bool] $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
}

#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-eq 「 GetAssignments 」)
            {
                $valueStartIndex = ($APIResult.content.indexof('"value":') + 8)
                $valueEndIndex = $APIResult.content.Length
                $valueString = $APIResult.content.substring ($valueStartIndex $valueEndIndex $valueStartIndex-1)
                $resultCount = (($valuestring | 選取字串 「 「 classId 」: 「-AllMatches)。Matches.Count)
            }
            其他
            {
                $submissionsJson = $APIResult.content |ConvertFrom Json
                $resultCount = $submissionsJson.value.count
            }

$script: getAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                方法 = 「 取得 」
                ResponseCode = $APIResult.StatusCode
                類別名稱 = $className
                ClassId = $classId
                RequestId = $APIResult.Headers [「 要求-識別碼 」]
                StatusDescription = $APIResult.StatusDescription
                NumberOfAttempts = $i
                OperationName = $OperationName
                ResultCount = $resultCount
            }
            傳回 $APIResult
        }
        掌握
        {
            if($_.Exception.Response ne $null)
            {
                $responseCode = $_。Exception.Response.StatusCode.Value__
                $requestId = $_。[「 要求-識別碼 」] Exception.Response.Headers
            }

            $script: getAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                方法 = 「 取得 」
                ResponseCode = $responseCode
                類別名稱 = $className
                ClassId = $classId
                RequestId = $requestId
                StatusDescription = $_。Exception.Message
                NumberOfAttempts = $i
                OperationName = $OperationName
                ResultCount = $resultCount
            }            

如果 ($i eq $script: maxRetryAttempt)
            {
                引發 $_
            }

如果 ($responseCode-eq 401)
            {
                $script: authHeaders = 取得 AuthHeaders useRefreshToken $true
            }
        }
    }
}

#get 作業
函數取得工作分派
{
    參數 (
        [Parameter(Mandatory=$true)] $classDetails
    )
    請嘗試
    {
        $classId = $classDetails.ClassId
        $userId = $classDetails.UserId
        $role = $classDetails.Role
        $className = $classId
        如果 ($classDetails.ClassName ne $null-和 $classDetail.ClassName.Length ne 0)
        {
            $className = $classDetails.ClassName
        }
        $getAssignmentsUri = (「 {0}/classes('{1}')/assignments?TargetUserId = {2} & UserClassRole = {3} 」-f $educationEndpoint $classId,$userId,$role)
        $assignments = $null
        $assignments = 叫用 RequestWithRetry-url $getAssignmentsUri-classId $classId-類別名稱 $className-OperationName 「 GetAssignments 」
        $outputstring = 」 「
        如果 ($assignments-ne $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 | 選取字串 「 「 classId 」: 「-AllMatches)。Matches.Index)
            撰寫主機 」 擷取 $($indexValues.count) 工作分派的 $className 課程 「
            $assignmentsStrings = @ ()
            針對 ($i = 0; $i-lt $indexValues.count; $i + +)
            {
                如果 ($i-ne $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-eq 「 學生 」)
                {
                    $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 = 叫用 RequestWithRetry classId $classId-url $sumbmissionsEndpoint 類別名稱 $className-OperationName 「 GetSubmissions 」
                如果 ($submissions ne $null-和 $submissions。Content.Length ne 0)
                {
                    $submissionsJson = $submissions.content |ConvertFrom Json
                    撰寫主機 」 擷取 $($submissionsJson.value.count) $($assignmentJson.displayName) 工作分派的送出 」
                    $valueStartIndex = ($submissions.content.indexof('"value":') + 9)
                    $valueEndIndex = $submissions.content.lastindexof("}")
                    $submissionsString = $submissions.content.substring ($valueStartIndex $valueEndIndex $valueStartIndex-1)
                    $assignmentsStrings [$i] = $assignmentsStrings [$i]。TrimEnd("]}")
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings + $submissionsString +"]} 」
                }
            }

            $completeAssigmentsString = 」 [「
            如果 ($assignmentsStrings.Length-eq 0)
            {
                $completeAssigmentsString = $completeAssigmentsString + 「] 」
            }
            其他
            {
                針對 ($i = 0; $i-lt $assignmentsStrings.Length; $i + +)
                {
                    如果 ($i-eq $assignmentsStrings.Length-1)
                    {
                        $completeAssigmentsString = $completeAssigmentsString + $assignmentsStrings [$i] + 「] 」
                    }
                    其他
                    {
                        $completeAssigmentsString = $completeAssigmentsString + $assignmentsStrings [$i] + 」、 「
                    }
                }
            }
            $outputstring = '{」 ClassId 」: 」' + $classId + '「,」 類別名稱 」: 」' + $className +' 」、 「 工作分派 」:' + $completeAssigmentsString + '}'
            $dateTimeStamp = $(取得日期-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 = (取得項目-路徑 」。 \ 」 的詳細資訊)。全名
$script: authHeaders = 取得 AuthHeaders
$script: userClassDetails = 匯入 csv $userClassDetailsFile

$progressTracker = 1。
#loop 每行,然後如果 getsubmissionsprocessed 欄為 false,取得送出 」
foreach (在 $script $classDetail: userClassDetails)
{
    撰寫進度-活動 」 快速指派使用者的 「-狀態 「 處理類別: $($classDetail.classId) 「-PercentComplete ($progressTracker / $($ 指令碼: userClassDetails |Measure-object).count * 100)
    如果 ($classDetail.GetSubmissionsProcessed-eq"False")
    {
        撰寫主機 」 快速的工作分派 $($classDetail.ClassName) 「
        取得工作分派 classDetails $classDetail
    }
    $progressTracker + +
}

$script: getAssignmentsReport |匯出 Csv-路徑.\GetAssignmentsReport.csv NoTypeInformation
撰寫主機 」 file(GetAssignmentsReport.csv) 於 $directoryPath\GetAssignmentsReport.csv 產生的報表 」
撰寫主機 「 更新課程詳細資料 file($($directoryPathOfFile)) 和產生的更新的檔案位於 $($directoryPathOfFile) 」

增進您的 Office 技巧
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與其中一位 Office 支援專員連絡以深入了解您的意見。

×