工作分派的指令碼-刪除

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

附加刪除-教育作業、 匯出-教育工作分派與取得-使用者類別是 power 殼層指令碼。

刪除-教育工作分派

< #
   .總覽
    刪除一組指定 csv 檔案中的類別中的使用者教育工作分派的資料。
    .描述
    指令碼會讀取輸入的 csv 檔案中的資訊,請參閱使用者的類別詳細資料。取得工作分派和每個工作分派的送出,然後刪除 [送出資料,也會產生報表 file(DeleteAssignmentsReport.csv) 通話資訊的額外資訊。完成的送出刪除為 true 的特定類別的更新 DeleteSubmissionsProcessed 資料行。如果指令碼失敗之間我們可以重新執行指令碼相同的輸入檔案,因為檔案就會更新的送出的最後一個刪除。
   .範例
    .\Delete-EduAssignments.ps1 userClassDetailsFile < 使用者課程詳細資料 csv 檔案的完整路徑 >
    這將會刪除所有送出 」,但不會移除類別的使用者資訊
    .\Delete-EduAssignments.ps1-userClassDetailsFile < 使用者課程詳細資料 csv 檔案的完整路徑 > removeMemberFromClass
    這會刪除所有送出 」,並從類別中移除的使用者資訊
   .參數 userClassDetailsFile
   這是這是取得 UserClasses.ps1 指令碼的輸出 csv file(userClassDetails.csv)。此檔案有使用者的類別,然後是否處理刪除和取得送出資料的相關資訊。此值應該是完整路徑 file(drive:\GDPR\userClassDetails.csv)
   .切換參數 removeMemberFromClass
   我們使用此參數時,會移除使用者資訊的每個類別
   .備忘稿
   我們需要有 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,

[parameter(Mandatory=$false)]
    [切換] $removeMemberFromClass
)
# 載入 ADAL
新增類型-路徑 」.\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll 」
$educationEndpoint = 「 https://graph.microsoft.com/beta/education/ 」
$script: userClassDetails = @ ()
$script: deleteAssignmentsReport = @ ()
$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=$true)][ValidateSet (「 取得 」,「 刪除 」,ignorecase = $true)] $httpmethod,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className,
        [Parameter(Mandatory=$true)] $OperationName
    )

針對 ($i = 1; $i-le $script: maxRetryAttempt; $i + +)
    {
        請嘗試
        {
            $APIResult = 叫用 WebRequest-方法 $httpmethod 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: deleteAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                方法 = $httpmethod
                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: deleteAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                方法 = $httpmethod
                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
            }
        }
    }
}

從課程 #Remove 成員
函數移除 MemberFromClass
{
    參數 (
        [Parameter(Mandatory=$true)] $classDetails
    )

$removeMemberUrl ="{0}/v1.0/groups/{1}/members/{2}/'$ref 「 f $graphEndpoint、 $($classDetails.ClassId)、 $($classDetails.UserId)
    請嘗試
    {
        呼叫 RequestWithRetry-url $removeMemberUrl-httpmethod 刪除-classId $($classDetails.ClassId)-類別名稱 $($classDetails.ClassName)-OperationName 「 RemoveMemberfromClass 」 |輸出 Null
    }
    掌握
    {
        引發 $_
    }

}    

函數刪除作業
{
    參數 (
        [Parameter(Mandatory=$true)] $classDetail
    )

請嘗試
    {
        $classId = $classDetail.ClassId
        $className = $classDetail.ClassName
        $userId = $classDetail.UserId
        $role = $classDetail.Role
        $getAssignmentsUri = (「 {0}/classes('{1}')/assignments?TargetUserId = {2} & UserClassRole = {3} 」-f $educationEndpoint $classId,$userId,$role)
        $assignments = $null
        $assignments = 叫用 RequestWithRetry-url $getAssignmentsUri httpmethod 取得-classId $classId 類別名稱 $className-OperationName 「 GetAssignments 」
        如果 ($assignments ne $null-和 $assignments.content ne $null-和 $role eq 「 學生 」))
        {
            $assignmentsCount = ((($assignments.content) |ConvertFrom-Json).value).count
            撰寫主機 」 擷取 $assignmentsCount $className 類別的工作分派 」
            $assignmentsTracker = 0
            foreach (在 $assignment (($assignments.content) |ConvertFrom-Json).value)
            {
                $assignmentName = $assignment.displayName
                $assignmentId = $assignment.id
                $submissions = $assignment.submissions
                撰寫主機 」 刪除送 $($assignmentName) 」
                $submissionsTracker = 0
                foreach ($submission 中 $submissions)
                {
                    $deleteSDSSubmissionUri = 」 {0}/beta/教育/類別/{1} /assignments/ {2} /submissions/ {3} ?TargetUserId = {4} & UserClassRole = 學生 」-f $graphEndpoint,$classId $assignmentId、 $($submission.id)、 $userId
                    如果 (($submissionsTracker eq ($submissions。長度-1))-和 ($assignmentsTracker-eq ($assignmentsCount-1))-和 ($removeMemberFromClass.IsPresent))
                    {
                        撰寫主機 」 刪除提交和使用者 classinfo 「
                        $deleteSDSSubmissionUri = $deleteSDSSubmissionUri + 「 & CleanupUserClassData = true,則 「
                    }
                    $deleteResponse = 叫用 RequestWithRetry-url $deleteSDSSubmissionUri httpmethod 刪除-classId $classId 類別名稱 $className-OperationName 「 DeleteSubmission 」
                    如果 ($deleteResponse ne $null-和 $deleteResponse.Content.Length ne 0-和 $submissionsTracker eq ($submissions。長度-1))
                    {
                        $classDetail.DeleteSubmissionsProcessed ="True"
                        $script: userClassDetails |匯出 Csv-路徑 $($directoryPathOfFile) NoTypeInformation-強制
                    }
                    $submissionsTracker + +
                }
                $assignmentsTracker + +
            }
        }
    }
    掌握
    {   
        引發 $_
    }
}

$directoryPathOfFile = (取得項目-路徑 $($userClassDetailsFile))。全名
$script: authHeaders = 取得 AuthHeaders
$script: userClassDetails = 匯入 csv $userClassDetailsFile

$progressTracker = 0;
foreach (在 $script $classDetail: userClassDetails)
{
    撰寫進度-活動 」 刪除指派使用者的 「-狀態 「 處理類別: $classDetail.classId 」-PercentComplete ($progressTracker/$script:userClassDetails.count * 100)
    如果 ($classDetail.DeleteSubmissionsProcessed-eq"False")
    {
        請嘗試
        {
            if($removeMemberFromClass.IsPresent)
            {
                撰寫主機 「 刪除使用者從 $($classDetail.ClassName) 」
                移除 MemberFromClass classDetails $classDetail
            }
            撰寫主機 」 刪除作業的使用者使用 $($classDetails.ClassName) 「
            刪除作業 classDetails $classDetail
        }
        掌握
        {
            寫入錯誤 $ _。Exception.Message
        }
    }
    $progressTracker + +
}

$directoryPath = (取得項目-路徑 」。 \ 」 的詳細資訊)。全名
$script: deleteAssignmentsReport |匯出 Csv-路徑.\DeleteAssignmentsReport.csv NoTypeInformation-強制
撰寫主機 」 file(DeleteAssignmentsReport.csv) 於 $directoryPath\DeleteAssignmentsReport.csv 產生的報表 」
撰寫主機 「 更新課程詳細資料 file($($directoryPathOfFile)) 和產生的更新的檔案位於 $($directoryPathOfFile) 」

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

這項資訊有幫助嗎?

感謝您的意見反應!

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

×