Atamaları betikleri - dışarı aktarma

Not:  En güncel yardım içeriklerini, mümkün olduğunca hızlı biçimde kendi dilinizde size sunmak için çalışıyoruz. Bu sayfanın çevirisi otomasyon aracılığıyla yapılmıştır ve bu nedenle hatalı veya yanlış dil bilgisi kullanımları içerebilir. Amacımız, bu içeriğin sizin için faydalı olabilmesini sağlamaktır. Buradaki bilgilerin faydalı olup olmadığını bu sayfanın sonunda bize bildirebilir misiniz? Kolayca başvurabilmek için İngilizce makaleye buradan ulaşabilirsiniz .

İhracat - eğitim atamaları

< #
   . Doğrulanır
    Csv dosyası olarak belirtilen sınıf kümesi'teki kullanıcının eğitim atamaları verileri dışarı aktarın.
    . Açıklama
    Komut dosyası kullanıcı sınıf ayrıntılarını giriş csv dosyasından okur. Gönderimler her atama ve atamaları alma ve atama file(GetAssignmentsReport.csv) file(assignment.json) ve rapor üretir. gönderimler ayıklamak bittiğinde belirli o sınıf için true olarak GetSubmissionsProcessed sütunu güncelleştirir. Dosyayı son gönderim silinmek üzere güncelleştirilecek çünkü betiği arasında başarısız olursa biz komut dosyası ile aynı giriş dosyası, yeniden çalıştırabilirsiniz.
   . Örnek
    .\Export-EduAssignments.ps1 - userClassDetailsFile < kullanıcı sınıf ayrıntıları csv dosyasının tam yolunu >
   . Parametre userClassDetailsFile
   Get-UserClasses.ps1 komut dosyası olan csv file(userClassDetails.csv) budur. Bu dosya kullanıcı sınıflar ve silme ve get gönderimler mı işleneceğini hakkında bilgiler vardır. Bu değer file(drive:\GDPR\userClassDetails.csv) tam yolunu olmalıdır
   . Notları
   Biz Microsoft.IdentityModel.Clients.ActiveDirectory.dll olması gerekir ve Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll gerekli
#>
parametre (
    [parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [ValidateScript ({
        varsa (-değil ($_ | Test-Path)) {
            Durum "userClassDetailsFile yok."
        }
        varsa (-değil ($_ | Test-Path - PathType yaprak)) {
            Durum "userClassDetailsFile bağımsız değişkeni bir dosya olmalıdır. Klasör yolları izin verilmez."
        }
        varsa ($_ - notmatch "(\.csv)") {
            "userClassDetailsFile Get-UserClasses.ps1 kullanılarak oluşturulmuş bir virgülle ayrılmış dosya olmalıdır" durum
        }
        dönüş $true
    })]
    [dize] $userClassDetailsFile
)

# Yükleme ADAL
Türü Ekle-yol ".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
$educationEndpoint "https://graph.microsoft.com/beta/education/" =
$script: userClassDetails = @ ()
$script: getAssignmentsReport = @ ()
$script: maxRetryAttempt = 3
$script: authHeaders $null =
$script: authenticationResult $null =
$graphEndpoint "https://graph.microsoft.com" =
$authString = "https://login.windows.net/common"

#Get authheaders
Get-AuthHeaders işlevi
{
    Parametre (
        [Parameter(Mandatory=$false)]
        [bool] $useRefreshToken $false =
    )
    $clientId "eb2298a1-a6bb-4f16-a27a-b582815db47b" =
    $redirectURI yeni nesne System.Uri("urn:ietf:wg:oauth:2.0:oob") =
    $promptBehavior = [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always
    $authContext yeni nesneyi "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" - bağımsızdeğişkenListesi $authString =
    varsa ($useRefreshToken - eq $false)
    {
        $script: authenticationResult $authContext.AcquireToken ($graphEndpoint, $clientID, $redirectURI, $promptBehavior) =
    }
    başka
    {
        $script: authenticationResult $authContext.AcquireTokenByRefreshToken ($script:authenticationResult.RefreshToken, $clientId) =
    }
    $authHeader $script:authenticationResult.AccessTokenType = + "" + $script:authenticationResult.AccessToken
    $headers = @{"Yetkilendirme" = $authHeader; "İçerik türü" = "Uygulama/json"}
    dönüş $headers
}

#Retry mantığı ve komut dosyası hata günlüğünü
Çağır RequestWithRetry işlevi
{
    parametre (
        [Parameter(Mandatory=$true)] $url,
        [Parameter(Mandatory=$false)] $classId,
        [Parameter(Mandatory=$false)] $className,
        [Parameter(Mandatory=$true)] $OperationName
    )

için ($i = 1; $i-le $script: maxRetryAttempt; $i ++)
    {
        deneyin
        {
            $APIResult Çağır WebRequest =-$url yöntemi Get - URI-üstbilgileri $script: authHeaders
            $resultCount = 0
            varsa ($OperationName - eq "GetAssignments")
            {
                $valueStartIndex = ($APIResult.content.indexof('"value":') + 8)
                $valueEndIndex $APIResult.content.Length =
                $valueString $APIResult.content.substring ($valueStartIndex, $valueEndIndex $valueStartIndex -1) =
                $resultCount = (($valuestring | seçin dize ' "sınıf" kimliği:' - AllMatches). Matches.Count)
            }
            başka
            {
                $submissionsJson $APIResult.content = | ConvertFrom Json
                $resultCount $submissionsJson.value.count =
            }

$script: getAssignmentsReport += [PSCustomObject] @{
                RequestUrl $url =
                Yöntem "Alma" =
                Yanıt kodu $APIResult.StatusCode =
                SınıfAdı $className =
                Sınıf kodu $classId =
                İstekKimliği $APIResult.Headers ["kimliği isteği"] =
                StatusDescription $APIResult.StatusDescription =
                NumberOfAttempts $i =
                OperationName $OperationName =
                ResultCount $resultCount =
            }
            dönüş $APIResult
        }
        Fiili
        {
            if($_. Exception.Response - ne $null)
            {
                $responseCode = $_. Exception.Response.StatusCode.Value__
                $requestId = $_. ["Kimliği isteği"] Exception.Response.Headers
            }

            $script: getAssignmentsReport += [PSCustomObject] @{
                RequestUrl $url =
                Yöntem "Alma" =
                Yanıt kodu $responseCode =
                SınıfAdı $className =
                Sınıf kodu $classId =
                İstekKimliği $requestId =
                StatusDescription = $_. Exception.Message
                NumberOfAttempts $i =
                OperationName $OperationName =
                ResultCount $resultCount =
            }            

varsa ($i - eq $script: maxRetryAttempt)
            {
                Durum $_
            }

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

#get atamaları
Get-atamaları işlevi
{
    parametre (
        [Parameter(Mandatory=$true)] $classDetails
    )
    deneyin
    {
        $classId $classDetails.ClassId =
        $userId $classDetails.UserId =
        $role $classDetails.Role =
        $className $classId =
        varsa ($classDetails.ClassName - ne $null- ve $classDetail.ClassName.Length - ne 0)
        {
            $className $classDetails.ClassName =
        }
        $getAssignmentsUri = ("{0} / classes('{1}')/assignments?TargetUserId {2} & UserClassRole = {3} =" -f $educationEndpoint, $classId, $userId, $role)
        $assignments $null =
        $assignments Çağır RequestWithRetry =-url $getAssignmentsUri - sınıf kodu $classId - SınıfAdı $className - OperationName "GetAssignments"
        $outputstring = ""
        varsa ($assignments - ne $null)
        {
            $valueStartIndex = ($assignments.content.indexof('"value":') + 8)
            $valueEndIndex $assignments.content.Length =
            $valueString $assignments.content.substring ($valueStartIndex, $valueEndIndex $valueStartIndex -1) =

            $valueString $valueString.TrimEnd("]") =
            $valueString $valueString.TrimStart("[") =
            $indexValues = (($valuestring | seçin dize ' "sınıf" kimliği:' - AllMatches). Matches.Index)
            Yazma ana bilgisayar "Atamaları $className sınıf için Retrieved $($indexValues.count)"
            $assignmentsStrings = @ ()
            için ($i = 0; $i - lt $indexValues.count; $i ++)
            {
                varsa ($i - ne $indexValues.count -1)
                {
                    $assignmentsStrings += $valueString.substring (($indexValues [$i] -1), ($indexValues [$i + 1] - $indexValues [$i] -1))
                }
                başka
                {
                    $assignmentsStrings += $valueString.substring(($indexValues[$i]-1) ($valueString.Length - $indexValues [$i] + 1))
                }

                varsa ($role - eq "Öğrenci")
                {
                    $submissionsIndex $assignmentsStrings[$i].indexof('"submissions":[') =
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings .substring (0, $submissionsIndex + 15)
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings + "]}"
                }
            }
            için ($i = 0; $i - lt $assignmentsStrings.Length; $i ++)
            {
                $assignmentString $assignmentsStrings [$i] =
                $assignmentJson $assignmentString = | ConvertFrom Json
                $assignmentId $assignmentJson.id =
                Yazma ana bilgisayar "Başlama gönderimler $($assignmentJson.displayName) atama için"
                $sumbmissionsEndpoint = ("{0} / classes('{1}')/assignments('{2}')/submissions?TargetUserId {3} & UserClassRole = {4} =" -f $educationEndpoint, $classId, $assignmentId, $userId, $role)
                $submissions Çağır RequestWithRetry - sınıf kodu $classId =-url $sumbmissionsEndpoint - SınıfAdı $className - OperationName "GetSubmissions"
                varsa ($submissions - ne $null- ve $submissions. Content.Length - ne 0)
                {
                    $submissionsJson $submissions.content = | ConvertFrom Json
                    Yazma ana bilgisayar "Retrieved $($submissionsJson.value.count) gönderimler $($assignmentJson.displayName) atama için"
                    $valueStartIndex = ($submissions.content.indexof('"value":') + 9)
                    $valueEndIndex $submissions.content.lastindexof("}") =
                    $submissionsString $submissions.content.substring ($valueStartIndex, $valueEndIndex $valueStartIndex -1) =
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings. TrimEnd("]}")
                    $assignmentsStrings [$i] = [$i] $assignmentsStrings + $submissionsString + "]}"
                }
            }

            $completeAssigmentsString = "["
            varsa ($assignmentsStrings.Length - eq 0)
            {
                $completeAssigmentsString $completeAssigmentsString = + "]"
            }
            başka
            {
                için ($i = 0; $i - lt $assignmentsStrings.Length; $i ++)
                {
                    varsa ($i - eq $assignmentsStrings.Length -1)
                    {
                        $completeAssigmentsString = $completeAssigmentsString + $assignmentsStrings [$i] + "]"
                    }
                    başka
                    {
                        $completeAssigmentsString $completeAssigmentsString + $assignmentsStrings [$i] + "," =
                    }
                }
            }
            $outputstring = ' {"Sınıf kimliği": "' + $classId + '","SınıfAdı": "' + $className +' atamaları" ",":' + $completeAssigmentsString + '}'
            $dateTimeStamp = $(alma tarihi - f yyyy-MM-dd)
            $fileName = $directoryPath + "\" + $className + "_" + $userId + "_" + $dateTimeStamp + ".json"
            $outputstring | $FileName dışarı dosya
            Yazma Host("Assignments file for $className is generated at $fileName")
            $classDetails.GetSubmissionsProcessed = "True"
            $script: userClassDetails | Dışarı aktarma Csv-yol $($directoryPathOfFile) - NoTypeInformation-zorla
        }
    }
    Fiili
    {
        yazma hatası $_. Exception.Message
    }

}                                           

$directoryPathOfFile = (öğe get-yol $($userClassDetailsFile)). Tam
$directoryPath = (öğe get-yol ". \"-ayrıntılı). Tam
$script: authHeaders = Get-AuthHeaders
$script: userClassDetails alma-csv $userClassDetailsFile =

$progressTracker = 1;
Her aracılığıyla #loop çizgi ve getsubmissionsprocessed sütunu yanlışsa gönderimler alma
foreach ($script içinde $classDetail: userClassDetails)
{
    Yazma ilerleme-etkinliği "Kullanıcı atamaların başlama"-Durum "sınıf için işleme: $($classDetail.classId)" - TamamlanmaYüzdesi ($progressTracker / $($ komut dosyası: userClassDetails | Measure-Object) .count * 100)
    varsa ($classDetail.GetSubmissionsProcessed - eq "False")
    {
        Yazma ana bilgisayar "$($classDetail.ClassName) atamalarını başlama"
        Get-atamaları - classDetails $classDetail
    }
    $progressTracker ++
}

$script: getAssignmentsReport | Dışarı aktarma Csv-yol.\GetAssignmentsReport.csv - NoTypeInformation
Yazma ana bilgisayar "file(GetAssignmentsReport.csv) $directoryPath\GetAssignmentsReport.csv oluşturulan raporu"
Yazma ana "Updated sınıf file($($directoryPathOfFile)) Ayrıntılar ve güncelleştirilmiş Silueti ise $($directoryPathOfFile)"

Office yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Office Insider Programına Katılın

Bu bilgi yararlı oldu mu?

Görüşleriniz için teşekkür ederiz!

Geri bildiriminiz için teşekkürler! Office destek temsilcilerimizden biriyle görüşmeniz yararlı olabilir.

×