From 6cdec70915d0780dbe67a1232aaece1bfe8ecd37 Mon Sep 17 00:00:00 2001 From: Tyrix <578264+Tyrix@users.noreply.github.com> Date: Fri, 27 Mar 2026 11:53:27 +0100 Subject: [PATCH 1/3] Feature (RDP): Active Directory computer import (OU subtree, flat hierarchy) --- .../Resources/Strings.Designer.cs | 110 +++++++- .../Resources/Strings.resx | 38 ++- .../ActiveDirectoryComputerRecord.cs | 8 + .../ActiveDirectoryComputerSearcher.cs | 103 ++++++++ .../GroupNameValidator.cs | 5 +- Source/NETworkManager/ProfileDialogManager.cs | 28 ++- .../ViewModels/ImportAdComputersViewModel.cs | 237 ++++++++++++++++++ .../ViewModels/RemoteDesktopHostViewModel.cs | 15 ++ .../Views/ImportAdComputersChildWindow.xaml | 113 +++++++++ .../ImportAdComputersChildWindow.xaml.cs | 29 +++ .../Views/RemoteDesktopHostView.xaml | 27 +- 11 files changed, 708 insertions(+), 5 deletions(-) create mode 100644 Source/NETworkManager.Utilities/ActiveDirectory/ActiveDirectoryComputerRecord.cs create mode 100644 Source/NETworkManager.Utilities/ActiveDirectory/ActiveDirectoryComputerSearcher.cs create mode 100644 Source/NETworkManager/ViewModels/ImportAdComputersViewModel.cs create mode 100644 Source/NETworkManager/Views/ImportAdComputersChildWindow.xaml create mode 100644 Source/NETworkManager/Views/ImportAdComputersChildWindow.xaml.cs diff --git a/Source/NETworkManager.Localization/Resources/Strings.Designer.cs b/Source/NETworkManager.Localization/Resources/Strings.Designer.cs index afaa7510d8..7354485a37 100644 --- a/Source/NETworkManager.Localization/Resources/Strings.Designer.cs +++ b/Source/NETworkManager.Localization/Resources/Strings.Designer.cs @@ -1,4 +1,4 @@ -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // Dieser Code wurde von einem Tool generiert. // Laufzeitversion:4.0.30319.42000 @@ -294,6 +294,69 @@ public static string Accent_Yellow { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die Active Directory import failed. ähnelt. + /// + public static string ActiveDirectoryImportFailed { + get { + return ResourceManager.GetString("ActiveDirectoryImportFailed", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Options ähnelt. + /// + public static string ActiveDirectoryImportOptions { + get { + return ResourceManager.GetString("ActiveDirectoryImportOptions", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Load or unlock a profile file before importing computers. ähnelt. + /// + public static string ActiveDirectoryImportRequiresProfileFile { + get { + return ResourceManager.GetString("ActiveDirectoryImportRequiresProfileFile", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Imported {0} computer profile(s). Skipped {1} duplicate name(s) in the target group. Skipped {2} without a DNS host name. ähnelt. + /// + public static string ActiveDirectoryImportSummary { + get { + return ResourceManager.GetString("ActiveDirectoryImportSummary", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Uses your current Windows credentials to read from Active Directory. The account must be allowed to enumerate computer objects under the search base (subtree). ähnelt. + /// + public static string ActiveDirectoryImportUsesCurrentCredentials { + get { + return ResourceManager.GetString("ActiveDirectoryImportUsesCurrentCredentials", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Search base (OU DN) ähnelt. + /// + public static string ActiveDirectorySearchBase { + get { + return ResourceManager.GetString("ActiveDirectorySearchBase", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die OU=Computers,DC=example,DC=com ähnelt. + /// + public static string ActiveDirectorySearchBaseWatermark { + get { + return ResourceManager.GetString("ActiveDirectorySearchBaseWatermark", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die Add ähnelt. /// @@ -3895,6 +3958,15 @@ public static string ExampleTag { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die Exclude disabled computer accounts ähnelt. + /// + public static string ExcludeDisabledComputerAccounts { + get { + return ResourceManager.GetString("ExcludeDisabledComputerAccounts", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die Execution Policy ähnelt. /// @@ -4886,6 +4958,24 @@ public static string Import { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die Import computers from Active Directory ähnelt. + /// + public static string ImportComputersFromActiveDirectory { + get { + return ResourceManager.GetString("ImportComputersFromActiveDirectory", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Import computers from Active Directory... ähnelt. + /// + public static string ImportComputersFromActiveDirectoryDots { + get { + return ResourceManager.GetString("ImportComputersFromActiveDirectoryDots", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die Import / Export ähnelt. /// @@ -10161,6 +10251,24 @@ public static string Tags { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die Target profile group ähnelt. + /// + public static string TargetProfileGroup { + get { + return ResourceManager.GetString("TargetProfileGroup", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Existing or new group name ähnelt. + /// + public static string TargetProfileGroupWatermark { + get { + return ResourceManager.GetString("TargetProfileGroupWatermark", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die Taupe ähnelt. /// diff --git a/Source/NETworkManager.Localization/Resources/Strings.resx b/Source/NETworkManager.Localization/Resources/Strings.resx index 80c5d2473c..16debae4bb 100644 --- a/Source/NETworkManager.Localization/Resources/Strings.resx +++ b/Source/NETworkManager.Localization/Resources/Strings.resx @@ -1,4 +1,4 @@ - +