Atamaları betikleri - silme

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 .

Ekli Sil - eğitim atamaları, - eğitim atamalar ve Get - ihracat kullanıcı sınıflar için power Kabuk komut içeren.

Sil - eğitim atamaları

< #
   . Doğrulanır
    Csv dosyası olarak belirtilen sınıf kümesi'teki kullanıcının eğitim atamaları verileri silin.
    . Açıklama
    Komut dosyası kullanıcı sınıf ayrıntılarını giriş csv dosyasından okur. Gönderimler her atama ve atamaları alın ve sonra gönderimler silmek için bir rapor file(DeleteAssignmentsReport.csv) arama bilgilerini ek bilgi için ayrıca oluşturmak. Gönderim silme işlemini bitirdiğinizde DeleteSubmissionsProcessed sütun için belirli bir sınıf true olarak 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
    .\Delete-EduAssignments.ps1 - userClassDetailsFile < kullanıcı sınıf ayrıntıları csv dosyasının tam yolunu >
    Bu tüm gönderileri siler ancak kullanıcı bilgilerini sınıf kaldırmaz
    .\Delete-EduAssignments.ps1 - userClassDetailsFile < kullanıcı sınıf ayrıntıları csv dosyasının tam yolunu > - removeMemberFromClass
    Bu tüm gönderileri silme ve kullanıcı bilgilerini sınıf kaldırma
   . 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
   . Parametre removeMemberFromClass geçiş
   Bu parametre kullanırız olduğunda her sınıf kullanıcı bilgilerini kaldıracak
   . 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,

[parameter(Mandatory=$false)]
    [değiştirme] $removeMemberFromClass
)
# Yükleme ADAL
Türü Ekle-yol ".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
$educationEndpoint "https://graph.microsoft.com/beta/education/" =
$script: userClassDetails = @ ()
$script: deleteAssignmentsReport = @ ()
$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=$true)] [ValidateSet (', 'Sil' ignorecase Get' $true =)] $httpmethod,
        [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 =-yöntemi $httpmethod - URI $url-ü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: deleteAssignmentsReport += [PSCustomObject] @{
                RequestUrl $url =
                Yöntem $httpmethod =
                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: deleteAssignmentsReport += [PSCustomObject] @{
                RequestUrl $url =
                Yöntem $httpmethod =
                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
            }
        }
    }
}

Sınıf #Remove üyesinden
Kaldır MemberFromClass işlevi
{
    parametre (
        [Parameter(Mandatory=$true)] $classDetails
    )

$removeMemberUrl = "{0}/v1.0/groups/{1}/members/{2}/'$ref" -f $graphEndpoint, $($classDetails.ClassId), $($classDetails.UserId)
    deneyin
    {
        Çağır RequestWithRetry-url $removeMemberUrl - HttpMethod öğesi Sil - sınıf kodu $($classDetails.ClassId) - SınıfAdı $($classDetails.ClassName) - OperationName "RemoveMemberfromClass" | Dışarı Null
    }
    Fiili
    {
        Durum $_
    }

}    

Delete atamaları işlevi
{
    parametre (
        [Parameter(Mandatory=$true)] $classDetail
    )

deneyin
    {
        $classId $classDetail.ClassId =
        $className $classDetail.ClassName =
        $userId $classDetail.UserId =
        $role $classDetail.Role =
        $getAssignmentsUri = ("{0} / classes('{1}')/assignments?TargetUserId {2} & UserClassRole = {3} =" -f $educationEndpoint, $classId, $userId, $role)
        $assignments $null =
        $assignments Çağır RequestWithRetry =-url $getAssignmentsUri - HttpMethod öğesi $className - sınıf kodu $classId - SınıfAdı Get - OperationName "GetAssignments"
        varsa ($assignments - ne $null- ve $assignments.content - ne $null- ve $role - eq "Öğrenci"))
        {
            $assignmentsCount = ((($assignments.content) | ConvertFrom-Json) .value) .count
            Yazma ana bilgisayar "$assignmentsCount atamalarını $className sınıf Retrieved"
            $assignmentsTracker = 0
            foreach ($assignment içinde (($assignments.content) | ConvertFrom-Json) .value)
            {
                $assignmentName $assignment.displayName =
                $assignmentId $assignment.id =
                $submissions $assignment.submissions =
                Yazma ana bilgisayar "Silme gönderimler $($assignmentName) için"
                $submissionsTracker = 0
                foreach ($submission $submissions içinde)
                {
                    $deleteSDSSubmissionUri = "{0} / beta/eğitim/sınıflar / {1} /assignments/ {2} /submissions/ {3} ?TargetUserId = {4} & UserClassRole Öğrenci =" -f $graphEndpoint, $classId, $assignmentId, $($submission.id), $userId
                    varsa (($submissionsTracker - eq ($submissions. Uzunluk -1))- ve ($assignmentsTracker - eq ($assignmentsCount - 1))- ve ($removeMemberFromClass.IsPresent))
                    {
                        Yazma ana "silme gönderim hem de kullanıcı için classinfo"
                        $deleteSDSSubmissionUri $deleteSDSSubmissionUri = + "& CleanupUserClassData = true"
                    }
                    $deleteResponse Çağır RequestWithRetry =-url $deleteSDSSubmissionUri - HttpMethod öğesi silme - sınıf kodu $classId - SınıfAdı $className - OperationName "DeleteSubmission"
                    varsa ($deleteResponse - ne $null- ve $deleteResponse.Content.Length - ne 0 - ve $submissionsTracker - eq ($submissions. Uzunluk -1))
                    {
                        $classDetail.DeleteSubmissionsProcessed = "True"
                        $script: userClassDetails | Dışarı aktarma Csv-yol $($directoryPathOfFile) - NoTypeInformation-zorla
                    }
                    $submissionsTracker ++
                }
                $assignmentsTracker ++
            }
        }
    }
    Fiili
    {   
        Durum $_
    }
}

$directoryPathOfFile = (öğe get-yol $($userClassDetailsFile)). Tam
$script: authHeaders = Get-AuthHeaders
$script: userClassDetails alma-csv $userClassDetailsFile =

$progressTracker = 0;
foreach ($script içinde $classDetail: userClassDetails)
{
    Yazma ilerleme-etkinliği "Kullanıcı atamaların silme"-Durum "sınıf için işleme: $classDetail.classId" - TamamlanmaYüzdesi ($progressTracker/$script:userClassDetails.count * 100)
    varsa ($classDetail.DeleteSubmissionsProcessed - eq "False")
    {
        deneyin
        {
            if($removeMemberFromClass.IsPresent)
            {
                Yazma ana bilgisayar "$($classDetail.ClassName) kullanıcıdan silme"
                Kaldır MemberFromClass - classDetails $classDetail
            }
            Yazma ana bilgisayar "$($classDetails.ClassName) için kullanıcı silme atamalarını"
            Delete atamaları - classDetails $classDetail
        }
        Fiili
        {
            yazma hatası $_. Exception.Message
        }
    }
    $progressTracker ++
}

$directoryPath = (öğe get-yol ". \"-ayrıntılı). Tam
$script: deleteAssignmentsReport | Dışarı aktarma Csv-yol.\DeleteAssignmentsReport.csv - NoTypeInformation-zorla
Yazma ana bilgisayar "file(DeleteAssignmentsReport.csv) $directoryPath\DeleteAssignmentsReport.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.

×