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

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

ส่งออก - การมอบหมาย EDU

< #
   . Synopsis
    ส่งออกข้อมูลการมอบหมาย Edu ของผู้ใช้ในชุดของประเภทที่ระบุไว้ในไฟล์ csv
    . คำอธิบาย
    สคริปต์อ่านคลาสรายละเอียดของผู้ใช้จากไฟล์ csv ป้อนข้อมูล ขอรับการมอบหมายและการส่งของแต่ละการมอบหมายงาน และสร้าง file(GetAssignmentsReport.csv) file(assignment.json) และรายงานของการมอบหมายงาน เมื่อดำเนินการดึงข้อมูลของการส่ง จะอัปเดคอลัมน์ GetSubmissionsProcessed เป็น true สำหรับชั้นเรียนที่เฉพาะเจาะจง ถ้าสคริปต์ล้มเหลวในระหว่าง เราสามารถเรียกใช้สคริปต์กับไฟล์สำหรับการป้อนค่าเดียวกัน เนื่องจากไฟล์จะถูกปรับปรุงสำหรับการลบสุดท้ายของการส่งออก
   . ตัวอย่าง
    .\Export-EduAssignments.ps1 - userClassDetailsFile <เส้นทางแบบเต็มของไฟล์ csv รายละเอียดของคลาสผู้ใช้ >
   . พารามิเตอร์ userClassDetailsFile
   นี่คือ file(userClassDetails.csv) csv ซึ่งเป็นผลลัพธ์ของสคริปต์ UserClasses.ps1 รับ ไฟล์นี้มีข้อมูลเกี่ยวกับคลาผู้ใช้และว่าดำเนินการส่งการลบและรับ ค่านี้ควรเป็นเส้นทางแบบเต็มของ file(drive:\GDPR\userClassDetails.csv)
   . บันทึกย่อ
   เราจำเป็นต้องมีการ 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
)

# โหลด 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 และการบันทึกข้อผิดพลาดของสคริปต์
ฟังก์ชัน Invoke 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 = Invoke 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, -1 $valueEndIndex $valueStartIndex)
                $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 ["คำขอ-" 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: += 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 - บรรทัด $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 = Invoke RequestWithRetry- - classId $classId - ชื่อคลาสจาก url $getAssignmentsUri $className - OperationName "GetAssignments"
        $outputstring = ""
        ถ้า ($assignments - บรรทัด $null)
        {
            $valueStartIndex = ($assignments.content.indexof('"value":') + 8)
            $valueEndIndex = $assignments.content.Length
            $valueString = $assignments.content.substring ($valueStartIndex, -1 $valueEndIndex $valueStartIndex)

            $valueString = $valueString.TrimEnd("]")
            $valueString = $valueString.TrimStart("[")
            $indexValues = (($valuestring | สตริงที่เลือก ' "classId":' - AllMatches) Matches.Index)
            เขียนโฮสต์ "Retrieved $($indexValues.count) การมอบหมายสำหรับ $className คลาส"
            $assignmentsStrings =@()
            สำหรับ ($i = 0; $indexValues.count - lt $i; $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 - eq "Student")
                {
                    $submissionsIndex = $assignmentsStrings[$i].indexof('"submissions":[')
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings .substring (0, $submissionsIndex + 15)
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings + "] } "
                }
            }
            สำหรับ ($i = 0; $assignmentsStrings.Length - lt $i; $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 = Invoke RequestWithRetry - classId $classId-url $sumbmissionsEndpoint - ชื่อคลาส $className - OperationName "GetSubmissions"
                ถ้า ($submissions - บรรทัด $null- และ $submissions Content.Length - บรรทัด 0)
                {
                    $submissionsJson = $submissions.content | ConvertFrom Json
                    เขียนโฮสต์ "$($submissionsJson.value.count) Retrieved ที่ส่งด้วยสำหรับการมอบหมายงาน $($assignmentJson.displayName)"
                    $valueStartIndex = ($submissions.content.indexof('"value":') + 9)
                    $valueEndIndex = $submissions.content.lastindexof("}")
                    $submissionsString = $submissions.content.substring ($valueStartIndex, -1 $valueEndIndex $valueStartIndex)
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings TrimEnd("]}")
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings + $submissionsString + "] } "
                }
            }

            $completeAssigmentsString = " ["
            ถ้า ($assignmentsStrings.Length - eq 0)
            {
                $completeAssigmentsString = $completeAssigmentsString + "] "
            }
            อีก
            {
                สำหรับ ($i = 0; $assignmentsStrings.Length - lt $i; $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) เส้นทาง) FullName
$directoryPath = (รายการต้น-เส้นทาง "\" -การ) FullName
$script: authHeaders =รับ AuthHeaders
$script: userClassDetails =นำเข้าไฟล์ csv $userClassDetailsFile

$progressTracker = 1
#loop ถึงแต่ละบรรทัด และรับส่งถ้าคอลัมน์ getsubmissionsprocessed เป็นเท็จ
foreach ($classDetail ใน $script: userClassDetails)
{
    ความคืบหน้าของเขียน-กิจกรรม "การมอบหมายเริ่มสำหรับผู้ใช้" -สถานะ "ประมวลผลสำหรับคลาส: $($classDetail.classId) " - เปอร์เซ็นต์ ($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 Insider

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

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

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

×