PowerShell - For-Each in Azure FileShare
Moin Administratoren,
ich hab eine Frage bezüglich PowerShell und Azure.
Derzeit versuche ich einen Invoke auszuführen für jeden Ordner in meinem FileShare, der eine ChangeDetection starten soll, damit meine on-prem Server Veränderungen an meinem FileShare mitbekommen und synchronisieren. Microsoft macht das täglich automatisch - aber wir benötigen es in einem Zeitraffer von einer Stunde.
Dafür nutze ich folgenden Code (der prinzipiell auch funktioniert)
Ziel ist es, dass ich auf jedem Ordner in meinem FileShare den "Invoke-AzStorageSyncChangeDetection" separat ausführe, weil lediglich 10.000 Veränderungen pro Durchlauf "erlaubt" sind und die Sub-directories nicht mitgescannt werden (-recursive fehlt, weshalb nur die Ordner & Dateien in meinem übergeordneten Ordner synchronisiert werden)
Das Skript verweist auf den Root-Ordner meines FileShares und von da aus kann man auf die einzelnen Hauptverzeichnisse verweisen.
Wenn ich jetzt jedoch einen Ordner in meinem Root-Verzeichnis mit -recursive (also inkl. Sub-Ordner) synchronisieren möchte erhalte ich diese Meldung:
Ta-da - die 10.000 Dateien wurden erreicht :X
Ich bin schon seit 2 Tagen dabei aber habe noch keine Möglichkeit gefunden, die ansatzweise in die richtige Richtung geht.
Bitte nimmt es nicht als Versuch auf, dass ich meine Arbeit nicht machen möchte - ich kriege es wirklich einfach nicht hin :/
Wäre es auf einem lokalen System hätte ich es hinbekommen - aber die Cloud cmdlets verwirren mich extrem
Vielleicht kann mir einer weiterhelfen oder Anreize geben, wie ich das evtl. lösen könnte?
VG
Celiko
ich hab eine Frage bezüglich PowerShell und Azure.
Derzeit versuche ich einen Invoke auszuführen für jeden Ordner in meinem FileShare, der eine ChangeDetection starten soll, damit meine on-prem Server Veränderungen an meinem FileShare mitbekommen und synchronisieren. Microsoft macht das täglich automatisch - aber wir benötigen es in einem Zeitraffer von einer Stunde.
Dafür nutze ich folgenden Code (der prinzipiell auch funktioniert)
<#
.DESCRIPTION
A Runbook example which continuously check for files and directories changes in recursive mode
For a specific Azure File Share in a specific Sync Group / Cloud Endpoint
Using the Run As Account (Service Principal in Azure AD)
.NOTES
Filename : Enable-ImmediateFileSync
Author : Charbel Nemnom
Version : 1.0
Date : 24-August-2019
Updated : 26-August-2019
.LINK
To provide feedback or for further assistance please visit:
https://charbelnemnom.com
Yess, habe es aus dem Internet von einem MS-Teacher übernommen.
Param (
[Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()]
[String] $AzureSubscriptionId,
[Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()]
[String] $ResourceGroupName,
[Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()]
[String] $StorageSyncServiceName,
[Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()]
[String] $SyncGroupName,
[Parameter(Mandatory = $true)][ValidateNotNullOrEmpty()]
[String] $Path
)
#Die Parameter kann man über Eingabefelder in der Azure definieren, um die Skripte flexibler zu gestalten.
$connectionName = "AzureRunAsConnection"
Try {
#! Get the connection "AzureRunAsConnection "
$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
Write-Output "Logging in to Azure..."
Connect-AzAccount -ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
Catch {
If (!$servicePrincipalConnection) {
$ErrorMessage = "Connection $connectionName not found..."
throw $ErrorMessage
}
Else {
Write-Error -Message $_.Exception
throw $_.Exception
}
}
Select-AzSubscription -SubscriptionId $AzureSubscriptionId
#! Get Cloud Endpoint Name
$azsync = Get-AzStorageSyncCloudEndpoint -ResourceGroupName "$ResourceGroupName" -StorageSyncServiceName $StorageSyncServiceName `
-SyncGroupName "$SyncGroupName"
Write-Output "Get Azure StorageSync Cloud Endpoint Name: $($azsync.CloudEndpointName)"
Write-Output $azsync
#! Invoke-AzStorageSyncChangeDetection - ab hier beginnt die eigentliche Aktion.
Write-Output "Check for files and directories changes for $StorageSyncServiceName in $SyncGroupName"
Invoke-AzStorageSyncChangeDetection -ResourceGroupName $ResourceGroupName -StorageSyncServiceName $StorageSyncServiceName `
-SyncGroupName $SyncGroupName -CloudEndpointName $azsync.CloudEndpointName -DirectoryPath $Path
Write-Output ("")
Ziel ist es, dass ich auf jedem Ordner in meinem FileShare den "Invoke-AzStorageSyncChangeDetection" separat ausführe, weil lediglich 10.000 Veränderungen pro Durchlauf "erlaubt" sind und die Sub-directories nicht mitgescannt werden (-recursive fehlt, weshalb nur die Ordner & Dateien in meinem übergeordneten Ordner synchronisiert werden)
Das Skript verweist auf den Root-Ordner meines FileShares und von da aus kann man auf die einzelnen Hauptverzeichnisse verweisen.
Wenn ich jetzt jedoch einen Ordner in meinem Root-Verzeichnis mit -recursive (also inkl. Sub-Ordner) synchronisieren möchte erhalte ich diese Meldung:
Invoke-AzStorageSyncChangeDetection : Long running operation failed with status 'Failed'. Additional Info:'Change
detection operation failed: detection process couldn't complete due to large quantity of items being scanned.
Additional information:
Error code: 0x80C83095 MgmtChangeDetectionTooManyItems'
Code: MgmtBadRequest
Message: Change detection operation failed: detection process couldn't complete due to large quantity of items being
scanned.
Additional information:
Error code: 0x80C83095 MgmtChangeDetectionTooManyItems
Target:
At line:73 char:1
+ Invoke-AzStorageSyncChangeDetection -ResourceGroupName $ResourceGroup ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Invoke-AzStorageSyncChangeDetection], StorageSyncCloudException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.StorageSync.CloudEndpoint.InvokeChangeDetectionCommand
Ich bin schon seit 2 Tagen dabei aber habe noch keine Möglichkeit gefunden, die ansatzweise in die richtige Richtung geht.
Bitte nimmt es nicht als Versuch auf, dass ich meine Arbeit nicht machen möchte - ich kriege es wirklich einfach nicht hin :/
Wäre es auf einem lokalen System hätte ich es hinbekommen - aber die Cloud cmdlets verwirren mich extrem
Vielleicht kann mir einer weiterhelfen oder Anreize geben, wie ich das evtl. lösen könnte?
VG
Celiko
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 629795
Url: https://administrator.de/contentid/629795
Ausgedruckt am: 21.11.2024 um 14:11 Uhr
2 Kommentare
Neuester Kommentar
Dann mach dir halt eine Variable mit allen Verzeichnissen und dieses Array teilst du dann auf Blöcke à 10000 Ordner auf (for-Loop) und schickst jeden Block an die "Invoke-AzStorageSyncChangeDetection" Function.