PowerShell/VMware/Migration Folder and Permissions vSphere

77 lines
2.8 KiB
Plaintext

Import-Module VMware.PowerCLI
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Scope Session -Confirm:$false
# Connect to source vCenter
$sourceVC = "xxx"
$sourceUser = "xxx"
$sourcePassword = "xxx"
Connect-VIServer -Server $sourceVC -User $sourceUser -Password $sourcePassword
# Connect to destination vCenter
$destVC = "xxx"
$destUser = "xxx"
$destPassword = "xxx"
Connect-VIServer -Server $destVC -User $destUser -Password $destPassword
# Funktion zum Kopieren von Ordnern und Berechtigungen für AD-Benutzer
function Copy-FolderAndADPermissions {
param (
[Parameter(Mandatory = $true)]
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.FolderImpl]$SourceFolder,
[Parameter(Mandatory = $true)]
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.FolderImpl]$DestParentFolder
)
# Ordner im Ziel erstellen
$newFolder = New-Folder -Name $SourceFolder.Name -Location $DestParentFolder
# Berechtigungen kopieren, nur für AD-Benutzer, Achtung Escapen! Meine Domain ist lab.home und im VCSA mit LAB\ hinterlegt
$permissions = Get-VIPermission -Entity $SourceFolder | Where-Object { $_.Principal -match "LAB\\" }
foreach ($perm in $permissions) {
try {
New-VIPermission -Entity $newFolder -Principal $perm.Principal -Role $perm.Role -Propagate $perm.Propagate
}
catch {
Write-Warning "Konnte Berechtigung für $($perm.Principal) nicht setzen: $_"
}
}
# Rekursiv Unterordner kopieren
$subFolders = Get-Folder -Location $SourceFolder
foreach ($subFolder in $subFolders) {
Copy-FolderAndADPermissions -SourceFolder $subFolder -DestParentFolder $newFolder
}
}
# Übergeordneten Quellordner angeben
$sourceParentFolderName = "XXX" # Nur den Namen des Ordners angeben
$sourceDatacenter = Get-Datacenter -Name "Homelab" #VCSA Datacenter angeben
# Quellordner abrufen
$sourceParentFolder = Get-Folder -Name $sourceParentFolderName -Location $sourceDatacenter
# Prüfen, ob der Quellordner gefunden wurde
if ($sourceParentFolder -eq $null) {
Write-Error "Der Quellordner '$sourceParentFolderName' konnte nicht gefunden werden."
exit
}
# Zielordner angeben & DataCenter
$destParentFolderName = "Copy" # Ersetze mit dem tatsächlichen Namen des Zielordners
$destParentFolder = Get-Folder -Name $destParentFolderName -Location (Get-Datacenter -Name "Nested Lab Site A")
# Prüfen, ob der Zielordner gefunden wurde
if ($destParentFolder -eq $null) {
Write-Error "Der Zielordner '$destParentFolderName' konnte nicht gefunden werden."
exit
}
# Ordner und Berechtigungen für AD-Benutzer kopieren
Copy-FolderAndADPermissions -SourceFolder $sourceParentFolder -DestParentFolder $destParentFolder
# Trennung von vCenter-Servern
Disconnect-VIServer -Server $sourceVC -Confirm:$false
Disconnect-VIServer -Server $destVC -Confirm:$false