Run diagnostics actions off UI thread

This commit is contained in:
Meik
2026-03-18 15:03:49 +01:00
parent 66ce92eadd
commit 518087289e

View File

@@ -180,12 +180,13 @@ namespace LiamWorkflowDiagnostics
ApplyMatrix42Environment(ServerNameTextBox.Text, UseHttpsCheckBox.IsChecked ?? false); ApplyMatrix42Environment(ServerNameTextBox.Text, UseHttpsCheckBox.IsChecked ?? false);
ApplyLicense(LicenseTextBox.Text); ApplyLicense(LicenseTextBox.Text);
_session = new ProviderTestSession(msg => AppendLog(msg)); var session = new ProviderTestSession(msg => AppendLog(msg));
var success = await _session.InitializeAsync(providerData, maskToken, CreateProviderInstance, providerConfigClassId, providerConfigObjectId); _session = session;
var success = await Task.Run(() => session.InitializeAsync(providerData, maskToken, CreateProviderInstance, providerConfigClassId, providerConfigObjectId));
if (success) if (success)
{ {
AppendLog("Provider initialisiert und authentifiziert.", LogLevels.Info); AppendLog("Provider initialisiert und authentifiziert.", LogLevels.Info);
ResultTextBox.Text = _session.SanitizedConfigJson; ResultTextBox.Text = session.SanitizedConfigJson;
} }
else else
{ {
@@ -556,14 +557,17 @@ namespace LiamWorkflowDiagnostics
try try
{ {
var maxDepth = _session.Provider.MaxDepth; var provider = _session.Provider;
var configurationId = !string.IsNullOrWhiteSpace(_session.ProviderConfigObjectId)
? _session.ProviderConfigObjectId
: (_session.ProviderConfigId ?? string.Empty);
var runWhatIf = IsWhatIfEnabled;
var maxDepth = provider.MaxDepth;
AppendLog($"Lese DataAreas (MaxDepth={maxDepth}) ..."); AppendLog($"Lese DataAreas (MaxDepth={maxDepth}) ...");
var result = await LiamWorkflowRuntime.GetDataAreasFromProviderAsync( var result = await Task.Run(() => LiamWorkflowRuntime.GetDataAreasFromProviderAsync(
_session.Provider, provider,
!string.IsNullOrWhiteSpace(_session.ProviderConfigObjectId) configurationId,
? _session.ProviderConfigObjectId runWhatIf));
: (_session.ProviderConfigId ?? string.Empty),
IsWhatIfEnabled);
ResultTextBox.Text = JsonConvert.SerializeObject(result, Formatting.Indented); ResultTextBox.Text = JsonConvert.SerializeObject(result, Formatting.Indented);
if (!result.Success) if (!result.Success)
@@ -578,7 +582,7 @@ namespace LiamWorkflowDiagnostics
return; return;
} }
if (IsWhatIfEnabled && result.AutomaticEnsurePreview != null && result.AutomaticEnsurePreview.Count > 0) if (runWhatIf && result.AutomaticEnsurePreview != null && result.AutomaticEnsurePreview.Count > 0)
{ {
AppendLog($"EnsureNtfsPermissionGroups wurde nur simuliert fuer {result.AutomaticEnsurePreview.Count} Ordner. Details stehen im Result-JSON.", LogLevels.Warning); AppendLog($"EnsureNtfsPermissionGroups wurde nur simuliert fuer {result.AutomaticEnsurePreview.Count} Ordner. Details stehen im Result-JSON.", LogLevels.Warning);
} }
@@ -594,7 +598,7 @@ namespace LiamWorkflowDiagnostics
private async void ExecuteNtfsCreateButton_Click(object sender, RoutedEventArgs e) private async void ExecuteNtfsCreateButton_Click(object sender, RoutedEventArgs e)
{ {
await ExecuteProviderActionAsync("NTFS Folder Create", async () => try
{ {
var provider = EnsureInitializedProvider<cLiamProviderNtfs>("NTFS"); var provider = EnsureInitializedProvider<cLiamProviderNtfs>("NTFS");
var folderPath = GetRequiredText(NtfsCreateFolderPathTextBox.Text, "New Folder Path"); var folderPath = GetRequiredText(NtfsCreateFolderPathTextBox.Text, "New Folder Path");
@@ -611,53 +615,48 @@ namespace LiamWorkflowDiagnostics
var readerSids = ParseIdentifierList(NtfsCreateReaderSidsTextBox.Text, "Reader SIDs"); var readerSids = ParseIdentifierList(NtfsCreateReaderSidsTextBox.Text, "Reader SIDs");
var writerSids = ParseIdentifierList(NtfsCreateWriterSidsTextBox.Text, "Writer SIDs"); var writerSids = ParseIdentifierList(NtfsCreateWriterSidsTextBox.Text, "Writer SIDs");
var result = await LiamWorkflowRuntime.CreateDataAreaAsync( await ExecuteProviderActionAsync("NTFS Folder Create", async () =>
provider,
folderPath,
parentPath,
null,
ownerSids,
readerSids,
writerSids);
return new
{ {
result.Success, var result = await Task.Run(() => LiamWorkflowRuntime.CreateDataAreaAsync(
ResultToken = MapResultToken(result.ResultToken) provider,
}; folderPath,
}, () => parentPath,
{ null,
var provider = EnsureInitializedProvider<cLiamProviderNtfs>("NTFS"); ownerSids,
var folderPath = GetRequiredText(NtfsCreateFolderPathTextBox.Text, "New Folder Path"); readerSids,
var parentPath = NormalizeOptionalText(NtfsCreateParentPathTextBox.Text); writerSids));
if (string.IsNullOrWhiteSpace(parentPath))
{
parentPath = Directory.GetParent(folderPath)?.FullName;
}
if (string.IsNullOrWhiteSpace(parentPath))
throw new InvalidOperationException("Parent Folder Path konnte nicht ermittelt werden.");
var ownerSids = ParseIdentifierList(NtfsCreateOwnerSidsTextBox.Text, "Owner SIDs");
if (ownerSids.Count == 0)
throw new InvalidOperationException("Owner SIDs: mindestens ein Eintrag ist fuer die Ordneranlage erforderlich.");
return CreateWhatIfResult( return new
"NTFS Folder Create",
"Wuerde einen Ordner anlegen und fehlende Gruppen sowie ACLs sicherstellen. Es wurden keine Aenderungen ausgefuehrt.",
new
{ {
ProviderRootPath = provider.RootPath, result.Success,
NewFolderPath = folderPath, ResultToken = MapResultToken(result.ResultToken)
ParentFolderPath = parentPath, };
OwnerSids = ownerSids, }, () =>
ReaderSids = ParseIdentifierList(NtfsCreateReaderSidsTextBox.Text, "Reader SIDs"), {
WriterSids = ParseIdentifierList(NtfsCreateWriterSidsTextBox.Text, "Writer SIDs") return CreateWhatIfResult(
}); "NTFS Folder Create",
}); "Wuerde einen Ordner anlegen und fehlende Gruppen sowie ACLs sicherstellen. Es wurden keine Aenderungen ausgefuehrt.",
new
{
ProviderRootPath = provider.RootPath,
NewFolderPath = folderPath,
ParentFolderPath = parentPath,
OwnerSids = ownerSids,
ReaderSids = readerSids,
WriterSids = writerSids
});
});
}
catch (Exception ex)
{
AppendLog($"NTFS Folder Create fehlgeschlagen: {ex.Message}", LogLevels.Error);
MessageBox.Show(this, ex.ToString(), "NTFS Folder Create", MessageBoxButton.OK, MessageBoxImage.Error);
}
} }
private async void ExecuteNtfsEnsureButton_Click(object sender, RoutedEventArgs e) private async void ExecuteNtfsEnsureButton_Click(object sender, RoutedEventArgs e)
{ {
await ExecuteProviderActionAsync("NTFS Ensure Groups / ACLs", async () => try
{ {
var provider = EnsureInitializedProvider<cLiamProviderNtfs>("NTFS"); var provider = EnsureInitializedProvider<cLiamProviderNtfs>("NTFS");
var folderPath = GetRequiredText(NtfsEnsureFolderPathTextBox.Text, "Folder Path"); var folderPath = GetRequiredText(NtfsEnsureFolderPathTextBox.Text, "Folder Path");
@@ -665,42 +664,49 @@ namespace LiamWorkflowDiagnostics
var readerSids = ParseIdentifierList(NtfsEnsureReaderSidsTextBox.Text, "Reader SIDs"); var readerSids = ParseIdentifierList(NtfsEnsureReaderSidsTextBox.Text, "Reader SIDs");
var writerSids = ParseIdentifierList(NtfsEnsureWriterSidsTextBox.Text, "Writer SIDs"); var writerSids = ParseIdentifierList(NtfsEnsureWriterSidsTextBox.Text, "Writer SIDs");
var ensureTraverse = NtfsEnsureTraverseCheckBox.IsChecked ?? false; var ensureTraverse = NtfsEnsureTraverseCheckBox.IsChecked ?? false;
var result = await LiamWorkflowRuntime.EnsureNtfsPermissionGroupsAsync(
provider,
folderPath,
null,
ownerSids,
readerSids,
writerSids,
ensureTraverse);
return new await ExecuteProviderActionAsync("NTFS Ensure Groups / ACLs", async () =>
{ {
result.Success, var result = await Task.Run(() => LiamWorkflowRuntime.EnsureNtfsPermissionGroupsAsync(
ResultToken = MapResultToken(result.ResultToken) provider,
}; folderPath,
}, () => null,
{ ownerSids,
var provider = EnsureInitializedProvider<cLiamProviderNtfs>("NTFS"); readerSids,
var folderPath = GetRequiredText(NtfsEnsureFolderPathTextBox.Text, "Folder Path"); writerSids,
return CreateWhatIfResult( ensureTraverse));
"NTFS Ensure Groups / ACLs",
"Wuerde fehlende NTFS-Berechtigungsgruppen und ACLs additiv sicherstellen. Es wurden keine Aenderungen ausgefuehrt.", return new
new
{ {
ProviderRootPath = provider.RootPath, result.Success,
FolderPath = folderPath, ResultToken = MapResultToken(result.ResultToken)
OwnerSids = ParseIdentifierList(NtfsEnsureOwnerSidsTextBox.Text, "Owner SIDs"), };
ReaderSids = ParseIdentifierList(NtfsEnsureReaderSidsTextBox.Text, "Reader SIDs"), }, () =>
WriterSids = ParseIdentifierList(NtfsEnsureWriterSidsTextBox.Text, "Writer SIDs"), {
EnsureTraverseGroups = NtfsEnsureTraverseCheckBox.IsChecked ?? false return CreateWhatIfResult(
}); "NTFS Ensure Groups / ACLs",
}); "Wuerde fehlende NTFS-Berechtigungsgruppen und ACLs additiv sicherstellen. Es wurden keine Aenderungen ausgefuehrt.",
new
{
ProviderRootPath = provider.RootPath,
FolderPath = folderPath,
OwnerSids = ownerSids,
ReaderSids = readerSids,
WriterSids = writerSids,
EnsureTraverseGroups = ensureTraverse
});
});
}
catch (Exception ex)
{
AppendLog($"NTFS Ensure Groups / ACLs fehlgeschlagen: {ex.Message}", LogLevels.Error);
MessageBox.Show(this, ex.ToString(), "NTFS Ensure Groups / ACLs", MessageBoxButton.OK, MessageBoxImage.Error);
}
} }
private async void ExecuteAdCreateButton_Click(object sender, RoutedEventArgs e) private async void ExecuteAdCreateButton_Click(object sender, RoutedEventArgs e)
{ {
await ExecuteProviderActionAsync("AD Ensure Service Groups", async () => try
{ {
var provider = EnsureInitializedProvider<cLiamProviderAD>("Active Directory"); var provider = EnsureInitializedProvider<cLiamProviderAD>("Active Directory");
var serviceName = GetRequiredText(AdServiceNameTextBox.Text, "Service Name"); var serviceName = GetRequiredText(AdServiceNameTextBox.Text, "Service Name");
@@ -714,151 +720,171 @@ namespace LiamWorkflowDiagnostics
var ownerSids = ParseIdentifierList(AdOwnerSidsTextBox.Text, "Owner SIDs"); var ownerSids = ParseIdentifierList(AdOwnerSidsTextBox.Text, "Owner SIDs");
var memberSids = ParseIdentifierList(AdMemberSidsTextBox.Text, "Member SIDs"); var memberSids = ParseIdentifierList(AdMemberSidsTextBox.Text, "Member SIDs");
var result = await Task.Run(() => LiamWorkflowRuntime.CreateAdServiceGroups( await ExecuteProviderActionAsync("AD Ensure Service Groups", async () =>
provider, {
serviceName, var result = await Task.Run(() => LiamWorkflowRuntime.CreateAdServiceGroups(
description, provider,
scope, serviceName,
groupType, description,
ownerSids, scope,
memberSids)); groupType,
ownerSids,
memberSids));
return result; return result;
}, () => }, () =>
{
return CreateWhatIfResult(
"AD Ensure Service Groups",
"Wuerde Service-Gruppen im Active Directory anhand der Namenskonvention sicherstellen. Es wurden keine Aenderungen ausgefuehrt.",
new
{
ServiceName = serviceName,
Description = description,
Scope = scope.ToString(),
GroupType = groupType.ToString(),
OwnerSids = ownerSids,
MemberSids = memberSids
});
});
}
catch (Exception ex)
{ {
_ = EnsureInitializedProvider<cLiamProviderAD>("Active Directory"); AppendLog($"AD Ensure Service Groups fehlgeschlagen: {ex.Message}", LogLevels.Error);
var serviceName = GetRequiredText(AdServiceNameTextBox.Text, "Service Name"); MessageBox.Show(this, ex.ToString(), "AD Ensure Service Groups", MessageBoxButton.OK, MessageBoxImage.Error);
var description = NormalizeOptionalText(AdDescriptionTextBox.Text); }
var scope = AdScopeComboBox.SelectedItem is eLiamAccessRoleScopes selectedScope
? selectedScope
: eLiamAccessRoleScopes.Universal;
var groupType = AdGroupTypeComboBox.SelectedItem is ADServiceGroupCreator.ADGroupType selectedType
? selectedType
: ADServiceGroupCreator.ADGroupType.Distribution;
return CreateWhatIfResult(
"AD Ensure Service Groups",
"Wuerde Service-Gruppen im Active Directory anhand der Namenskonvention sicherstellen. Es wurden keine Aenderungen ausgefuehrt.",
new
{
ServiceName = serviceName,
Description = description,
Scope = scope.ToString(),
GroupType = groupType.ToString(),
OwnerSids = ParseIdentifierList(AdOwnerSidsTextBox.Text, "Owner SIDs"),
MemberSids = ParseIdentifierList(AdMemberSidsTextBox.Text, "Member SIDs")
});
});
} }
private async void ExecuteMsTeamsCloneButton_Click(object sender, RoutedEventArgs e) private async void ExecuteMsTeamsCloneButton_Click(object sender, RoutedEventArgs e)
{ {
await ExecuteProviderActionAsync("MsTeams Clone Team", async () => try
{ {
var provider = EnsureInitializedProvider<cLiamProviderMsTeams>("MsTeams"); var provider = EnsureInitializedProvider<cLiamProviderMsTeams>("MsTeams");
var sourceTeamId = GetRequiredText(MsTeamsSourceTeamIdTextBox.Text, "Source Team ID"); var sourceTeamId = GetRequiredText(MsTeamsSourceTeamIdTextBox.Text, "Source Team ID");
var newTeamName = GetRequiredText(MsTeamsNewNameTextBox.Text, "New Team Name"); var newTeamName = GetRequiredText(MsTeamsNewNameTextBox.Text, "New Team Name");
var description = NormalizeOptionalText(MsTeamsDescriptionTextBox.Text);
var visibility = GetSelectedMsTeamsVisibility(); var visibility = GetSelectedMsTeamsVisibility();
var partsToClone = GetSelectedCloneParts();
var additionalMembers = ParseIdentifierList(MsTeamsAdditionalMembersTextBox.Text, "Additional Members"); var additionalMembers = ParseIdentifierList(MsTeamsAdditionalMembersTextBox.Text, "Additional Members");
var additionalOwners = ParseIdentifierList(MsTeamsAdditionalOwnersTextBox.Text, "Additional Owners"); var additionalOwners = ParseIdentifierList(MsTeamsAdditionalOwnersTextBox.Text, "Additional Owners");
var result = await LiamWorkflowRuntime.CloneTeamAsync( await ExecuteProviderActionAsync("MsTeams Clone Team", async () =>
provider, {
sourceTeamId, var result = await Task.Run(() => LiamWorkflowRuntime.CloneTeamAsync(
newTeamName, provider,
NormalizeOptionalText(MsTeamsDescriptionTextBox.Text), sourceTeamId,
visibility, newTeamName,
GetSelectedCloneParts(), description,
string.Join(";", additionalMembers), visibility,
string.Join(";", additionalOwners)); partsToClone,
string.Join(";", additionalMembers),
string.Join(";", additionalOwners)));
return result; return result;
}, () => }, () =>
{
return CreateWhatIfResult(
"MsTeams Clone Team",
"Wuerde ein Team anhand der gewaehlten Clone-Bestandteile klonen. Es wurden keine Aenderungen ausgefuehrt.",
new
{
SourceTeamId = sourceTeamId,
NewTeamName = newTeamName,
Description = description,
Visibility = visibility,
PartsToClone = partsToClone,
AdditionalMembers = additionalMembers,
AdditionalOwners = additionalOwners
});
});
}
catch (Exception ex)
{ {
_ = EnsureInitializedProvider<cLiamProviderMsTeams>("MsTeams"); AppendLog($"MsTeams Clone Team fehlgeschlagen: {ex.Message}", LogLevels.Error);
var sourceTeamId = GetRequiredText(MsTeamsSourceTeamIdTextBox.Text, "Source Team ID"); MessageBox.Show(this, ex.ToString(), "MsTeams Clone Team", MessageBoxButton.OK, MessageBoxImage.Error);
var newTeamName = GetRequiredText(MsTeamsNewNameTextBox.Text, "New Team Name"); }
return CreateWhatIfResult(
"MsTeams Clone Team",
"Wuerde ein Team anhand der gewaehlten Clone-Bestandteile klonen. Es wurden keine Aenderungen ausgefuehrt.",
new
{
SourceTeamId = sourceTeamId,
NewTeamName = newTeamName,
Description = NormalizeOptionalText(MsTeamsDescriptionTextBox.Text),
Visibility = GetSelectedMsTeamsVisibility(),
PartsToClone = GetSelectedCloneParts(),
AdditionalMembers = ParseIdentifierList(MsTeamsAdditionalMembersTextBox.Text, "Additional Members"),
AdditionalOwners = ParseIdentifierList(MsTeamsAdditionalOwnersTextBox.Text, "Additional Owners")
});
});
} }
private async void ExecuteExchangeMailboxButton_Click(object sender, RoutedEventArgs e) private async void ExecuteExchangeMailboxButton_Click(object sender, RoutedEventArgs e)
{ {
await ExecuteProviderActionAsync("Exchange Create Shared Mailbox", async () => try
{ {
var provider = EnsureInitializedProvider<cLiamProviderExchange>("Exchange"); var provider = EnsureInitializedProvider<cLiamProviderExchange>("Exchange");
var name = GetRequiredText(ExchangeMailboxNameTextBox.Text, "Name"); var name = GetRequiredText(ExchangeMailboxNameTextBox.Text, "Name");
var alias = GetRequiredText(ExchangeMailboxAliasTextBox.Text, "Alias"); var alias = GetRequiredText(ExchangeMailboxAliasTextBox.Text, "Alias");
var displayName = NormalizeOptionalText(ExchangeMailboxDisplayNameTextBox.Text); var displayName = NormalizeOptionalText(ExchangeMailboxDisplayNameTextBox.Text);
var primarySmtp = NormalizeOptionalText(ExchangeMailboxPrimarySmtpTextBox.Text); var primarySmtp = NormalizeOptionalText(ExchangeMailboxPrimarySmtpTextBox.Text);
var result = await Task.Run(() => LiamWorkflowRuntime.CreateSharedMailbox(
provider,
name,
alias,
displayName,
primarySmtp));
return result; await ExecuteProviderActionAsync("Exchange Create Shared Mailbox", async () =>
}, () => {
var result = await Task.Run(() => LiamWorkflowRuntime.CreateSharedMailbox(
provider,
name,
alias,
displayName,
primarySmtp));
return result;
}, () =>
{
return CreateWhatIfResult(
"Exchange Create Shared Mailbox",
"Wuerde eine Shared Mailbox inklusive Ownership-Gruppen erzeugen. Es wurden keine Aenderungen ausgefuehrt.",
new
{
Name = name,
Alias = alias,
DisplayName = displayName,
PrimarySmtpAddress = primarySmtp
});
});
}
catch (Exception ex)
{ {
_ = EnsureInitializedProvider<cLiamProviderExchange>("Exchange"); AppendLog($"Exchange Create Shared Mailbox fehlgeschlagen: {ex.Message}", LogLevels.Error);
return CreateWhatIfResult( MessageBox.Show(this, ex.ToString(), "Exchange Create Shared Mailbox", MessageBoxButton.OK, MessageBoxImage.Error);
"Exchange Create Shared Mailbox", }
"Wuerde eine Shared Mailbox inklusive Ownership-Gruppen erzeugen. Es wurden keine Aenderungen ausgefuehrt.",
new
{
Name = GetRequiredText(ExchangeMailboxNameTextBox.Text, "Name"),
Alias = GetRequiredText(ExchangeMailboxAliasTextBox.Text, "Alias"),
DisplayName = NormalizeOptionalText(ExchangeMailboxDisplayNameTextBox.Text),
PrimarySmtpAddress = NormalizeOptionalText(ExchangeMailboxPrimarySmtpTextBox.Text)
});
});
} }
private async void ExecuteExchangeDistributionButton_Click(object sender, RoutedEventArgs e) private async void ExecuteExchangeDistributionButton_Click(object sender, RoutedEventArgs e)
{ {
await ExecuteProviderActionAsync("Exchange Create Distribution Group", async () => try
{ {
var provider = EnsureInitializedProvider<cLiamProviderExchange>("Exchange"); var provider = EnsureInitializedProvider<cLiamProviderExchange>("Exchange");
var name = GetRequiredText(ExchangeDistributionNameTextBox.Text, "Name"); var name = GetRequiredText(ExchangeDistributionNameTextBox.Text, "Name");
var alias = GetRequiredText(ExchangeDistributionAliasTextBox.Text, "Alias"); var alias = GetRequiredText(ExchangeDistributionAliasTextBox.Text, "Alias");
var displayName = NormalizeOptionalText(ExchangeDistributionDisplayNameTextBox.Text); var displayName = NormalizeOptionalText(ExchangeDistributionDisplayNameTextBox.Text);
var primarySmtp = NormalizeOptionalText(ExchangeDistributionPrimarySmtpTextBox.Text); var primarySmtp = NormalizeOptionalText(ExchangeDistributionPrimarySmtpTextBox.Text);
var result = await Task.Run(() => LiamWorkflowRuntime.CreateDistributionGroup(
provider,
name,
alias,
displayName,
primarySmtp));
return result; await ExecuteProviderActionAsync("Exchange Create Distribution Group", async () =>
}, () => {
var result = await Task.Run(() => LiamWorkflowRuntime.CreateDistributionGroup(
provider,
name,
alias,
displayName,
primarySmtp));
return result;
}, () =>
{
return CreateWhatIfResult(
"Exchange Create Distribution Group",
"Wuerde eine Distribution Group inklusive Ownership-Gruppen erzeugen. Es wurden keine Aenderungen ausgefuehrt.",
new
{
Name = name,
Alias = alias,
DisplayName = displayName,
PrimarySmtpAddress = primarySmtp
});
});
}
catch (Exception ex)
{ {
_ = EnsureInitializedProvider<cLiamProviderExchange>("Exchange"); AppendLog($"Exchange Create Distribution Group fehlgeschlagen: {ex.Message}", LogLevels.Error);
return CreateWhatIfResult( MessageBox.Show(this, ex.ToString(), "Exchange Create Distribution Group", MessageBoxButton.OK, MessageBoxImage.Error);
"Exchange Create Distribution Group", }
"Wuerde eine Distribution Group inklusive Ownership-Gruppen erzeugen. Es wurden keine Aenderungen ausgefuehrt.",
new
{
Name = GetRequiredText(ExchangeDistributionNameTextBox.Text, "Name"),
Alias = GetRequiredText(ExchangeDistributionAliasTextBox.Text, "Alias"),
DisplayName = NormalizeOptionalText(ExchangeDistributionDisplayNameTextBox.Text),
PrimarySmtpAddress = NormalizeOptionalText(ExchangeDistributionPrimarySmtpTextBox.Text)
});
});
} }
private async void FetchSecurityGroupsButton_Click(object sender, RoutedEventArgs e) private async void FetchSecurityGroupsButton_Click(object sender, RoutedEventArgs e)
@@ -871,8 +897,10 @@ namespace LiamWorkflowDiagnostics
try try
{ {
AppendLog($"Lese SecurityGroups (Filter='{_session.Provider.GroupFilter}') ..."); var provider = _session.Provider;
var result = await LiamWorkflowRuntime.GetSecurityGroupsFromProviderAsync(_session.Provider); var filter = provider.GroupFilter;
AppendLog($"Lese SecurityGroups (Filter='{filter}') ...");
var result = await Task.Run(() => LiamWorkflowRuntime.GetSecurityGroupsFromProviderAsync(provider));
ResultTextBox.Text = JsonConvert.SerializeObject(result, Formatting.Indented); ResultTextBox.Text = JsonConvert.SerializeObject(result, Formatting.Indented);
if (!result.Success) if (!result.Success)
@@ -936,7 +964,7 @@ namespace LiamWorkflowDiagnostics
? $"{actionName} im WhatIf-Modus gestartet. Schreibende Aenderungen werden nur simuliert." ? $"{actionName} im WhatIf-Modus gestartet. Schreibende Aenderungen werden nur simuliert."
: $"{actionName} gestartet."); : $"{actionName} gestartet.");
var result = runInWhatIfMode var result = runInWhatIfMode
? whatIfAction() ? await Task.Run(whatIfAction)
: await action(); : await action();
ResultTextBox.Text = JsonConvert.SerializeObject(result, Formatting.Indented); ResultTextBox.Text = JsonConvert.SerializeObject(result, Formatting.Indented);
if (TryGetSuccessFlag(result, out var success) && !success) if (TryGetSuccessFlag(result, out var success) && !success)