分配脚本-获取

注意:  我们希望能够尽快以你的语言为你提供最新的帮助内容。 本页面是自动翻译的,可能包含语法错误或不准确之处。我们的目的是使此内容能对你有所帮助。可以在本页面底部告诉我们此信息是否对你有帮助吗? 请在此处查看本文的 英文版本 以便参考。

附加获取-用户类别是 power 外壳脚本

< #
   .概要
    获取用户类信息,如在哪些类用户都有成员和什么是这些课程中的用户的用户角色。
    .说明
    脚本读取文件,并获取所有 classids 和 userrole 与角色所述,如果不是提到的更新将分配给学生,这是默认值。然后,它获取用户处于所有者和类用户是成员的位置。脚本精炼,并在特定的类生成的类详细信息和用户角色的输出。
   .示例
    .\Get-userClasses.ps1 用户 Id < 特定用户 Id >
        这会根据用户成员身份的用户详细信息
    .\Get-userClasses.ps1-用户 Id < 特定用户 Id > classIdsFile < 完成 csv 文件路径 >
        这将收到的类指定 csv 文件,并且用户成员身份,在用户详细信息如果我们不通过 userRole 参数,它将分配给学生默认值为 csv 文件中指定 classIds
    .\Get-userClasses.ps1-用户 Id < 特定用户 Id >-classIdsFile < 完成 csv 文件路径 >-userrole < 学生或教师 >
        这将收到 csv 文件,并且用户成员身份中指定的类用户详细的信息。对于 classids 文件中指定用户数据都将生成根据指定 userrole (教师或学生)
   .参数的用户 Id
   用户的用户 Id 导出和删除提交
   .参数 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)) {
            "文件或文件夹不存在"拒绝
        }
        如果 (-不 ($_ |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
                了申请 Id = ["请求 id"] $tempResult.Headers
                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
                了申请 Id = $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)]
        布尔 $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"-参数列表 $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 所有权详细信息的用户 id 使用 edu endpoit 并通过创建优化键入到分配
函数获取 OwnershipDetails
{
    参数 (
        Parameter(Mandatory=$true) $userId
    )
    $ownershipUrl = ("{0} / edu/用户/{1}/ownedobjects? $top = 999"-f $graphEndpoint,$userId)
    $ownershipQuery = (调用 RequestWithRetry-url $ownershipUrl) |ConvertFrom Json
    $classes = $ownershipQuery.value |在何处对象 {$_.creationOptions-包含"classAssignments"} |选择对象对象 Id、 displayName
    返回 $classes
}

#Get 成员身份的详细信息的用户 id 使用 edu 终结点,并通过创建优化键入到分配
函数获取 MembershipDetails
{
    参数 (
        Parameter(Mandatory=$true) $userId
    )
    $membershipUrl = ("{0} / edu/用户/{1}/memberof? $top = 999"-f $graphEndpoint,$userId)
    $membershipQuery = (调用 RequestWithRetry-url $membershipUrl) |ConvertFrom Json
    $classes = $membershipQuery.value |在何处对象 {$_.creationOptions-包含"classAssignments"} |选择对象对象 Id、 displayName
    返回 $classes
}

#Return 自定义 pscutom 对象的有 classid、 用户 id、 类名、 角色、 getsubmissionprocessed 和 deletesubmissionprocessed 属性
函数生成 ClassRecord
{
    参数 (
        Parameter(Mandatory=$true) $userId,
        Parameter(Mandatory=$true) $classId,
        Parameter(Mandatory=$true) $role,
        Parameter(Mandatory=$false) $displayName
    )

$classRecord = [PSCustomObject] @{
        ClassId = $classId
        用户 Id = $userId
        类名 = $displayName
        角色 = $role
        GetSubmissionsProcessed = $false
        DeleteSubmissionsProcessed = $false
    }

返回 $classRecord
}

$script: authHeaders = 获取 AuthHeaders

# 这将包含的所有"有趣"类的详细信息
$script: classDetails = @ {}

# 查找拥有的类 (用户在哪里当前教师)
请尝试
{
    $ownedClasses = 获取 OwnershipDetails 用户 Id $userId
    foreach (在 $ownedClasses $class)
    {
        如果 (-不 $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = 生成 ClassRecord 的用户 Id $userId-classId $class.objectId-角色"教师"-displayName $class.displayName
            $script:classDetails.Add ($class.objectId、 $classRecord)
        }
    }
}
捕获
{
    写错误 $ _。Exception.Message
}

# 查找加入组 (用户在哪里当前学生)
请尝试
{
    $joinedClasses = 获取 MembershipDetails 用户 Id $userId
    foreach (在 $joinedClasses $class)
    {
        如果 (-不 $script: classDetails.ContainsKey($class.objectId))
        {
            $classRecord = 生成 ClassRecord 的用户 Id $userId-classId $class.objectId-角色"学生"-displayName $class.displayName
            $script:classDetails.Add ($class.objectId、 $classRecord)
        }
    }
}
捕获
{
    写错误 $ _。Exception.Message
}

# 附加的文件从组中找到详细信息。
if(![字符串]:: IsNullOrEmpty($classIdsFile))
{
    $classIdsFromFile = 选择字符串-图案"\w"-路径 $($classIdsFile) |ForEach 对象 {
        $_.行
    }

foreach (在 $classIdsFromFile $classId)
    {
        编号列表中的用户的当前类接管类其他设置的 precendence
        例如,如果我们已将标识角色 #,我们不需要再次执行操作。
        如果 (-不 $script: classDetails.ContainsKey($classId.Trim("")))
        {
            请尝试
            {
                $displayName = 获取类名 classId $classId
                $classRecord = 生成 ClassRecord 的用户 Id $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 = (获取项目-路径"。 \"-详细)。全名
编写主机"file($($outputFileName).csv) 生成在 $directoryPath\($($outputFileName).csv) 类详细信息"
编写主机"report(UserClassDetailsReport.csv) 生成在 $directoryPath\UserClassDetailsReport.csv 类详细信息"

扩展你的 Office 技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×