קבצי Script של הקצאות - קבל

הערה:  אנו מעוניינים לספק לך את תוכן העזרה העדכני ביותר במהירות האפשרית, בשפה שלך. דף זה תורגם באמצעות אוטומציה והוא עשוי לכלול שגיאות דקדוק או אי-דיוקים. מטרתנו היא כי תוכן זה יהיה שימושי עבורך. האם תוכל לספר לנו אם המידע הועיל לך, בחלק התחתון של דף זה? לנוחותך, הנה המאמר באנגלית .

מצורף הן script של מעטפת power עבור Get - מחלקות משתמשים

< #
   . Synopsis
    קבל את פרטי מחלקות משתמש כגון במחלקות אילו המשתמש הוא חבר ומהו תפקיד המשתמש של המשתמש בכיתות אלה.
    . תיאור
    קבצי script קורא את הקובץ ולקבל כל classids את והקצה עדכונים התפקיד עם userrole שהוזכרו, אם לא המוזכרות תלמיד המהווה ברירת מחדל. לאחר מכן הוא מקבל המחלקות שבו המשתמש נמצא הבעלים ומחלקות כאשר המשתמש הוא חבר. קובץ script משפר ומפיק הפלט עם פרטי מחלקה והתפקיד של המשתמש בכיתה ספציפי.
   . דוגמה
    .\Get-userClasses.ps1 - מזהה משתמש < משתמש ספציפי מזהה >
        פעולה זו יקבלו את פרטי המשתמש לפי חברות המשתמש
    < נתיב קובץ csv מלאה > - מזהה משתמש < משתמש ספציפי מזהה > - classIdsFile.\Get-userClasses.ps1
        פעולה זו יקבלו את פרטי המשתמש של מחלקות המצוינות חברות קובץ וחוסר csv, אם אין אנו יעבור הפרמטר userRole, תוקצה לו להגדרות ברירת המחדל של תלמיד עבור classIds שצוין בקובץ csv
    .\Get-userClasses.ps1 - מזהה משתמש < משתמש ספציפי מזהה > - classIdsFile < נתיב קובץ csv מלאה > - userrole < מורה או תלמיד >
        פעולה זו יקבלו את פרטי המשתמש של מחלקות המצוינות חברות קובץ וחוסר csv. עבור classids שצוין בקובץ נתוני המשתמש נוצר בהתאם userrole שצוין (מורה או תלמיד)
   . מזהה משתמש של פרמטר
   מזהה משתמש של המשתמש כדי לייצא ולמחוק פריטים שנשלחו
   . פרמטר classIdsFile
   הנתיב המלא לקובץ טקסט רגיל אשר מכילה של מזהה מחלקה בודד בכל שורה.
   רשימת classIds לדוגמה. כל שורה צריך להיות מזהה מחלקה יחיד
   e81c2cd2-e3ff-4c0a-8ed0-63df43ff884c
   044b4c35-5fab-454a-9705-bc750108c059
   e81c2cd2-4c0a-e3ff-9705-bc750108c059
   . פרמטר userrole
   Parmeter זה משמש כדי לציין התפקיד של המשתמש שישמש עבור המזהים מחלקה להיכלל classIdsFile והמשתמש מוסר ממחלקת.
   .paramter outputFileName
   פרמטר זה משמש כדי לתת שם קובץ הפלט של ה-script, ללא הרחבות. זו אינה mandatorty כברירת מחדל שם קובץ פלט הוא UserClassDetails
   . הערות
   אנו עליך להתקין את Microsoft.IdentityModel.Clients.ActiveDirectory.dll ו- Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll נדרשות
#>
הפרמטר (
    [פרמטר (חובה $true, מיקום = = 1)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        נסה {
            [System.Guid]::Parse($_) | Out-Null
            $true
        } למשוך {
            להתריע $_
        }
    })]
    [מחרוזת] $userId,

[פרמטר (חובה = $false, מיקום = 2)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        אם (-לא ($_ | Test-Path)) {
            להתריע "קובץ או תיקיה אינה קיימת"
        }
        אם (-לא ($_ | עלים - PathType Test-Path)) {
            להתריע "הארגומנט classIdsFile חייב להיות קובץ. נתיבי קובץ אסור."
        }
        אם ($_ - notmatch "(\.txt)") {
            להתריע "הקובץ שצוין בארגומנט נתיב חייב להיות סוג txt"
        }
        חזור $true
    })]
    [מחרוזת] $classIdsFile,

[פרמטר (חובה = $false, מיקום = 3)]
    [ValidateNotNullOrEmpty()]
    [ValidateSet ('תלמיד', 'מורה', ignorecase = $false)]
    [מחרוזת] $userrole = "תלמיד,"

[פרמטר (חובה = $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 ורושם את מצב תגובה
הפעל-RequestWithRetry יתפקד
{
    הפרמטר (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className
    )

עבור ($i = 1; $i-le $script: maxRetryAttempt; $i + +)
    {
        נסה
        {
            $tempResult = הפעל-WebRequest-קבל שיטת - Uri של $url-כותרות $script: authHeaders
            $script: getClassDetailsReport + = [PSCustomObject] @{
                RequestUrl = $url
                שיטת = "קבל"
                ResponseCode = $tempResult.StatusCode
                ClassName = $className
                מזהה מחלקה = $classId
                RequestId = ["הבקשה מזהה"] $tempResult.Headers
                StatusDescription = $tempResult.StatusDescription
                NumberOfAttempts = $i
            }
            חזור $tempResult
        }
        ללכוד
        {
            if($_. Exception.Response - חדש $null)
            {
                $responseCode = $_. Exception.Response.StatusCode.Value__
                $requestId = $_. Exception.Response.Headers ["הבקשה מזהה"]
            }

            $script: getClassDetailsReport + = [PSCustomObject] @{
                RequestUrl = $url
                שיטת = "קבל"
                ResponseCode = $responseCode
                ClassName = $className
                מזהה מחלקה = $classId
                RequestId = $requestId
                StatusDescription = $_. Exception.Message
                NumberOfAttempts = $i
            }            

אם ($i - eq $script: maxRetryAttempt)
            {
                להתריע $_. Exception.Message
            }

אם ($responseCode - eq 401)
            {
                $script: authHeaders = Get-AuthHeaders - useRefreshToken $true
            }
        }
    }
}

#Get authheaders
הפונקציה Get-AuthHeaders
{
    הפרמטר (
        [Parameter(Mandatory=$false)]
        [בוליאני] $useRefreshToken = $false
    )
    $clientId = "eb2298a1-a6bb-4f16-a27a-b582815db47b"
    $redirectURI = New-Object System.Uri("urn:ietf:wg:oauth:2.0:oob")
    $promptBehavior = [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always
    $authContext = "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" New-Object - 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
הפונקציה Get-ClassName
{
    הפרמטר (
        [Parameter(Mandatory=$true)] $classId
    )

$getClassDetailsUrl = "{0}/v1.0/groups/{1}" -f $graphEndpoint, $classId
    $getClassDetailsResult = (הפעל-RequestWithRetry-url $getClassDetailsUrl) | ConvertFrom-Json
    $className = $getclassDetailsResult.displayName
    חזור $className
}

פרטי בעלות #Get מזהה משתמש באמצעות החינוך endpoit וסוג מקד יצירת בהקצאות
הפונקציה Get-OwnershipDetails
{
    הפרמטר (
        [Parameter(Mandatory=$true)] $userId
    )
    $ownershipUrl = ("{0} / החינוך/משתמשים/{1}/ownedobjects? ' $top = 999" -f $graphEndpoint, $userId)
    $ownershipQuery = (הפעל-RequestWithRetry-url $ownershipUrl) | ConvertFrom-Json
    $classes = $ownershipQuery.value | היכן-Object {$_.creationOptions-מכיל "classAssignments"} | בחר באובייקט objectId, displayName
    חזור $classes
}

#Get פרטי חברות החינוך באמצעות מזהה משתמש קצה וסוג מקד יצירת בהקצאות
הפונקציה Get-MembershipDetails
{
    הפרמטר (
        [Parameter(Mandatory=$true)] $userId
    )
    $membershipUrl = ("{0} / החינוך/משתמשים/{1}/memberof? ' $top = 999" -f $graphEndpoint, $userId)
    $membershipQuery = (הפעל-RequestWithRetry-url $membershipUrl) | ConvertFrom-Json
    $classes = $membershipQuery.value | היכן-Object {$_.creationOptions-מכיל "classAssignments"} | בחר באובייקט objectId, displayName
    חזור $classes
}

אובייקט pscutom מותאם אישית #Return שהם בעלי מאפיינים מזהה מחלקה, מזהה משתמש, classname, תפקידים, getsubmissionprocessed ו- deletesubmissionprocessed
צור-ClassRecord יתפקד
{
    הפרמטר (
        [Parameter(Mandatory=$true)] $userId,
        [Parameter(Mandatory=$true)] $classId,
        [Parameter(Mandatory=$true)] $role,
        [Parameter(Mandatory=$false)] $displayName
    )

$classRecord = [PSCustomObject] @{
        מזהה מחלקה = $classId
        מזהה משתמש = $userId
        ClassName = $displayName
        תפקיד = $role
        GetSubmissionsProcessed = $false
        DeleteSubmissionsProcessed = $false
    }

חזור $classRecord
}

$script: authHeaders = Get-AuthHeaders

# זה יכיל את הפרטים של כל הכיתות "מעניינים"
$script: classDetails = @ {}

# איתור בבעלות מחלקות (כאשר המשתמש הוא כעת מורה)
נסה
{
    $ownedClasses = get-OwnershipDetails - מזהה משתמש $userId
    foreach ($class ב- $ownedClasses)
    {
        אם (-לא $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = $class.objectId מזהה מחלקה-- מזהה משתמש $userId צור-ClassRecord-$class.displayName - displayName "מורה" תפקיד
            $script:classDetails.Add ($class.objectId, $classRecord)
        }
    }
}
ללכוד
{
    שגיאת כתיבה $_. Exception.Message
}

# קבוצות מצורף חיפוש (כאשר המשתמש הוא כעת תלמיד)
נסה
{
    $joinedClasses = get-MembershipDetails - מזהה משתמש $userId
    foreach ($class ב- $joinedClasses)
    {
        אם (-לא $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = $class.objectId מזהה מחלקה-- מזהה משתמש $userId צור-ClassRecord-$class.displayName - displayName "תלמיד" תפקיד
            $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 = get-ClassName - מזהה מחלקה $classId
                $classRecord = צור-ClassRecord - מזהה משתמש $userId - מזהה מחלקה $classId-תפקיד $userrole - displayName $displayName
                $script:classDetails.Add ($classId, $classRecord)
            }
            ללכוד
            {
                כתיבה-Host $_. Exception.Message
            }

        }
    }
}            

$script:classDetails.Values | ייצוא-Csv-נתיב.\$($outputFileName).csv - NoTypeInformation
$script: getClassDetailsReport | ייצוא-Csv-נתיב.\UserClassDetailsReport.csv - NoTypeInformation
$directoryPath = (get-פריט-נתיב ". \"-מפורט). ו'שם _
כתיבה-Host "פרטי מחלקה file($($outputFileName).csv) נוצר בזמן $directoryPath\($($outputFileName).csv)"
כתיבה-Host "פרטי מחלקה report(UserClassDetailsReport.csv) נוצר בזמן $directoryPath\UserClassDetailsReport.csv"

שפר את הכישורים שלך ב- Office
סייר בהדרכה
קבל תכונות חדשות לפני כולם
הצטרף למשתתפי Office Insider

האם מידע זה היה שימושי?

תודה על המשוב!

תודה על המשוב! נראה שכדאי לקשר אותך לאחד מנציגי התמיכה של Office.

×