ได้รับมอบหมายสคริปต์-

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

แนบสคริปต์ shell power มีไว้สำหรับต้น - คลาผู้ใช้

< #
   . Synopsis
    รับข้อมูลคลาผู้ใช้เหมือนกับในคลาที่ผู้ใช้เป็นสมาชิกและบทบาทของผู้ใช้ของผู้ใช้ในคลาเหล่านั้นคืออะไร
    . คำอธิบาย
    สคริปต์อ่านไฟล์ และรับ classids ทั้งหมด และอัปเดบทบาทกับ userrole กล่าวถึง หากคุณ ไม่เห็นกล่าวถึงกำหนดให้กับนักเรียนซึ่งเป็นค่าเริ่มต้น จาก นั้นจะได้เรียนที่ผู้ใช้เป็นเจ้าของและคลาที่เป็นสมาชิกของผู้ใช้ สคริปต์ refines และสร้างผลลัพธ์ ด้วยรายละเอียดคลาสและบทบาทของผู้ใช้ในชั้นเรียนที่เฉพาะเจาะจง
   . ตัวอย่าง
    .\Get-userClasses.ps1 - userId <เฉพาะผู้ใช้ Id >
        ซึ่งจะได้รับรายละเอียดผู้ใช้ตามการเป็นสมาชิกของผู้ใช้
    .\Get-userClasses.ps1 - userId <เฉพาะผู้ใช้ Id > - classIdsFile <เส้นทางไฟล์ csv เสร็จสมบูรณ์ >
        ซึ่งจะช่วยผู้ใช้รายละเอียดของประเภทที่ระบุไว้ในไฟล์ csv ไฟล์และผู้ใช้เป็นสมาชิก ถ้าเราไม่ผ่านพารามิเตอร์ userRole นั้นจะถูกกำหนดให้เป็นค่าเริ่มต้นสำหรับนักเรียนสำหรับ classIds ระบุไว้ในไฟล์ csv
    .\Get-userClasses.ps1 - userId <เฉพาะผู้ใช้ Id > - classIdsFile <เส้นทางไฟล์ csv เสร็จสมบูรณ์ > - userrole < Student หรือครู >
        ซึ่งจะช่วยผู้ใช้รายละเอียดของประเภทที่ระบุในการเป็นสมาชิกของผู้ใช้และไฟล์ csv สำหรับ classids ระบุไว้ในไฟล์ ข้อมูลของผู้ใช้ถูกสร้างขึ้นตาม userrole ระบุ (สำหรับคุณครูหรือ Student)
   . พารามิเตอร์ userId
   UserId ของผู้ใช้การส่งออก และลบส่ง
   . พารามิเตอร์ classIdsFile
   เส้นทางแบบเต็มไปยังไฟล์ข้อความธรรมดาซึ่งประกอบด้วย classId แบบเดียวในแต่ละบรรทัด
   รายการตัวอย่างของ classIds แต่ละบรรทัดควรมี classId เดียว
   e81c2cd2-e3ff-4c0a-8ed0-63df43ff884c
   044b4c35-5fab-454a-9705-bc750108c059
   e81c2cd2-4c0a-e3ff-9705-bc750108c059
   . พารามิเตอร์ userrole
   Parmeter นี้ถูกใช้เพื่อระบุบทบาทของผู้ใช้ที่จะใช้สำหรับการนำเสนอใน classIdsFile id ของคลาสและผู้ใช้จะถูกเอาออกจากคลาส
   .paramter outputFileName
   พารามิเตอร์นี้จะใช้การตั้งชื่อไฟล์ผลลัพธ์ของสคริปต์ ไม่มีนามสกุล ไม่ใช่ mandatorty ตามค่าเริ่มต้น ชื่อแฟ้มผลลัพธ์คือ UserClassDetails
   . บันทึกย่อ
   เราจำเป็นต้องมีการ Microsoft.IdentityModel.Clients.ActiveDirectory.dll และจำเป็นต้องมี Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll
#>
เวอร์ชันพารามิเตอร์ (
    [พารามิเตอร์ (บังคับ = $true ตำแหน่ง = 1)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        ลอง {
            [System.Guid]::Parse($_) | ออก Null
            $true
        } ตรวจจับ {
            ทิ้ง$_
        }
    })]
    [สตริงที่] $userId

[พารามิเตอร์ (บังคับ = $false ตำแหน่ง = 2)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        ถ้า (-ไม่ ($_ | Test-Path)) {
            ทิ้ง "ไฟล์หรือโฟลเดอร์ไม่อยู่"
        }
        ถ้า (-ไม่ ($_ | ใบไม้ - PathType Test-Path)) {
            ทิ้ง "classIdsFile อาร์กิวเมนต์ต้องเป็นไฟล์ เส้นทางของโฟลเดอร์จะไม่ได้"
        }
        ถ้า ($_ - notmatch "(\.txt)") {
            ทิ้ง "แฟ้มที่ระบุในเส้นทางอาร์กิวเมนต์ต้องเป็นชนิด txt"
        }
        ส่งกลับ $true
    })]
    [สตริงที่] $classIdsFile

[พารามิเตอร์ (บังคับ = $false ตำแหน่ง = 3)]
    [ValidateNotNullOrEmpty()]
    [ValidateSet ('Student' 'ครู' ignorecase = $false)]
    [สตริงที่] $userrole = "Student"

[พารามิเตอร์ (บังคับ = $false ตำแหน่ง = 4)]
    [ValidateNotNullOrEmpty()]
    [สตริงที่] $outputFileName = "UserClassDetails"
)
# โหลด ADAL
เพิ่มชนิด-เส้นทาง ".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

$script: maxRetryAttempt = 3
$script: authenticationResult = $null
$graphEndpoint = "https://graph.microsoft.com"
$authString = "https://login.windows.net/common"

# ผลลัพธ์จะสรุปความสำเร็จ/ล้มเหลวของ API สายเรียกเข้า
$script: getClassDetailsReport =@()

ร้องขอ #Makes เว็บ และเข้าสู่สถานะการตอบสนอง
ฟังก์ชัน Invoke RequestWithRetry
{
    เวอร์ชันพารามิเตอร์ (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className
    )

สำหรับ ($i = 1; $i-le $script: maxRetryAttempt; $i ++)
    {
        ลอง
        {
            $tempResult = Invoke WebRequest-วิธีรับ - Uri $url-หัว $script: authHeaders
            $script: += getClassDetailsReport [PSCustomObject] @{
                RequestUrl = $url
                วิธี = "รับ"
                ResponseCode = $tempResult.StatusCode
                ชื่อคลาส = $className
                ClassId = $classId
                RequestId $tempResult.Headers ["คำขอ-" id] =
                StatusDescription = $tempResult.StatusDescription
                NumberOfAttempts = $i
            }
            ส่งกลับ $tempResult
        }
        ตรวจจับ
        {
            if($_. Exception.Response - บรรทัด $null)
            {
                $responseCode =$_ Exception.Response.StatusCode.Value__
                $requestId =$_ Exception.Response.Headers ["คำขอ-" id]
            }

            $script: += getClassDetailsReport [PSCustomObject] @{
                RequestUrl = $url
                วิธี = "รับ"
                ResponseCode = $responseCode
                ชื่อคลาส = $className
                ClassId = $classId
                RequestId = $requestId
                StatusDescription =$_ Exception.Message
                NumberOfAttempts = $i
            }            

ถ้า ($i - eq $script: maxRetryAttempt)
            {
                ทิ้ง$_ Exception.Message
            }

ถ้า ($responseCode - eq 401)
            {
                $script: authHeaders = AuthHeaders ต้น - useRefreshToken $true
            }
        }
    }
}

#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
}

ในกลุ่มชื่อ #Get
ฟังก์ชันชื่อคลาสรับ
{
    เวอร์ชันพารามิเตอร์ (
        [Parameter(Mandatory=$true)] $classId
    )

$getClassDetailsUrl = "{0}/v1.0/groups/{1 }" -f $graphEndpoint, $classId
    $getClassDetailsResult = (Invoke RequestWithRetry-url $getClassDetailsUrl) | ConvertFrom Json
    $className = $getclassDetailsResult.displayName
    ส่งกลับ $className
}

รายละเอียดความเป็นเจ้าของ #Get ของ id ผู้ใช้ที่ใช้ edu endpoit และปรับปรุง ด้วยการสร้างชนิดการมอบหมาย
ฟังก์ชันรับ OwnershipDetails
{
    เวอร์ชันพารามิเตอร์ (
        [Parameter(Mandatory=$true)] $userId
    )
    $ownershipUrl = (" { 0 } / edu/ผู้ ใช้/{1}/ownedobjects? ' $top = 999 " -f $graphEndpoint, $userId)
    $ownershipQuery = (Invoke RequestWithRetry-url $ownershipUrl) | ConvertFrom Json
    $classes = $ownershipQuery.value | ตำแหน่งวัตถุ { $_.creationOptions-ประกอบด้วย "classAssignments" } | เลือกวัตถุ objectId, displayName
    ส่งกลับ $classes
}

#Get รายละเอียดการเป็นสมาชิกของ id ผู้ใช้ที่ใช้ edu ปลายทางและการปรับปรุง ด้วยการสร้างชนิดการมอบหมาย
ฟังก์ชันรับ MembershipDetails
{
    เวอร์ชันพารามิเตอร์ (
        [Parameter(Mandatory=$true)] $userId
    )
    $membershipUrl = (" { 0 } / edu/ผู้ ใช้/{1}/memberof? ' $top = 999 " -f $graphEndpoint, $userId)
    $membershipQuery = (Invoke RequestWithRetry-url $membershipUrl) | ConvertFrom Json
    $classes = $membershipQuery.value | ตำแหน่งวัตถุ { $_.creationOptions-ประกอบด้วย "classAssignments" } | เลือกวัตถุ objectId, displayName
    ส่งกลับ $classes
}

วัตถุแบบกำหนดเอง pscutom #Return ซึ่งมีคุณสมบัติ classid, userid ชื่อคลาส บทบาท getsubmissionprocessed และ deletesubmissionprocessed
ฟังก์ชันสร้าง ClassRecord
{
    เวอร์ชันพารามิเตอร์ (
        [Parameter(Mandatory=$true)] $userId,
        [Parameter(Mandatory=$true)] $classId,
        [Parameter(Mandatory=$true)] $role,
        [Parameter(Mandatory=$false)] $displayName
    )

$classRecord = [PSCustomObject] @{
        ClassId = $classId
        UserId = $userId
        ชื่อคลาส = $displayName
        บทบาท = $role
        GetSubmissionsProcessed = $false
        DeleteSubmissionsProcessed = $false
    }

ส่งกลับ $classRecord
}

$script: authHeaders = AuthHeaders รับ

# นี้จะประกอบด้วยรายละเอียดสำหรับทุกคลา "น่าสนใจ"
$script: classDetails =@{}

# ค้นหาเป็นเจ้าของคลา (ผู้ใช้อยู่ในขณะนี้สำหรับคุณครูที่)
ลอง
{
    $ownedClasses = OwnershipDetails ต้น - userId $userId
    foreach ($class ใน $ownedClasses)
    {
        ถ้า (-ไม่ $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = $class.objectId - classId - userId $userId สร้าง ClassRecord-$class.displayName - displayName "สำหรับคุณครู" บทบาท
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
ตรวจจับ
{
    ข้อผิดพลาดเขียน_$ Exception.Message
}

# ค้นหาเข้าร่วมกลุ่ม (ผู้ใช้อยู่ในปัจจุบันนัก)
ลอง
{
    $joinedClasses = MembershipDetails ต้น - userId $userId
    foreach ($class ใน $joinedClasses)
    {
        ถ้า (-ไม่ $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = $class.objectId - classId - userId $userId สร้าง ClassRecord-$class.displayName - displayName "Student" บทบาท
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
ตรวจจับ
{
    ข้อผิดพลาดเขียน_$ Exception.Message
}

# ค้นหารายละเอียดสำหรับกลุ่มเพิ่มเติมจากไฟล์
if(![ สตริงที่]:: IsNullOrEmpty($classIdsFile))
{
    $classIdsFromFile =สตริงที่เลือก-รูปแบบ "\w"-$($classIdsFile) เส้นทาง | วัตถุ ForEach {
        $_. เส้น
    }

foreach ($classId ใน $classIdsFromFile)
    {
        # รายการของคลาสปัจจุบันของผู้ใช้จะ precendence เหนือกว่าการตั้งค่าเพิ่มเติมของคลาส
        #เช่นถ้าเราได้แล้วระบุบทบาท เราไม่จำเป็นต้องทำอีกครั้ง
        ถ้า (-ไม่ $script: classDetails.ContainsKey($classId.Trim("")))
        {
            ลอง
            {
                $displayName =ชื่อคลาสต้น - classId $classId
                $classRecord =สร้าง ClassRecord - userId $userId - classId $classId-บทบาท $userrole - displayName $displayName
                $script:classDetails.Add ($classId, $classRecord)
            }
            ตรวจจับ
            {
                เขียนโฮสต์_$ Exception.Message
            }

        }
    }
}            

$script:classDetails.Values | ส่งออก Csv-เส้นทาง.\$($outputFileName).csv - NoTypeInformation
$script: getClassDetailsReport | ส่งออก Csv-เส้นทาง.\UserClassDetailsReport.csv - NoTypeInformation
$directoryPath = (รายการต้น-เส้นทาง "\" -การ) FullName
เขียนโฮสต์ "คลาสรายละเอียด file($($outputFileName).csv) จะถูกสร้างขึ้นที่ $directoryPath\($($outputFileName).csv)"
เขียนโฮสต์ "คลาสรายละเอียด report(UserClassDetailsReport.csv) จะถูกสร้างขึ้นที่ $directoryPath\UserClassDetailsReport.csv"

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

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

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

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

×