สคริปต์การมอบหมาย - ลบ

หมายเหตุ:  เราต้องการมอบเนื้อหาวิธีใช้ปัจจุบันในภาษาของคุณให้กับคุณโดยเร็วที่สุดเท่าที่เราจะทำได้ หน้านี้ได้รับการแปลด้วยระบบอัตโนมัติ และอาจมีข้อผิดพลาดทางไวยากรณ์หรือความไม่ถูกต้อง จุดประสงค์ของเราคือเพื่อให้เนื้อหานี้มีประโยชน์กับคุณ คุณแจ้งให้เราทราบว่าข้อมูลดังกล่าวมีประโยชน์ต่อคุณที่ด้านล่างของหน้านี้ได้หรือไม่ นี่คือ บทความภาษาอังกฤษ เพื่อให้ง่ายต่อการอ้างอิง

แนบเป็นสคริปต์ shell power สำหรับลบ - การมอบหมาย EDU คลาผู้ใช้ -การมอบหมาย EDU และรับ - ส่งออก

ลบ - การมอบหมาย EDU

< #
   . Synopsis
    ลบข้อมูลการมอบหมาย Edu ของผู้ใช้ในชุดของประเภทที่ระบุไว้ในไฟล์ csv
    . คำอธิบาย
    สคริปต์อ่านคลาสรายละเอียดของผู้ใช้จากไฟล์ csv ป้อนข้อมูล ขอรับการมอบหมายและการส่งของแต่ละการมอบหมายงาน และลบที่ส่งแล้ว นอกจากนี้สร้าง file(DeleteAssignmentsReport.csv) การรายงานสำหรับข้อมูลเพิ่มเติมของข้อมูลการโทร เมื่อเสร็จสิ้นการลบส่ง จะอัปเดคอลัมน์ DeleteSubmissionsProcessed เป็น true สำหรับชั้นเรียนที่เฉพาะเจาะจง ถ้าสคริปต์ล้มเหลวในระหว่าง เราสามารถเรียกใช้สคริปต์กับไฟล์สำหรับการป้อนค่าเดียวกัน เนื่องจากไฟล์จะถูกปรับปรุงสำหรับการลบสุดท้ายของการส่งออก
   . ตัวอย่าง
    .\Delete-EduAssignments.ps1 - userClassDetailsFile <เส้นทางแบบเต็มของไฟล์ csv รายละเอียดของคลาสผู้ใช้ >
    ซึ่งจะลบส่งทั้งหมด แต่เอาข้อมูลผู้ใช้ออกจากคลา
    .\Delete-EduAssignments.ps1 - userClassDetailsFile <เส้นทางแบบเต็มของไฟล์ csv รายละเอียดของคลาสผู้ใช้ > - removeMemberFromClass
    ซึ่งจะลบส่งทั้งหมด และเอาข้อมูลผู้ใช้ออกจากคลา
   . พารามิเตอร์ userClassDetailsFile
   นี่คือ file(userClassDetails.csv) csv ซึ่งเป็นผลลัพธ์ของสคริปต์ UserClasses.ps1 รับ ไฟล์นี้มีข้อมูลเกี่ยวกับคลาผู้ใช้และว่าดำเนินการส่งการลบและรับ ค่านี้ควรเป็นเส้นทางแบบเต็มของ 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 ไม่อยู่"
        }
        ถ้า (-ไม่ ($_ | ใบไม้ - PathType Test-Path)) {
            ทิ้ง "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 และการบันทึกข้อผิดพลาดของสคริปต์
ฟังก์ชัน Invoke 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 = Invoke 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, -1 $valueEndIndex $valueStartIndex)
                $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 ["คำขอ-" id] =
                StatusDescription = $APIResult.StatusDescription
                NumberOfAttempts = $i
                OperationName = $OperationName
                ResultCount = $resultCount
            }
            ส่งกลับ $APIResult
        }
        ตรวจจับ
        {
            if($_. Exception.Response - บรรทัด $null)
            {
                $responseCode =$_ Exception.Response.StatusCode.Value__
                $requestId =$_ Exception.Response.Headers ["คำขอ-" id]
            }

            $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 เรียก-$($classDetails.ClassName) - ชื่อคลาส $($classDetails.ClassId) การ - classId ลบของ - httpmethod url $removeMemberUrl - 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 = Invoke RequestWithRetry-url $getAssignmentsUri - httpmethod $className - classId $classId - ชื่อคลาสต้น - OperationName "GetAssignments"
        ถ้า ($assignments - บรรทัด $null- และ $assignments.content - บรรทัด $null- และ $role - eq "Student"))
        {
            $assignmentsCount = ((($assignments.content) | ConvertFrom-Json) .value) .count
            เขียนโฮสต์ "Retrieved $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/education/คลา/{1} /assignments/ { 2 } /submissions/ { 3 } ?TargetUserId = { 4 } & UserClassRole = Student " -f $graphEndpoint, $classId, $assignmentId $($submission.id) $userId
                    ถ้า (($submissionsTracker - eq ($submissions ความยาว -1)) - และ ($assignmentsTracker - eq ($assignmentsCount - 1)) - ($removeMemberFromClass.IsPresent) และ)
                    {
                        เขียนโฮสต์ "ส่งการลบและ classinfo สำหรับผู้ใช้"
                        $deleteSDSSubmissionUri = $deleteSDSSubmissionUri + " & CleanupUserClassData = true "
                    }
                    $deleteResponse = Invoke RequestWithRetry-url $deleteSDSSubmissionUri - httpmethod ลบ - classId $classId - ชื่อคลาส $className - OperationName "DeleteSubmission"
                    ถ้า ($deleteResponse - บรรทัด $null-$deleteResponse.Content.Length - บรรทัดและ 0 - และ $submissionsTracker - eq ($submissions ความยาว -1))
                    {
                        $classDetail.DeleteSubmissionsProcessed = "true"
                        $script: userClassDetails | ส่งออก Csv-เส้นทาง $($directoryPathOfFile) - NoTypeInformation-บังคับให้
                    }
                    $submissionsTracker ++
                }
                $assignmentsTracker ++
            }
        }
    }
    ตรวจจับ
    {   
        ทิ้ง$_
    }
}

$directoryPathOfFile = (รายการต้น-$($userClassDetailsFile) เส้นทาง) FullName
$script: authHeaders =รับ AuthHeaders
$script: userClassDetails =นำเข้าไฟล์ csv $userClassDetailsFile

$progressTracker = 0
foreach ($classDetail ใน $script: userClassDetails)
{
    ความคืบหน้าของเขียน-กิจกรรม "ลบการมอบหมายสำหรับผู้ใช้" -สถานะ "ประมวลผลสำหรับคลาส: $classDetail.classId " - เปอร์เซ็นต์ ($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 = (รายการต้น-เส้นทาง "\" -การ) FullName
$script: deleteAssignmentsReport | ส่งออก Csv-เส้นทาง.\DeleteAssignmentsReport.csv - NoTypeInformation-บังคับให้
เขียนโฮสต์ "รายงาน file(DeleteAssignmentsReport.csv) จะถูกสร้างขึ้นที่ $directoryPath\DeleteAssignmentsReport.csv"
เขียนโฮสต์ "คลาสปรับปรุงรายละเอียด file($($directoryPathOfFile)) และไฟล์ที่อัปเดตแล้วสร้างขึ้นมา $($directoryPathOfFile)"

ขยายทักษะ Office ของคุณ
สำรวจการฝึกอบรม
รับฟีเจอร์ใหม่ก่อนใคร
เข้าร่วม Office Insider

ข้อมูลนี้เป็นประโยชน์หรือไม่

ขอบคุณสำหรับคำติชมของคุณ!

ขอขอบคุณสำหรับคำติชมของคุณ! เราคิดว่าอาจเป็นประโยชน์ที่จะให้คุณได้ติดต่อกับหนึ่งในตัวแทนฝ่ายสนับสนุน Office ของเรา

×