Feature Request

Feature request forum for Devolutions PowerShell Universal

Newest

Most active

Most votes

avatar

Matthew Morrow

MCP Tuning: cannot find job to start so it went to admin site

[image]

1

29

3

avatar

Matthew Morrow

avatar

Matthew Morrow

table needs sub sort

it would be nice to be able to double and triple sort with like CTRL+ click the sort, right now you can only sort 1 column at a time

1

13

0

avatar

Marco

Filter Jobs by Execution Time

Hi, I have another feature request. Would it be possible to provide an option in the future to specify a time range and display which jobs were executed between, for example, 1:00 a.m. and 3:00 a.m.? Currently, I either change the number of jobs displayed per page (10 or 50), which can lead to performance issues, or navigate through the pages one by one.

1

19

0

avatar

Matthew Morrow

Add Intelligent Session Timeout

My users work a support que, they need their dashboard up for like 8 hours or as long as they are working the dashboard. have it reset every so often is not good, if they are connected they shouldn't time out. if they disconnect from the session then the session cleaner should go through and kill sessions but if the users need the app up, they do not want to reset the screen and choose all their filters every 2 hours. i guess i could increase the SessionTimeout to 480 but i am not sure that is good idea.

2

21

0

avatar

Matthew Morrow

Improve MCP Server tools: Add Restart app/resource

my agent keep opening the /admin site and finding the /apps to go click the restart button it would be nice if we could reduce this branch and expose that ability in the MCP server so that after it makes a change and then something doesnt go the right way in a playwright test it can go restart stuff on its own without opening chrome dev tools and going after it there.

1

24

1

avatar

Adam Driscoll

avatar

dylk9

Expiration Date/Time Property for Variables

I use a lot of secret variables to hold, well, secrets. Many of these secrets have an expiration date. I would like to be able to set an 'expiration date' property for these variables so I can quickly see when these secrets expire. It could also be useful to have notifications when a secret is expiring soon (ie: 30 days, 7 days, 3/2/1 days) notification when a variable's expiration date is nearing.

1

57

2

avatar

dylk9

avatar

rmcavoy

Remove "You don't have access to this" Image

Would like a way to remove this image as well as the resources section from showing [image]

2

47

2

avatar

rmcavoy

avatar

Matthew Morrow

Add Environment Variables to Variables & Secrets

Navigate to Variables & Secrets there are 2 tabs currently, Variables and Vaults Add a new tab called Environment Variables OR Navigate to Environments Click [view variables] on the environment that is loaded Side quest: And then that would allow you to go into that resource and add an env var if there isnt one in your OS.

1

44

1

avatar

Adam Driscoll

avatar

rmcavoy

Multi Tenant Login Support

We have OIDC SSO setup with our azure tenant and as an MSP we would like to allow our partner tenants to be able to login to our powershell universal instance and be granted access to apps we scope to them. Currently in order for a client to be able to use our instance we have to make them a guest user in our tenant

1

54

3

avatar

Adam Driscoll

avatar

Matthew Morrow

Implemented

Add copilot docs to wire up a PAT for github api access

Update doc: https://docs.github.com/en/rest?apiVersion=2026-03-10 With things from here: https://github.com/settings/personal-access-tokens https://docs.github.com/en/rest?apiVersion=2026-03-10 To walk through a github copilot api setup, i guess it would be in the 'custom' category, but a copilot category might be better so we do not have to guess what the URL's and other values are.

1

141

5

avatar

Adam Driscoll

avatar

Matthew Morrow

improve table search -load with a delay

# Feature Request: Configurable debounce for `New-UDTable` search ## Summary Add a configurable debounce interval to the global search box on `New-UDTable`, especially for dynamic tables that use `-LoadRows` (`-LoadData` alias). For example, `-SearchDebounceMs 1000` would wait until the user has stopped typing for one second, then submit only the latest search value. ## Problem When a user types a search term into a dynamic table, intermediate values such as `e`, `er`, `err`, `erro`, and `error` can each trigger the server-side load callback. This can create unnecessary requests and work while the user is still typing. It can be costly when the callback queries SQL or another remote data source, and it can also add avoidable PSU server and network work when filtering cached data. The current `New-UDTable` documentation describes `-ShowSearch` and the search value passed to the dynamic load callback as `$EventData.Search`, but does not document a setting to control the delay. ## Proposed API ```powershell New-UDTable ` -ShowSearch ` -SearchDebounceMs 1000 ` -LoadRows { # Process the latest $EventData.Search value. } ``` `-SearchDebounceMs` is a suggested parameter name. The default should preserve current behavior for existing tables. A value of `0` could disable the delay. ## Expected behavior - Reset the timer whenever the user changes the search text. - After the configured quiet period, invoke the dynamic load callback once with the latest search value. - Do not submit obsolete intermediate search values after the timer resets. - Apply the setting to global search only; sorting, paging, refresh, and column-filter actions should keep their current timing. - Preserve current behavior when the parameter is omitted. - Document the parameter and its behavior in the `New-UDTable` reference. ## Acceptance criteria 1. With a 1000 ms delay, typing `error` with less than one second between keystrokes invokes the dynamic load callback once with `error` after typing stops. 2. If the user pauses for at least the configured interval, the callback runs with the current search value. 3. Clearing the search produces the correct unfiltered result after the configured interval. 4. With the parameter omitted, existing applications keep their current search behavior. 5. Paging, sorting, refresh, and column filters are not delayed by the search setting. ## Context In the jSourceAssistant Cases page, the table uses `-ShowSearch` with a `-LoadData` callback. The callback receives the search state and filters rows held in the PSU session. That specific callback does not query SQL for each keystroke; the case data is loaded separately. A configurable debounce would still reduce callback traffic for this table and help other dynamic tables whose load callbacks query SQL or remote services. The current PowerShell Universal version was not recorded for this request. ## References - [New-UDTable command reference]( https://docs.devolutions.net/powershell-universal/powershell-commands/new-udtable ) - [Table component guide]( https://docs.devolutions.net/powershell-universal/apps/components/data-display/table )

1

46

1

avatar

Adam Driscoll

avatar

fabiomatt

Invoke-PSUCommand -ScriptBlock should return PowerShell output, errors and exceptions to the caller

Description During testing of the PowerShell Universal Agent, we observed that Invoke-PSUCommand -ScriptBlock executes successfully on the target machine, but the output generated inside the script block is not returned to the caller. Commands executed through -Command return data as expected, while -ScriptBlock appears to return only metadata information. Current Behavior Example: PowerShell Invoke-PSUCommand -Computer "SERVER01" -ScriptBlock { "HELLO" } Expected: Plain Text HELLO Actual: Plain Text <DateTime> <ComputerName> <ComputerName> The same behavior occurs with: PowerShell Write-Output "HELLO" PowerShell return "HELLO" and even: PowerShell throw "Test Error" No output, warning, error record, or exception is returned to the caller. Expected Behavior Invoke-PSUCommand -ScriptBlock should return the PowerShell pipeline output in the same way users would expect from: PowerShell Remoting (Invoke-Command) PowerShell Jobs Universal Automation Jobs Local PowerShell execution Examples: PowerShell Invoke-PSUCommand -ScriptBlock { Get-Date } Returns: PowerShell Thursday, September 11, 2026 11:34:21 PowerShell Invoke-PSUCommand -ScriptBlock { [PSCustomObject]@{ Name = "Test" Value = 123 } } Returns: PowerShell Name Value ---- ----- Test 123 PowerShell Invoke-PSUCommand -ScriptBlock { throw "Something failed" } Returns: PowerShell Something failed or a serialized PowerShell error record. Business Impact Current behavior makes -ScriptBlock difficult to use for: Remote administration Inventory collection Health checks Troubleshooting Automation workflows Returning structured PowerShell objects Without access to output and error streams, consumers cannot reliably determine: what the script produced whether the script succeeded whether an exception occurred what data was generated remotely

1

64

1

avatar

Adam Driscoll

avatar

jol

Automatic PowerShell Module Synchronization for Devolutions Agent Script Execution

Today PowerShell Universal allows scripts to be executed through the Devolutions Agent. However, when scripts depend on custom or third-party PowerShell modules, administrators must manually ensure that all required modules are installed on every endpoint where the agent executes. It would be very beneficial to have native support for automatic module deployment and version management between PowerShell Universal and Devolutions Agents. Proposed Solution Add a capability in PowerShell Universal to associate one or more modules from the repository's Modules folder with a script as Required Modules . Script Configuration Within a PSU script, provide a configuration option such as: Required Modules: - Az.Accounts (2.17.0) - VMware.PowerCLI (13.3.0) - CustomCompanyModule (1.5.2) The modules would be linked directly from the PSU repository's Modules directory. Agent Execution Workflow When a script is executed through a Devolutions Agent: PSU checks the list of required modules for the script. The agent verifies whether each module exists locally in: C:\Windows\SystemTemp\PowerShellUniversal\Repository\Modules For each required module: If the module does not exist, copy it from PSU to the agent. If the module exists but the version is older than the required version, update it. If the module exists and the version matches or is newer, no action is required. Once all module requirements are satisfied, execute the script. Benefits Eliminates manual module management on agent systems. Ensures script portability across all agents. Reduces script failures caused by missing modules. Guarantees version consistency between PSU and agents.

2

67

1

avatar

Adam Driscoll

avatar

Matthew Morrow

improve reload configuration files tab

PROBLEM If you have a wide screen, you cannot find the reload button for the line, for me i will click on the one below the one i wanted to click on. [image] SOLUTION Put Actions first and then auto size the field and then everything will line up with the config files and then you do not have to mess with the UI to find the correct reload button. Option 2 put the words for the reload inside the button so the button would say: [Reload - All] [Reload - Apps] Then you wouldn't have a UI issue to find the button. WORKAROUND Move the column closer [image]

1

50

1

avatar

Adam Driscoll

avatar

Adam Driscoll

Multiple Git Repositories

This feature request was discussed during our October 2026 Community Call . We technically support this and you can switch the entire repository, but we can't do individual folders. The stated goal is that the user would like to have a git repo per app or module. When working in that app or module, you can commit to a different git repository than the other apps or modules. Each app folder would then be its own git repository but the root repository would not be.

3

46

0

avatar

Adam Driscoll

Versioned Docs

This feature request was discussed during our October 2026 Community Call . The current, online docs change over time and are typically scoped to the most recent version. There is no way to look up docs from previous versions. We could either consider shipping the docs in the product (they are just markdown files) or figure out some way to update Gitbook to have a version drop down.

1

52

0

avatar

Adam Driscoll

Snippets in the Portal

This feature request was discussed during our October 2026 Community Call . A user request some way to share snippets with other users and display them in the portal. Snippets would include a PowerShell command and some markdown docs. Then users could quickly grab and run those snippets in PSU or in their local terminal. I also think it would be nice to allow users to add their own snippets to store them in PSU for use later. We could also consider making it a bit fancier and expose something like Jupyter notebooks where markdown and code are in the same document.

1

40

0

avatar

Adam Driscoll

Admin Console Theme Picker

This feature request was discussed during our October 2026 Community Call . Users have suggested that the dark theme in the admin console is too blue. We could either adjust the theme (which tends to match other Devolutions products) or have a theme picker to expand beyond just light and dark. If we had a simple set of tokens, we may even allow customizing the colors.

2

41

0

avatar

Adam Driscoll

Scheduling Visualizer

This feature request was discussed during our October 2026 Community Call . A scheduling visualizer should be able to show upcoming scheduled jobs on a timeline view. This is primarily so that users can see overlapping schedules. We could have options to group by things like computer or computer groups as well as scripts or tags. Another idea was to have a job history view that is similar but displays jobs over time, including the duration on the timeline.

1

54

0

avatar

Matthew Morrow

MCP Server not producing helpful output

The llm asked for a cmdlet and got back a cmdlet with no doc, and then started searching my codebase because for things we have done in the past. [image] Maybe in the MCP response should include metadata on the object so that the llm can do some kind of discovery and get examples or signatures or field level help, allowing it to chose what it needs next.

1

104

4

avatar

Adam Driscoll

avatar

chauberg

Job history is empty, max history is default (100)

We're having an issue with empty or near empty job histories on some of our more aggresive scripts that run multiple times every hour even though we have the default setting of 100 max history on every job. This issue seems to be on scripts that run many times every day and have a lot of jobs being archived by a custom trigger based on the amount of work done in the script. My best guess is that PSU is including archived jobs in the calculation when deciding how many jobs to archive since scripts that don't run as often and don't have a lot jobs archived by our custom trigger don't seem to be affected. This is our custom archive trigger script: param ($Job) #$DebugPreference = "Continue" $jobId = $Job.Id if ([string]::IsNullOrEmpty($jobId)) { Write-Error "No job id supplied." } Write-Information "$jobId - $($Job.Script.Name) ran by $($Job.Identity.Name) @ $($Job.StartTime) for $(($Job.EndTime - $Job.StartTime).TotalSeconds) seconds." if (!$Job.Schedule) { Write-Information "Job is not scheduled - aborting." return } $output = Get-PSUJobPipelineOutput -JobId $jobId -Integrated #-AppToken $apiToken.Token $HostOutput = Get-PSUJobOutput -JobId $jobId -Integrated if ($HostOutput) { Write-Information "[Job Output]" Write-Information ($HostOutput -join [Environment]::NewLine) Write-Information "[/Job Output]" } if ($output.Archive -eq $true) { # Archieve job $apiToken = Get-PSUAppToken -Identity "JobArchiver" -Integrated | Where-Object -Property Revoked -Eq $false | Select-Object -ExpandProperty Token -First 1 if (!$apiToken) { Write-Error "Failed to retrieve api token!" return } Write-Host "Archiving job.. " -NoNewLine $response = Invoke-RestMethod -Uri "https://localhost/api/v1/job/archive/$jobId" -Method "DELETE" -SkipCertificateCheck -Headers @{ Authorization="Bearer $apiToken" } if($response.Archived) { Write-Host "✅ OK" -ForegroundColor Green } else { Write-Host "Not archived?" -BackgroundColor Red } } Write-Debug "Triggered by job:" Write-Debug ($Job | ConvertTo-Json -WarningAction Ignore)

1

109

6

avatar

Adam Driscoll

avatar

callidus2000

Support OpenAI /v1/responses API and configurable model-specific parameters (e.g. reasoning_effort)

When using newer OpenAI models in PowerShell Universal, the current implementation appears to be limited to the legacy /v1/chat/completions endpoint. This creates compatibility issues with newer reasoning-capable models such as gpt-6.1-sol. These models have different API requirements and may require the newer /v1/responses endpoint for function/tool calling scenarios. For example, when using tools/functions with gpt-6.1-sol, OpenAI returns: HTTP 400 (invalid_request_error) Function tools with reasoning_effort are not supported for gpt-6.1-sol in /v1/chat/completions. To use function tools, use /v1/responses or set reasoning_effort to 'none'. At the moment there appears to be no way in PowerShell Universal to: Select the OpenAI API endpoint (/v1/chat/completions vs /v1/responses). Configure model-specific parameters such as: reasoning_effort reasoning settings in general future model-specific options introduced by OpenAI. As a result, users are unable to use newer OpenAI models with tool/function calling even though the models themselves support the required functionality through the Responses API. Requested Enhancements Feature 1: Responses API Support Add support for OpenAI's /v1/responses endpoint and allow selecting the API type in the provider configuration. Example: New-PSUAIProvider -ApiType Responses or New-PSUAIProvider -EndpointType Responses Feature 2: Custom Model Parameters Allow arbitrary model parameters to be passed through to OpenAI. Example: New-PSUAIAgent ` -Model "gpt-6.1-sol" ` -ModelParameter @{ reasoning_effort = "none" } or a similar mechanism on the provider level. Benefit This would allow PowerShell Universal users to adopt newer OpenAI models immediately and avoid compatibility issues caused by hard-coded assumptions around the Chat Completions API and fixed model parameters.

1

89

1

avatar

Adam Driscoll

avatar

realslacker

Correct Documentation for Permissions

The documentation for the permissions page suggests that you can create folder permissions, however the UI elements mentioned don't exist. I have been able to grant permissions to a Folder by manually manipulating the Permissions table in the database, and it works as expected. I think it would be useful to allow string entry from the Security > Permissions page instead of a drop down for the resource. Additionally, since Schedules can be put into "folders" it would be nice if we could grant permissions to the folder in the Schedules area. We would love to be able to delegate access to a subset of Schedules to a team. I'm running 2026.2.5, but this appeared to still be an issue when I was running 2026.3.1

1

83

5

avatar

Adam Driscoll

avatar

mshepard70

Document the branding features with examples

There are dozens of branding settings, but no examples. Lots of different parameters but not much for how to use them.

1

52

1

avatar

Adam Driscoll

avatar

dylegrand

Improve OpenAPI / Swagger Support for Enums and Context-Aware Required Parameters

Hello, I would like to propose two enhancements that would significantly improve the developer experience and the quality of generated OpenAPI specifications. 1 Support Enumeration Values in OpenAPI / Swagger Current Behavior When defining an API input model, it is currently difficult or impossible to expose a list of allowed values as an OpenAPI enum. For example: enum ActionType { ADD REMOVE } [Documentation()] class GroupMembershipRequest { [ActionType]$Action } Actualy the generated Swagger schema displays: { "action": "string" } 2 Separate Required Parameters by HTTP Method Within the Same Endpoint Current Behavior When documenting an endpoint that supports multiple HTTP methods (for example, GET and POST), the parameters apply to all methods. Would it be possible to have an .INPUTS parameter that is conditional on the method? Thank you in advance.

1

93

1

avatar

Lars Lervik

1 - 25 of 104 items