割り当てのスクリプトの削除

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

削除 - EDU 割り当て、ユーザー クラスのエクスポート - EDU 割り当てと取得 - power シェル スクリプトは、接続されているです。

削除 - EDU 割り当て

< #
   .概要
    Csv ファイルで指定されたクラスのセット内のユーザーの Edu 割り当てデータを削除します。
    .説明
    入力 csv ファイルからユーザーのクラスの詳細を読み込みます。課題割り当てごとの送信を理解する、提出を削除し、呼び出し情報の追加情報のレポート file(DeleteAssignmentsReport.csv) を生成します。送信の削除が完了したら、その特定のクラスの true に DeleteSubmissionsProcessed 列を更新します。スクリプトが間に失敗した場合、同じ入力ファイルをスクリプトを実行して、ファイルが送信の最後の削除を更新するためおできます。
   .例
    < ユーザー クラス詳細 csv ファイルの完全なパス > を.\Delete-EduAssignments.ps1 userClassDetailsFile
    これはすべての送信が削除されますが、クラスからユーザーの情報は削除されません
    .\Delete-EduAssignments.ps1 userClassDetailsFile < ユーザー クラス詳細 csv ファイルの完全なパス > - removeMemberFromClass
    すべての送信を削除し、ユーザー情報を削除するクラスから
   .パラメーター userClassDetailsFile
   Get UserClasses.ps1 スクリプトの出力は csv file(userClassDetails.csv) です。このファイルでは、ユーザーのクラスや削除、および get 提出を処理するかどうかの情報があります。この値は、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 引数はファイルである必要があります。フォルダーのパスは使用できません。"
        }
        場合 ($_ - 沿って"(\.csv)") {
            「、userClassDetailsFile が Get 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
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=$true)][ValidateSet ('Get'、'Delete'、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 示します"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: deleteAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                メソッド = $httpmethod
                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: deleteAssignmentsReport + = [PSCustomObject] @{
                RequestUrl = $url
                メソッド = $httpmethod
                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
            }
        }
    }
}

クラスからメンバーを #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 削除 - クラス Id $($classDetails.ClassId) - クラス名 $($classDetails.ClassName) _"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-$className - クラス Id $classId - クラス名を取得する url $getAssignmentsUri httpmethod _"GetAssignments"
        場合 ($assignments が使って $null- と $assignments.content が使って $null- と $role 示します「学生」))
        {
            $assignmentsCount = ((($assignments.content) |ConvertFrom-Json) お) .count
            書き込みホスト「$className クラスの取得 $assignmentsCount 割り当て」
            $assignmentsTracker = 0
            foreach (で $assignment (($assignments.content) |ConvertFrom-Json) お)
            {
                $assignmentName = $assignment.displayName
                $assignmentId = $assignment.id
                $submissions = $assignment.submissions
                書き込みホスト「$($assignmentName) の送信を削除すると、」
                $submissionsTracker = 0
                foreach ($submissions で $submission)
                {
                    $deleteSDSSubmissionUri ="{0}/β/教育機関向け/クラス/{1}/assignments/{2}/submissions/{3} ?TargetUserId = {4} & UserClassRole 学生 ="f $graphEndpoint、$classId、$assignmentId、$($submission.id)、$userId
                    場合 (($submissionsTracker 示します ($submissions します。長さ-1))- と ($assignmentsTracker 示します ($assignmentsCount - 1))- と ($removeMemberFromClass.IsPresent))
                    {
                        書き込みホスト「を削除すると送信とユーザーの classinfo」
                        $deleteSDSSubmissionUri = $deleteSDSSubmissionUri +"& CleanupUserClassData = true"
                    }
                    $deleteResponse = 呼び出し RequestWithRetry-url $deleteSDSSubmissionUri httpmethod $className を-クラス Id $classId クラス名を削除する _"DeleteSubmission"
                    場合 ($deleteResponse が使って $null- と $deleteResponse.Content.Length 新しい 0 - と $submissionsTracker 示します ($submissions します。長さ-1))
                    {
                        $classDetail.DeleteSubmissionsProcessed ="true"
                        $script: userClassDetails |エクスポート Csv-パス $($directoryPathOfFile) - NoTypeInformation-強制
                    }
                    $submissionsTracker + +
                }
                $assignmentsTracker + +
            }
        }
    }
    検出
    {   
        スロー $_
    }
}

$directoryPathOfFile = (取得する項目のパス $($userClassDetailsFile))。フルネーム
$script: authHeaders = Get AuthHeaders
$script: userClassDetails = $userClassDetailsFile - csv のインポート

$progressTracker = 0 になります。
foreach ($script で $classDetail: userClassDetails)
{
    書き込み、進行中のアクティビティの「ユーザーの設定を削除すると、」-状態"クラスの処理: $classDetail.classId"の達成率 ($progressTracker/$script:userClassDetails.count * 100)
    場合 ($classDetail.DeleteSubmissionsProcessed 示します"False")
    {
        試して
        {
            if($removeMemberFromClass.IsPresent)
            {
                書き込みホスト「$($classDetail.ClassName) からユーザーを削除すると、」
                削除 MemberFromClass-classDetails $classDetail
            }
            書き込みホスト「$($classDetails.ClassName) のユーザーの割り当てを削除すると、」
            削除割り当て-classDetails $classDetail
        }
        検出
        {
            書き込みエラー $ _ します。Exception.Message
        }
    }
    $progressTracker + +
}

$directoryPath = (get アイテムのパス". \"-詳細)。フルネーム
$script: deleteAssignmentsReport |エクスポート Csv-パス.\DeleteAssignmentsReport.csv - NoTypeInformation-強制
書き込みホスト「レポート file(DeleteAssignmentsReport.csv) が $directoryPath\DeleteAssignmentsReport.csv で生成される」
書き込みホスト「更新クラス file($($directoryPathOfFile)) の詳細し、$($directoryPathOfFile) では、更新されたファイルが生成される」

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

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

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

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

×