Преминаване към основното съдържание
Office

Скриптове за задачи – получаване

Прикачени са скриптовете на Power Shell за класовете "получаване на потребители"

< #
   . Синопсис
    Съберете информация за потребителските класове, като например в кои класове потребителят е член и каква е потребителската роля на потребителя в тези класове.
. ОПИСАНИЕ
    Скриптове прочита файла и да получите всички classids и актуализира ролята с споменатото userrole, ако не е посочено присвояване на ученик, което е по подразбиране. След това получава класовете, в които потребителят е собственик и класове, където потребителят е член. Скрипт прецизира и генерира изхода с подробни данни за класа и роля на потребителя в определен клас.
. Пример
    .\Get-userClasses.ps1 – потребителско име <определен потребителски ИД
>         Това ще получи потребителските данни по отношение на членството
в потребител     .\Get-userClasses.ps1 – потребителско име <определен потребителски ИД> – classIdsFile <пълен път до CSV
файла>         Това ще получи потребителските подробни данни за класовете, указани в CSV файла и членството на потребителите, ако не преминем параметъра userRole, то ще бъде присвоено по подразбиране на учениците
за classIds, указани в CSV файла     .\Get-userClasses.ps1 – потребителско име <определен потребителски ИД> – classIdsFile <пълен път до CSV файла>-userrole <ученик или
учител>         Това ще получи потребителските данни за класовете, указани в CSV файла и членството на потребителите. За свойството classids, зададено в потребителските данни за файл, се генерира в съответствие със зададения userrole (учител или ученик)
   . Потребителско име
за параметър    Потребителско име на потребителя, за да експортирате и изтривате подадени материали
   . Параметър classIdsFile
   Пълен път към обикновен текстов файл, който съдържа един classId на всеки ред.
Примерен списък на classIds. Всеки ред трябва да има Единична
classId    e81c2cd2-e3ff-4c0a-8ed0-63df43ff884c
   044b4c35-5fab-454 а-9705-bc750108c059
   e81c2cd2-4c0a-e3ff-9705-bc750108c059
   . Параметър userrole
   Тази parmeter се използва за указване на ролята на потребителя, която ще се използва за идентификаторите на класа, които са налични в classIdsFile, и потребителят се премахва от класа.
. paramter outputFileName
   Този параметър се използва за наименуване на изходния файл на скрипта, без разширения. Това не е mandatorty по подразбиране името на изходния файл е
UserClassDetails    . Бележки
   Трябва да разполагаме с Microsoft. IdentityModel. clients. ActiveDirectory. dll и Microsoft. IdentityModel. clients. ActiveDirectory. WindowsForms. dll
са необходими # >
Паран
(     [Параметър (задължително = $true; позиция = 1)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        Изпробвайте {
            [System. GUID]::P задник ($ _) | Нулева
стойност             $true
        } улов {
            хвърли $ _
        }
    })]
    [низ] $userId

    [параметър (задължително = $false; позиция = 2)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        If (-not ($ _ | Test-Path)) {
            хвърляне "файл или папка не съществува"
        }
        If (-not ($ _ | Тест-пътека-PathType Leaf)) {
            хвърли "аргументът classIdsFile трябва да бъде файл. Пътищата на папките не са позволени. "
        }
        If ($ _-notmatch "(\.txt)") {
            хвърля "файлът, зададен в аргумента Path, трябва да бъде от тип
txt"         }
        връщане $true
    })]
    [низ] $classIdsFile

    [Параметър (задължително = $false; позиция = 3)]
    [ValidateNotNullOrEmpty()]
    [ValidateSet ("ученик"; "учител"; ignorecase = $false)]
    [низ] $userrole = "ученик";

    [параметър (задължително = $false; позиция = 4)]
    [ValidateNotNullOrEmpty()]
    [низ] $outputFileName = "UserClassDetails"
)
# Load ADAL
Add-Type-Path ".\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 {
    Паран
(         [Параметър (задължително = $true)] $url,
        [Параметър (задължително = $false)] $classId,
        [Параметър (задължително = $false)] $className
    )

    за ($i = 1; $i-Le $script: maxRetryAttempt; $i + +)
    {
        Изпробвайте
        {
            $tempResult = извикване-WebRequest-URI-Ури $url-headers $script:
authHeaders             $script: getClassDetailsReport + = [PSCustomObject] @ {
                RequestUrl = $url
                Методът = "Get"
                ResponseCode = $tempResult. StatusCode
                ClassName = $className
                ClassId = $classId
                RequestId = $tempResult. headers ["молба-ИД"
]                 StatusDescription = $tempResult. StatusDescription
                NumberOfAttempts = $i
            }
            връщане $tempResult
        }
        за
улова         {
            If ($ _). Изключение. response-NE $null)
            {
                $responseCode = $ _. Изключение. response. StatusCode. Value__
                $requestId = $ _. Изключение. response. headers ["молба-ИД"
]             }

            $script: getClassDetailsReport + = [PSCustomObject] @ {
                RequestUrl = $url
                Методът = "Get"
                ResponseCode = $responseCode
                ClassName = $className
                ClassId = $classId
                RequestId = $requestId
                StatusDescription = $ _. Изключение. съобщение
                NumberOfAttempts = $i
            }            

            If ($i-EQ $script: maxRetryAttempt)
            {
                хвърли $ _. Изключение. съобщение
            }

            If ($responseCode-EQ 401)
            {
                $script: authHeaders = get-AuthHeaders-useRefreshToken $true
            }
        }
    }
}

#Get authheaders
функция get-AuthHeaders
{
    Паран
(         [Параметър (задължителен = $false)]
        [BOOL] $useRefreshToken = $false
    )
    $clientId = "eb2298a1-a6bb-4f16-a27a-b582815db47b"
    $redirectURI = New-Object System. URI ("урна: IETF: РГ: OAuth: 2.0: OOB")
    $promptBehavior = [Microsoft. IdentityModel. clients. ActiveDirectory. PromptBehavior]::
винаги     $authContext = New-Object "Microsoft. IdentityModel. clients. ActiveDirectory. AuthenticationContext"-ArgumentList
$authString     If ($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; "Content-Type" = "Application/JSON"}
    връщане $headers
}

#Get името
на групата функция get-ClassName
{
    Паран
(         [Параметър (задължително = $true)] $classId
    )

    $getClassDetailsUrl = "{0}/v1.0/Groups/{1}"-f $graphEndpoint $classId
    $getClassDetailsResult = (извикване-RequestWithRetry-URL $getClassDetailsUrl) | ConvertFrom-JSON
    $className = $getclassDetailsResult. displayName
    връщане $className
}

#Get на подробности за собствеността на потребителски ИД чрез edu endpoit и прецизиране със създаването на типовете
задачи функция get-OwnershipDetails
{
    Паран
(         [Параметър (задължително = $true)] $userId
    )
    $ownershipUrl = ("{0}/edu/users/{1}/ownedobjects?" $top = 999 "-f $graphEndpoint, $userId)
    $ownershipQuery = (извикване-RequestWithRetry-URL $ownershipUrl) | ConvertFrom-JSON
    $classes = $ownershipQuery. Value | Where-Object {$ _. creationOptions-съдържа "classAssignments"} | Select-Object objectId, displayName
    връщане $classes
}

#Get на подробните данни за членовете на потребителския ИД чрез използване на edu крайна точка и прецизиране със създаването
на типовете задачи функция get-MembershipDetails
{
    Паран
(         [Параметър (задължително = $true)] $userId
    )
    $membershipUrl = ("{0}/edu/users/{1}/memberof?" $top = 999 "-f $graphEndpoint, $userId)
    $membershipQuery = (извикване-RequestWithRetry-URL $membershipUrl) | ConvertFrom-JSON
    $classes = $membershipQuery. Value | Where-Object {$ _. creationOptions-съдържа "classAssignments"} | Select-Object objectId, displayName
    връщане $classes
}

#Return потребителски обект pscutom, които имат ClassID, потребителско име, className, роля, getsubmissionprocessed и
deletesubmissionprocessed свойства Генериране на функция –
ClassRecord {
    Паран
(         [Параметър (задължително = $true)] $userId,
        [Параметър (задължително = $true)] $classId,
        [Параметър (задължително = $true)] $role,
        [Параметър (задължително = $false)] $displayName
    )

    $classRecord = [PSCustomObject] @ {
        ClassId = $classId
        Потребителско име =
$userId         ClassName = $displayName
        Роля = $role
        GetSubmissionsProcessed = $false
        DeleteSubmissionsProcessed = $false
    }

    връщане $classRecord
}

$script: authHeaders = get-AuthHeaders

# Това ще съдържа подробни данни за всички "интересни" класове
$script: classDetails = @ {}

# Намиране на притежаваните класове (където потребителят в момента е
учител) Изпробвайте
{
    $ownedClasses = get-OwnershipDetails-потребителско име
$userId     foreach ($class в $ownedClasses)
    {
        If (-NOT $script: classDetails. ContainsKey ($class. objectId))
        {
            $classRecord = генериране-ClassRecord-потребителско име $userId-classId $class. objectId-роля "учител"-displayName $class.
displayName             $script: classDetails. Add ($class. objectId, $classRecord)
        }
    }
}
за
улова {
    Напиши грешка $ _. Изключение. съобщение
}

# Намери Съединени групи (където потребителят в момента е
студент) Изпробвайте
{
    $joinedClasses = get-MembershipDetails-потребителско име
$userId     foreach ($class в $joinedClasses)
    {
        If (-NOT $script: classDetails. ContainsKey ($class. objectId))
        {
            $classRecord = генериране-ClassRecord-потребителско име $userId-classId $class. objectId-роля "ученик"-displayName $class.
displayName             $script: classDetails. Add ($class. objectId, $classRecord)
        }
    }
}
за
улова {
    Напиши грешка $ _. Изключение. съобщение
}

# Намери подробни данни за допълнителни групи от файла.
If (! [ низ]:: IsNullOrEmpty ($classIdsFile))
{
    $classIdsFromFile = Select-низ-модел "\w"-Path $ ($classIdsFile) | ForEach – обект {
        $_. Line
    }

    foreach ($classId в $classIdsFromFile)
    {
        # Списък на текущите класове на потребителя отвежда precendence над допълнителния набор от класове
        # т. е. Ако вече идентифицирахме ролята, не е нужно да я повтаряме.
Ако (-не $script: classDetails. ContainsKey ($classId. Trim ("")))
        {
            Изпробвайте
            {
                $displayName = get-ClassName-classId $classId
                $classRecord = генериране-ClassRecord-потребителско име $userId-classId $classId-роля $userrole-displayName
$displayName                 $script: classDetails. Add ($classId; $classRecord)
            }
            за
улова             {
                Write-Host $ _. Изключение. съобщение
            }

        }
    }
}            

$script: classDetails. Values | Export-CSV-Path. \ $ ($outputFileName). csv-NoTypeInformation
$script: getClassDetailsReport | Export-CSV-Path .\UserClassDetailsReport.csv-NoTypeInformation
$directoryPath = (Get-item-Path ". \"-многословен). Пълноиме
Файл с подробни данни за класа ($ ($outputFileName). csv) се генерира в $directoryPath \ ($ ($outputFileName). csv) "
Write-Host "report Details (UserClassDetailsReport. csv) се генерира в $directoryPath \UserClassDetailsReport.csv"

Забележка:  Тази страница е преведена чрез автоматизация и може да съдържа граматически грешки и несъответствия. Нашата цел е това съдържание да ви бъде полезно. Можете ли да ни кажете дали информацията е била полезна за вас? Ето статията на английски за справка.

Разширете уменията си в Office
Преглед на обучението
Получавайте първи новите функции
Присъединете се към участниците в Office Insider

Беше ли полезна тази информация?

Благодарим ви за обратната връзка!

Благодарим ви за вашата обратна връзка. Изглежда, че ще бъде полезно да ви свържем с един от нашите агенти по поддръжката на Office.

×