工作分派的指令碼-取得

附註:  我們想要以您的語言,用最快的速度為您提供最新的說明內容。 本頁面是經由自動翻譯而成,因此文中可能有文法錯誤或不準確之處。讓這些內容對您有所幫助是我們的目的。希望您能在本頁底部告訴我們這項資訊是否有幫助。 此為 英文文章 出處,以供參考。

附加取得-使用者類別是 power 殼層指令碼

< #
   .總覽
    等的類別中的使用者是成員和使用者角色,這些類別中的使用者,請取得使用者類別資訊。
    .描述
    指令碼讀取該檔案,並取得所有 classids 及更新使用者角色與角色所述,如果未提及指派給學生這是預設值。接著,在此取得使用者是擁有者的類別和類別使用者是成員的位置上。修改指令碼,並產生的類別詳細資料和使用者的角色輸出特定類別中。
   .範例
    .\Get-userClasses.ps1 使用者識別碼 < 特定的使用者識別碼 >
        這會根據使用者的成員資格的使用者詳細資料
    .\Get-userClasses.ps1-使用者識別碼 < 特定的使用者識別碼 > classIdsFile < 完成 csv 檔案路徑 >
        這會收到使用者詳細資料的 csv 檔案與使用者的成員資格] 中指定的類別如果我們不傳遞使用者角色參數,它會指派給學生 classIds csv 檔案中指定預設
    .\Get-userClasses.ps1-使用者識別碼 < 特定的使用者識別碼 >-classIdsFile < 完成 csv 檔案路徑 >-使用者角色 < 學生或教師 >
        這會收到使用者詳細資料的 csv 檔案與使用者的成員資格中指定的類別。使用者資料檔案中指定 classids 會產生根據使用者角色指定 (教師或學生)
   .參數使用者識別碼
   使用者的使用者識別碼,然後刪除送出 」
   .參數 classIdsFile
   包含單一 classId 每一行的純文字檔案的完整路徑。
   classIds 範例清單。每行應有單一 classId
   e81c2cd2-e3ff-4c0a-8ed0-63df43ff884c
   044b4c35-5fab-454a-9705-bc750108c059
   e81c2cd2-4c0a-e3ff-9705-bc750108c059
   .參數使用者角色
   此 parmeter 用來指定要做為簡報中 classIdsFile 類別識別碼使用者和使用者的角色會從類別中移除。
   .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)) {
            擲回 「 檔案或資料夾不存在 」
        }
        如果 (-不 ($_ |Test-Path-PathType 分葉)) {
            擲回 「 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 web 要求和記錄的回應狀態
函數叫用 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
                ClassId = $classId
                RequestId = $tempResult.Headers [「 要求-識別碼 」]
                StatusDescription = $tempResult.StatusDescription
                NumberOfAttempts = $i
            }
            傳回 $tempResult
        }
        掌握
        {
            if($_.Exception.Response ne $null)
            {
                $responseCode = $_。Exception.Response.StatusCode.Value__
                $requestId = $_。[「 要求-識別碼 」] Exception.Response.Headers
            }

            $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 = (叫用 RequestWithRetry-url $getClassDetailsUrl) |ConvertFrom Json
    $className = $getclassDetailsResult.displayName
    傳回 $className
}

#Get 擁有權的詳細資料的使用者識別碼為何使用教育 endpoit,然後建立精簡輸入工作分派
函數取得 OwnershipDetails
{
    參數 (
        [Parameter(Mandatory=$true)] $userId
    )
    $ownershipUrl = (「 {0}/教育/使用者/{1}/ownedobjects? ' $top = 999 」-f $graphEndpoint,$userId)
    $ownershipQuery = (叫用 RequestWithRetry-url $ownershipUrl) |ConvertFrom Json
    $classes = $ownershipQuery.value |物件位置 {$_.creationOptions-包含 「 classAssignments 」} |選取物件 objectId、 顯示名稱
    傳回 $classes
}

#Get 成員資格詳細資料的使用者識別碼為何使用教育結束點,然後建立精簡輸入工作分派
函數取得 MembershipDetails
{
    參數 (
        [Parameter(Mandatory=$true)] $userId
    )
    $membershipUrl = (「 {0}/教育/使用者/{1}/memberof? ' $top = 999 」-f $graphEndpoint,$userId)
    $membershipQuery = (叫用 RequestWithRetry-url $membershipUrl) |ConvertFrom Json
    $classes = $membershipQuery.value |物件位置 {$_.creationOptions-包含 「 classAssignments 」} |選取物件 objectId、 顯示名稱
    傳回 $classes
}

具有 classid、 使用者識別碼、 類別名稱、 角色、 getsubmissionprocessed 和 deletesubmissionprocessed 屬性 #Return 自訂 pscutom 物件
函數產生 ClassRecord
{
    參數 (
        [Parameter(Mandatory=$true)] $userId,
        [Parameter(Mandatory=$true)] $classId,
        [Parameter(Mandatory=$true)] $role,
        [Parameter(Mandatory=$false)] $displayName
    )

$classRecord = [PSCustomObject] @{
        ClassId = $classId
        使用者識別碼 = $userId
        類別名稱 = $displayName
        角色 = $role
        GetSubmissionsProcessed = $false
        DeleteSubmissionsProcessed = $false
    }

傳回 $classRecord
}

$script: authHeaders = 取得 AuthHeaders

# 它將會包含 「 有趣 」 的所有類別的詳細資料
$script: classDetails = @ {}

# 尋找擁有 (其中使用者是目前老師) 的類別
請嘗試
{
    $ownedClasses = 取得 OwnershipDetails 使用者識別碼 $userId
    foreach ($class 中 $ownedClasses)
    {
        如果 (-不 $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = 產生 ClassRecord-使用者識別碼 $userId-classId $class.objectId-角色 「 教師 」-displayName $class.displayName
            $script:classDetails.Add ($class.objectId、 $classRecord)
        }
    }
}
掌握
{
    寫入錯誤 $ _。Exception.Message
}

# 尋找加入群組 (其中使用者是目前學生)
請嘗試
{
    $joinedClasses = 取得 MembershipDetails 使用者識別碼 $userId
    foreach ($class 中 $joinedClasses)
    {
        如果 (-不 $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = 產生 ClassRecord-使用者識別碼 $userId-classId $class.objectId-角色 「 學生 」-displayName $class.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 = 取得類別名稱 classId $classId
                $classRecord = 產生 ClassRecord-使用者識別碼 $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 = (取得項目-路徑 」。 \ 」 的詳細資訊)。全名
撰寫主機 「 於 $directoryPath\($($outputFileName).csv) 產生 file($($outputFileName).csv) 課程詳細資料 」
撰寫主機 「 於 $directoryPath\UserClassDetailsReport.csv 產生 report(UserClassDetailsReport.csv) 課程詳細資料 」

增進您的 Office 技巧
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與其中一位 Office 支援專員連絡以深入了解您的意見。

×