Community Showcase

Explore and share solutions built with Devolutions PowerShell Universal.

avatar

steviecoaster

Bookworm - Your own personal library catalog

Yes, GoodReads exists. But this allowed me to make a Barcode Scanner component so I could scan ISBN numbers from my phone in a store to prevent duplicate purchases. Repo with screenshots: https://github.com/steviecoaster/PowerShellUniversal.Apps.Bookworm

34

1

avatar

Adam Driscoll

avatar

Adam Driscoll

VM Onboarding Wizard

This was an example I made using our new MCP server for a user that was looking to replace some existing VM onboarding tools. [image] <# .SYNOPSIS Sample PowerShell Universal app for collecting and reviewing a VM creation request. .NOTES This version has been anonymized for sharing. Organization-specific values such as location names, Active Directory paths, VLAN identifiers, PAM group names, and patching group identifiers have been replaced with generated sample data. The application flow and validation behavior are otherwise unchanged. #> $vlanOptions = @( '0100', '0101', '0102', '0103', '0104', '0105', '0106', '0107', '0108', '0109', '0110', '0111', '0112', '0113', '0114', '0115', '0116', '0117', '0118', '0119', '0120', '0121', '0122', '0123', '0124', '0125', '0126', '0127', '0128', '0129', '0130', '0131', '0132', '0133', '0134', '0135', '0136', '0137', '0138', '0139', '0140', '0141', '0142', '0143', '0144', '0145', '0146', '0147', '0148', '0149', '0150', '0151', '0152', '0153', '0154', '0155', '0156', '0157' ) $serverPatchingGroupOptions = @( @{ Name = 'Manual Patching'; Value = 'Manual Patching' }, @{ Name = 'Every week on Sunday at 0200 AM'; Value = 'server - patch - (010200) Every week on Sunday at 0200 AM' }, @{ Name = 'Every week on Sunday at 0300 AM'; Value = 'server - patch - (010300) Every week on Sunday at 0300 AM' }, @{ Name = 'Every week on Sunday at 0400 AM'; Value = 'server - patch - (010400) Every week on Sunday at 0400 AM' }, @{ Name = 'Every week on Sunday at 0500 AM'; Value = 'server - patch - (010500) Every week on Sunday at 0500 AM' }, @{ Name = 'Every week on Sunday at 0600 AM'; Value = 'server - patch - (010600) Every week on Sunday at 0600 AM' }, @{ Name = 'Every week on Sunday at 0700 AM'; Value = 'server - patch - (010700) Every week on Sunday at 0700 AM' }, @{ Name = 'Every week on Sunday at 0800 AM'; Value = 'server - patch - (010800) Every week on Sunday at 0800 AM' }, @{ Name = 'Every week on Sunday at 1200 PM'; Value = 'server - patch - (011200) Every week on Sunday at 1200 PM' }, @{ Name = 'Every week on Monday at 0200 AM'; Value = 'server - patch - (020200) Every week on Monday at 0200 AM' }, @{ Name = 'Every week on Monday at 0300 AM'; Value = 'server - patch - (020300) Every week on Monday at 0300 AM' }, @{ Name = 'Every week on Monday at 0400 AM'; Value = 'server - patch - (020400) Every week on Monday at 0400 AM' }, @{ Name = 'Every week on Monday at 0500 AM'; Value = 'server - patch - (020500) Every week on Monday at 0500 AM' }, @{ Name = 'Every week on Monday at 0600 AM'; Value = 'server - patch - (020600) Every week on Monday at 0600 AM' }, @{ Name = 'Every week on Monday at 0700 AM'; Value = 'server - patch - (020700) Every week on Monday at 0700 AM' }, @{ Name = 'Every week on Monday at 0800 AM'; Value = 'server - patch - (020800) Every week on Monday at 0800 AM' }, @{ Name = 'Every week on Tuesday at 0200 AM'; Value = 'server - patch - (030200) Every week on Tuesday at 0200 AM' }, @{ Name = 'Every week on Tuesday at 0300 AM'; Value = 'server - patch - (030300) Every week on Tuesday at 0300 AM' }, @{ Name = 'Every week on Tuesday at 0400 AM'; Value = 'server - patch - (030400) Every week on Tuesday at 0400 AM' }, @{ Name = 'Every week on Tuesday at 0500 AM'; Value = 'server - patch - (030500) Every week on Tuesday at 0500 AM' }, @{ Name = 'Every week on Tuesday at 0600 AM'; Value = 'server - patch - (030600) Every week on Tuesday at 0600 AM' }, @{ Name = 'Every week on Tuesday at 0700 AM'; Value = 'server - patch - (030700) Every week on Tuesday at 0700 AM' }, @{ Name = 'Every week on Tuesday at 0800 AM'; Value = 'server - patch - (030800) Every week on Tuesday at 0800 AM' }, @{ Name = 'Every week on Wednesday at 0200 AM'; Value = 'server - patch - (040200) Every week on Wednesday at 0200 AM' }, @{ Name = 'Every week on Wednesday at 0300 AM'; Value = 'server - patch - (040300) Every week on Wednesday at 0300 AM' }, @{ Name = 'Every week on Wednesday at 0400 AM'; Value = 'server - patch - (040400) Every week on Wednesday at 0400 AM' }, @{ Name = 'Every week on Wednesday at 0500 AM'; Value = 'server - patch - (040500) Every week on Wednesday at 0500 AM' }, @{ Name = 'Every week on Wednesday at 0600 AM'; Value = 'server - patch - (040600) Every week on Wednesday at 0600 AM' }, @{ Name = 'Every week on Wednesday at 0700 AM'; Value = 'server - patch - (040700) Every week on Wednesday at 0700 AM' }, @{ Name = 'Every week on Wednesday at 0800 AM'; Value = 'server - patch - (040800) Every week on Wednesday at 0800 AM' }, @{ Name = 'Every week on Thursday at 0200 AM'; Value = 'server - patch - (050200) Every week on Thursday at 0200 AM' }, @{ Name = 'Every week on Thursday at 0300 AM'; Value = 'server - patch - (050300) Every week on Thursday at 0300 AM' }, @{ Name = 'Every week on Thursday at 0400 AM'; Value = 'server - patch - (050400) Every week on Thursday at 0400 AM' }, @{ Name = 'Every week on Thursday at 0500 AM'; Value = 'server - patch - (050500) Every week on Thursday at 0500 AM' }, @{ Name = 'Every week on Thursday at 0600 AM'; Value = 'server - patch - (050600) Every week on Thursday at 0600 AM' }, @{ Name = 'Every week on Thursday at 0700 AM'; Value = 'server - patch - (050700) Every week on Thursday at 0700 AM' }, @{ Name = 'Every week on Thursday at 0800 AM'; Value = 'server - patch - (050800) Every week on Thursday at 0800 AM' }, @{ Name = 'Every week on Friday at 0200 AM'; Value = 'server - patch - (060200) Every week on Friday at 0200 AM' }, @{ Name = 'Every week on Friday at 0300 AM'; Value = 'server - patch - (060300) Every week on Friday at 0300 AM' }, @{ Name = 'Every week on Friday at 0400 AM'; Value = 'server - patch - (060400) Every week on Friday at 0400 AM' }, @{ Name = 'Every week on Friday at 0500 AM'; Value = 'server - patch - (060500) Every week on Friday at 0500 AM' }, @{ Name = 'Every week on Friday at 0600 AM'; Value = 'server - patch - (060600) Every week on Friday at 0600 AM' }, @{ Name = 'Every week on Friday at 0700 AM'; Value = 'server - patch - (060700) Every week on Friday at 0700 AM' }, @{ Name = 'Every week on Friday at 0800 AM'; Value = 'server - patch - (060800) Every week on Friday at 0800 AM' }, @{ Name = 'Every week on Saturday at 0200 AM'; Value = 'server - patch - (070200) Every week on Saturday at 0200 AM' }, @{ Name = 'Every week on Saturday at 0300 AM'; Value = 'server - patch - (070300) Every week on Saturday at 0300 AM' }, @{ Name = 'Every week on Saturday at 0400 AM'; Value = 'server - patch - (070400) Every week on Saturday at 0400 AM' }, @{ Name = 'Every week on Saturday at 0500 AM'; Value = 'server - patch - (070500) Every week on Saturday at 0500 AM' }, @{ Name = 'Every week on Saturday at 0600 AM'; Value = 'server - patch - (070600) Every week on Saturday at 0600 AM' }, @{ Name = 'Every week on Saturday at 0700 AM'; Value = 'server - patch - (070700) Every week on Saturday at 0700 AM' }, @{ Name = 'Every week on Saturday at 0800 AM'; Value = 'server - patch - (070800) Every week on Saturday at 0800 AM' }, @{ Name = 'Monthly - 3rd Tuesday - 2100'; Value = 'LAB-SRV-PATCH - Monthly - 3rd Tuesday - 2100' }, @{ Name = 'Monthly - 3rd Tuesday - 2200'; Value = 'LAB-SRV-PATCH - Monthly - 3rd Tuesday - 2200' }, @{ Name = 'Everyday 0200 - DMZ/Workgroup'; Value = 'LAB-SRV-PATCH - Everyday 0200 - DMZ/Workgroup' }, @{ Name = 'server - patch - download and notify'; Value = 'server - patch - download and notify' } ) $pamUserGroups = @( 'None', 'LAB-SG-PAM-0001', 'LAB-SG-PAM-0002', 'LAB-SG-PAM-0003', 'LAB-SG-PAM-0004', 'LAB-SG-PAM-0005', 'LAB-SG-PAM-0006', 'LAB-SG-PAM-0007', 'LAB-SG-PAM-0008', 'LAB-SG-PAM-0009', 'LAB-SG-PAM-0010', 'LAB-SG-PAM-0011', 'LAB-SG-PAM-0012', 'LAB-SG-PAM-0013', 'LAB-SG-PAM-0014', 'LAB-SG-PAM-0015', 'LAB-SG-PAM-0016', 'LAB-SG-PAM-0017', 'LAB-SG-PAM-0018', 'LAB-SG-PAM-0019', 'LAB-SG-PAM-0020', 'LAB-SG-PAM-0021', 'LAB-SG-PAM-0022', 'LAB-SG-PAM-0023', 'LAB-SG-PAM-0024', 'LAB-SG-PAM-0025', 'LAB-SG-PAM-0026', 'LAB-SG-PAM-0027', 'LAB-SG-PAM-0028', 'LAB-SG-PAM-0029', 'LAB-SG-PAM-0030', 'LAB-SG-PAM-0031', 'LAB-SG-PAM-0032', 'LAB-SG-PAM-0033', 'LAB-SG-PAM-0034', 'LAB-SG-PAM-0035', 'LAB-SG-PAM-0036', 'LAB-SG-PAM-0037', 'LAB-SG-PAM-0038', 'LAB-SG-PAM-0039', 'LAB-SG-PAM-0040', 'LAB-SG-PAM-0041', 'LAB-SG-PAM-0042', 'LAB-SG-PAM-0043', 'LAB-SG-PAM-0044', 'LAB-SG-PAM-0045', 'LAB-SG-PAM-0046', 'LAB-SG-PAM-0047', 'LAB-SG-PAM-0048', 'LAB-SG-PAM-0049', 'LAB-SG-PAM-0050', 'LAB-SG-PAM-0051', 'LAB-SG-PAM-0052', 'LAB-SG-PAM-0053', 'LAB-SG-PAM-0054', 'LAB-SG-PAM-0055', 'LAB-SG-PAM-0056', 'LAB-SG-PAM-0057', 'LAB-SG-PAM-0058', 'LAB-SG-PAM-0059', 'LAB-SG-PAM-0060' ) $diskDriveLetterOptions = @( 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z' ) $diskSqlOptions = @('Yes', 'No') function Get-CreateVmSummaryItems { param($FormData) $operatingSystem = switch ($FormData.operatingSystem) { 'win2025' { 'Windows 2025' } 'win2022' { 'Windows 2022' } 'win2019' { 'Windows 2019' } 'win2016' { 'Windows 2016' } default { $FormData.operatingSystem } } $subnetMask = switch ($FormData.netMask) { '22' { '22 (255.255.252.0)' } '23' { '23 (255.255.254.0)' } '24' { '24 (255.255.255.0)' } '25' { '25 (255.255.255.128)' } '26' { '26 (255.255.255.192)' } '27' { '27 (255.255.255.224)' } '28' { '28 (255.255.255.240)' } default { $FormData.netMask } } @( [PSCustomObject]@{ Label = 'Email Address'; Value = $FormData.emailAddress }, [PSCustomObject]@{ Label = 'RITM Number'; Value = $FormData.ritmNum }, [PSCustomObject]@{ Label = 'Server Hostname'; Value = $FormData.hostName }, [PSCustomObject]@{ Label = 'Operating System'; Value = $operatingSystem }, [PSCustomObject]@{ Label = 'Location'; Value = $FormData.Location }, [PSCustomObject]@{ Label = 'Network VLAN'; Value = if ($FormData.vlan) { $FormData.vlan -replace '^vlan:', 'VLAN ' } else { '' } }, [PSCustomObject]@{ Label = 'IP Address'; Value = $FormData.ipAddress }, [PSCustomObject]@{ Label = 'Subnet Mask'; Value = $subnetMask }, [PSCustomObject]@{ Label = 'Default Gateway'; Value = $FormData.defaultGateway }, [PSCustomObject]@{ Label = 'Organizational Unit'; Value = $FormData.OU }, [PSCustomObject]@{ Label = 'Server Patching Group'; Value = $FormData.serverPatchingGroup }, [PSCustomObject]@{ Label = 'PAM User Group'; Value = $FormData.pamUserGroup }, [PSCustomObject]@{ Label = 'SecureLink Group'; Value = $FormData.secureLinkGroup }, [PSCustomObject]@{ Label = 'Additional Disks'; Value = $Session:DiskGrid.Count } ) } function Show-AddDiskModal { Show-UDModal -MaxWidth 'sm' -FullWidth -Header { New-UDTypography -Text 'Add Disk' } -Content { New-UDRow -Columns { New-UDColumn -SmallSize 6 -LargeSize 6 -Content { New-UDSelect -Id 'diskDriveLetter' -Label 'Drive Letter' -Option { foreach ($driveLetter in $diskDriveLetterOptions) { New-UDSelectOption -Name $driveLetter -Value $driveLetter } } } New-UDColumn -SmallSize 6 -LargeSize 6 -Content { New-UDTextbox -Id 'diskSize' -Label 'Size GB' -Placeholder '1 - 3072' } } New-UDRow -Columns { New-UDColumn -SmallSize 6 -LargeSize 6 -Content { New-UDTextbox -Id 'diskLabel' -Label 'Label' -Placeholder 'Enter disk label' } New-UDColumn -SmallSize 6 -LargeSize 6 -Content { New-UDSelect -Id 'diskSql' -Label 'SQL' -Option { foreach ($sqlOption in $diskSqlOptions) { New-UDSelectOption -Name $sqlOption -Value $sqlOption } } } } } -Footer { New-UDButton -Text 'Cancel' -OnClick { Hide-UDModal } New-UDButton -Text 'Add Disk' -OnClick { if ($Session:DiskGrid.Count -ge 5) { Show-UDToast -Message 'You can add a maximum of 5 disks.' -Duration 4000 return } $driveLetter = (Get-UDElement -Id 'diskDriveLetter').Value $sizeValue = (Get-UDElement -Id 'diskSize').Value $labelValue = (Get-UDElement -Id 'diskLabel').Value $sqlValue = (Get-UDElement -Id 'diskSql').Value if ([string]::IsNullOrWhiteSpace($driveLetter)) { Show-UDToast -Message 'Drive letter is required.' -Duration 4000 return } if ([string]::IsNullOrWhiteSpace($sizeValue)) { Show-UDToast -Message 'Size GB is required.' -Duration 4000 return } $parsedSize = 0 if (-not [int]::TryParse($sizeValue, [ref]$parsedSize)) { Show-UDToast -Message 'Size GB must be a whole number.' -Duration 4000 return } if ($parsedSize -lt 1 -or $parsedSize -gt 3072) { Show-UDToast -Message 'Size GB must be between 1 and 3072.' -Duration 4000 return } if (@($Session:DiskGrid | Where-Object { $_.DriveLetter -eq $driveLetter }).Count -gt 0) { Show-UDToast -Message "Drive letter $driveLetter is already in use." -Duration 4000 return } [void]$Session:DiskGrid.Add([PSCustomObject]@{ DriveLetter = $driveLetter Size = $parsedSize Label = $labelValue Sql = if ([string]::IsNullOrWhiteSpace($sqlValue)) { 'No' } else { $sqlValue } }) Hide-UDModal Sync-UDElement -Id 'diskGridSection' } } } New-udapp -content { $Session:DiskGrid = [System.Collections.ArrayList]::new() New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDTypography -Text 'Create VM Request' } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDStepper -Id 'createVmStepper' -AlternativeLabel -NonLinear -NextButtonText 'Next Section' -BackButtonText 'Previous Section' -Steps { New-UDStep -Label 'Request Details' -OnLoad { New-UDTypography -Text 'Provide the core request details for the VM.' New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDTextBox -Id 'emailAddress' -Label 'Email Address' -Placeholder 'Enter your email address' -FullWidth } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDTextbox -Id 'ritmNum' -Label 'RITM Number' -Placeholder 'Enter the RITM number' -FullWidth } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDTextBox -Id 'hostName' -Label 'Server Hostname' -Placeholder 'Enter the server hostname' -FullWidth -OnValidate { if ($eventData.Length -gt 15) { New-UDValidationResult -ValidationError "HostName can not exceed 15 characters" } } } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDSelect -Id 'operatingSystem' -Label 'Operating System' -FullWidth -Option { New-UDSelectOption -Name 'Windows 2025' -Value 'win2025' New-UDSelectOption -Name 'Windows 2022' -Value 'win2022' New-UDSelectOption -Name 'Windows 2019' -Value 'win2019' New-UDSelectOption -Name 'Windows 2016' -Value 'win2016' } } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDSelect -Id 'Location' -Label 'Location' -FullWidth -Option { New-UDSelectOption -Name 'LAB-Compute-East-01' -Value 'LAB-Compute-East-01' New-UDSelectOption -Name 'LAB-Prod-Compute-01' -Value 'LAB-Prod-Compute-01' New-UDSelectOption -Name 'LAB-Prod-Storage-01' -Value 'LAB-Prod-Storage-01' New-UDSelectOption -Name 'LAB-Test-Dev-01' -Value 'LAB-Test-Dev-01' New-UDSelectOption -Name 'LAB-Archive-01' -Value 'LAB-Archive-01' } } } } New-UDStep -Label 'Network' -OnLoad { New-UDTypography -Text 'Enter the network configuration for the VM.' New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDSelect -Id 'vlan' -Label 'Network VLAN' -FullWidth -Option { foreach ($vlanOption in $vlanOptions) { New-UDSelectOption -Name "VLAN $vlanOption" -Value "vlan:$vlanOption" } } } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDTextBox -Id 'ipAddress' -Label 'IP Address' -Placeholder 'Enter the IP address' -FullWidth } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDSelect -Id 'netMask' -Label 'Subnet Mask' -FullWidth -Option { New-UDSelectOption -Name '22 (255.255.252.0)' -Value '22' New-UDSelectOption -Name '23 (255.255.254.0)' -Value '23' New-UDSelectOption -Name '24 (255.255.255.0)' -Value '24' New-UDSelectOption -Name '25 (255.255.255.128)' -Value '25' New-UDSelectOption -Name '26 (255.255.255.192)' -Value '26' New-UDSelectOption -Name '27 (255.255.255.224)' -Value '27' New-UDSelectOption -Name '28 (255.255.255.240)' -Value '28' } } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDTextBox -Id 'defaultGateway' -Label 'Default Gateway' -Placeholder 'Enter the default gateway' -FullWidth } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDSelect -Id 'OU' -Label 'Organizational Unit' -FullWidth -Option { New-UDSelectOption -Name 'OU=Prod' -Value 'OU=prod,OU=servers,DC=example,DC=internal' New-UDSelectOption -Name 'OU=2022,OU=DEV' -Value 'OU=2022,OU=dev,OU=servers,DC=example,DC=internal' New-UDSelectOption -Name 'OU=2019,OU=DEV' -Value 'OU=2019,OU=dev,OU=servers,DC=example,DC=internal' New-UDSelectOption -Name 'OU=2016,OU=DEV' -Value 'OU=2016,OU=dev,OU=servers,DC=example,DC=internal' } } } } New-UDStep -Label 'Access' -OnLoad { New-UDTypography -Text 'Set maintenance and access-related options.' New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDSelect -Id 'serverPatchingGroup' -Label 'Server Patching Group' -FullWidth -Option { foreach ($serverPatchingGroupOption in $serverPatchingGroupOptions) { New-UDSelectOption -Name $serverPatchingGroupOption.Name -Value $serverPatchingGroupOption.Value } } } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDSelect -Id 'pamUserGroup' -Label 'PAM User Group' -FullWidth -Option { foreach ($pamUserGroup in $pamUserGroups) { New-UDSelectOption -Name $pamUserGroup -Value $pamUserGroup } } } } New-UDRow -Columns { New-UDColumn -SmallSize 12 -LargeSize 12 -Content { New-UDTextBox -Id 'secureLinkGroup' -Label 'SecureLink Group' -Placeholder 'Enter the SecureLink group' -FullWidth } } } New-UDStep -Label 'Review and Disks' -OnLoad { New-UDTypography -Text 'Review the request details and manage any additional disks.' New-UDDivider -Id 'createVmReviewDivider' -Children { New-UDTypography -Text 'Request Summary' } -TextAlign 'left' $summaryItems = @(Get-CreateVmSummaryItems -FormData $Body) foreach ($summaryItem in $summaryItems) { if (-not [string]::IsNullOrWhiteSpace([string]$summaryItem.Value)) { New-UDTypography -Text "$($summaryItem.Label): $($summaryItem.Value)" } } New-UDDivider -Id 'createVmDiskDivider' -Children { New-UDTypography -Text 'Additional Disks' } -TextAlign 'left' New-UDDynamic -Id 'diskGridSection' -Content { $diskTableData = $Session:DiskGrid $diskColumns = @( New-UDTableColumn -Property 'DriveLetter' -Title 'Drive Letter' New-UDTableColumn -Property 'Size' -Title 'Size GB' New-UDTableColumn -Property 'Label' -Title 'Label' New-UDTableColumn -Property 'Sql' -Title 'SQL' New-UDTableColumn -Property 'Actions' -Title 'Actions' -Render { New-UDButton -Text 'Delete' -OnClick { [System.Collections.ArrayList]$Session:DiskGrid = $Session:DiskGrid | Where-Object { $_.DriveLetter -ne $EventData.DriveLetter } Sync-UDElement -Id 'diskGridSection' } } ) New-UDButton -Text 'Add Disk' -OnClick { Show-AddDiskModal } if ($diskTableData.Count -eq 0) { New-UDTypography -Text 'No disks added.' } else { New-UDTable -Title 'Disks' -Data $diskTableData -Columns $diskColumns -Dense } } } } -OnFinish { New-UDTypography -Text 'Request Overview' New-UDDivider -Id 'createVmFinishedOverviewDivider' -Children { New-UDTypography -Text 'Submitted Values' } -TextAlign 'left' $summaryItems = @(Get-CreateVmSummaryItems -FormData $EventData) foreach ($summaryItem in $summaryItems) { $value = if ([string]::IsNullOrWhiteSpace([string]$summaryItem.Value)) { 'Not provided' } else { [string]$summaryItem.Value } New-UDTypography -Text "$($summaryItem.Label): $value" } New-UDDivider -Id 'createVmFinishedDiskDivider' -Children { New-UDTypography -Text 'Additional Disks' } -TextAlign 'left' $diskTableData = $Session:DiskGrid if ($diskTableData.Count -eq 0) { New-UDTypography -Text 'No disks added.' } else { $diskOverviewColumns = @( New-UDTableColumn -Property 'DriveLetter' -Title 'Drive Letter' New-UDTableColumn -Property 'Size' -Title 'Size GB' New-UDTableColumn -Property 'Label' -Title 'Label' New-UDTableColumn -Property 'Sql' -Title 'SQL' ) New-UDTable -Id 'diskGridOverviewTable' -Title 'Disks' -Data $diskTableData -Columns $diskOverviewColumns -Dense } } } } }

20

0

1 - 2 of 2 items
Sysadminotaur pondering a question Special Q&A

Our CTO is answering your AI questions

A rare opportunity — ask our CTO directly.

0 questions already asked Ends in 14 days
Ask your question →