Convertir des dossiers virtuels dans Remote Desktop Manager

Méthode manuelle

La suppression des dossiers virtuels peut être effectuée en éditant manuellement chaque dossier virtuel, en enregistrant les modifications et en les convertissant en dossiers réels. Cependant, ce processus devient chronophage lorsqu'on traite un nombre significatif de dossiers virtuels, car il nécessite de les convertir un par un.

Méthode PowerShell

Avant de procéder avec la méthode PowerShell, veuillez noter ce qui suit :

  • Cette méthode supprime tous les dossiers virtuels dans les coffres de la source de données.

  • Supprimer les dossiers en double avant d'exécuter le script PowerShell depuis la nouvelle entrée.

  1. Lancer Remote Desktop Manager en tant qu'administrateur en cliquant avec le bouton droit sur l'application et en choisissant Exécuter en tant qu'administrateur.

  2. Sélectionner les coffres de sources de données à partir desquels vous voulez convertir tous les dossiers virtuels dans le Volet de navigation.

  3. Ajouter une nouvelle entrée.

  4. Aller à Session – PowerShell pour créer une entrée de session PowerShell. PowerShell session entry

  5. Nommer l'entrée et choisir le dossier dans lequel vous souhaitez la créer.

  6. Définir l'entrée sur Script Intégré. Embedded script

  7. Cliquez sur Modifier le script intégré. Edit embedded script

  8. Ajouter le script suivant :

    # Check if Remote Desktop Manager PS module is installed
    
    if (-not (Get-Module Devolutions.PowerShell -ListAvailable)) {
    
       Install-Module Devolutions.PowerShell -Scope CurrentUser
    
    }
    
    $beforeAllGroups = Get-Date
    
    $vaults = Get-RDMVault
    
    foreach ($vault in $vaults) {
    
       Set-RDMCurrentRepository -Repository $vault
    
       $vaultname = $vault.Name
    
       Write-Host "Current Vault is $vaultname"
    
       # Get all entries' folder path
    
       $sessions = Get-RDMSession
    
       $allGroups = @()
    
       foreach ($session in $sessions) {
    
           # Split the group folder location for each shortcut
    
           $tempFolder = $session.Group
    
           $shortcuts = $tempFolder.split(';')
    
           foreach ($shortcut in $shortcuts) {
    
               $folder = $shortcut
    
               if ($folder) {
    
                   $levels = $folder.split('\')
    
                   $nblevels = 1
    
                   $Groupfolder = ""
    
                   foreach ($level in $levels) {
    
                      $name = $level
    
                       if ($nblevels -eq 1) {
    
                           $Groupfolder = $name
    
                       } else {
    
                           $Groupfolder = "$Groupfolder\$name"
    
                       }
    
                       $item = New-Object PSObject -Property @{
    
                           Name = $name
    
                           Group = $Groupfolder
    
                           Levels = $nbLevels
    
                       }
    
                       $allGroups += $item
    
                       $nblevels++
    
                   }
    
               }
    
           }
    
       }
    
       # Get all folders that exist in the database
    
       $groups = Get-RDMSession | Where-Object { $_.ConnectionType -eq "Group" }
    
       $realGroups = @()
    
       foreach ($group in $groups) {
    
           # Split the group folder location for each shortcut
    
           $tempFolder = $group.Group
    
           $shortcuts = $tempFolder.split(';')
    
           foreach ($shortcut in $shortcuts) {
    
               $folder = $group.Group
    
               if ($folder) {
    
                   $levels = $folder.split('\')
    
                   $nbLevels = $levels.Count
    
                   $name = $group.Name
    
                   $item = New-Object PSObject -Property @{
    
                       Name = $name
    
                       Group = $folder
    
                       Levels = $nbLevels
    
                   }
    
                   $realGroups += $item
    
               }
    
           }
    
       }
    
       # Sort arrays and extract virtual folders
    
       $realGroups = $realGroups | Sort-Object -Property Levels, Name, Group -Unique
    
       $allGroups = $allGroups | Sort-Object -Property Levels, Name, Group -Unique
    
       $results = $allGroups | Where-Object { $realGroups.Group -notcontains $_.Group }
    
       $results = $results | Sort-Object -Property Levels, Name, Group -Unique
    
       # Convert virtual folders in the database
    
       foreach ($group in $results) {
    
           $name = $group.Name
    
           $folder = $group.Group
    
           try {
    
               $session = New-RDMSession -Name $name -Group $folder -Type Group -SetSession -ErrorAction Stop
    
               Update-RDMUI
    
           } catch {
    
               # Split the parent folder
    
               $tempFolder = $folder.Replace("\$name", '')
    
               $parents = $tempFolder.split('\')
    
               foreach ($parent in $parents) {
    
                   try {
    
                       $exist = Get-RDMSession -Name $parent -ErrorAction Stop
    
                   } catch {
    
                       $name = $parent
    
                       $index = $parents.IndexOf($parent)
    
                       $folder = ""
    
                       for ($item = 0; $item -le $index; $item++) {
    
                           if ($item -gt 0) {
    
                               $folder += "\"
    
                           }
    
                           $folder += $parents[$item]
    
                       }
    
                       $session = New-RDMSession -Name $name -Group $folder -Type Group -SetSession
    
                       Update-RDMUI
    
                       Write-Host "Virtual folder $name has been successfully created in the database!"
    
                   }
    
               }
    
               $name = $group.Name
    
               $folder = $group.Group
    
               $session = New-RDMSession -Name $name -Group $folder -Type Group -SetSession
    
               Update-RDMUI
    
           }
    
           Write-Host "Virtual folder $name has been successfully created in the database!"
    
       }
    
    }
    
    $afterCreatingGroups = Get-Date
    
    Write-Host "Time taken to convert virtual folders: $(($afterCreatingGroups).Subtract($beforeAllGroups).Seconds) second(s)"
    
  9. Cliquer sur OK pour appliquer le script.

  10. Cliquer sur OK pour enregistrer les paramètres de l'entrée et fermer la fenêtre.

  11. Cliquer sur Ouvrir la Session pour exécuter l'entrée. Open session

Le script va maintenant convertir tous les dossiers virtuels dans les coffres de sources de données.

Devolutions Forum logo Donnez-nous vos commentaires