Users

All Posts (54)

avatar

rmcavoy

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

avatar
avatar
avatar

Thanks Adam!

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

avatar
avatar
avatar

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

Multi Tenant Login Support

avatar
avatar
avatar
avatar

I havent tried it recently but in the past it just threw an error. I believe this was on psu version 5

Multi Tenant Login Support

avatar
avatar
avatar
avatar

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

Changing App Settings Deletes Code

avatar
avatar
avatar

Git sync being paused just means I am making edits and have not committed them yet

I am not able to make changes to the git sync behavior as the server is in production

Today I got the same issue however it was not triggered by changing the roles, Im not sure what triggered it this time. I was working on a new app and after making some changes to a module and going back to the app it was reverted to the default script for a new app.

Here is what shows in the system log at the time:

2026-06-09 10:00:07.174 -04:00 [ERR][Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware] An unhandled exception has occurred while executing the request.

Grpc.Core.RpcException: Status(StatusCode="Unknown", Detail="Stream removed", DebugException="Grpc.Core.Internal.CoreErrorDetailException: {"created":"@1781013606.612000000","description":"Error received from peer ipv6:[::1]:57534","file":"..\..\..\src\core\lib\surface\call.cc","file_line":953,"grpc_message":"Stream removed","grpc_status":2}")

---> Grpc.Core.Internal.CoreErrorDetailException: {"created":"@1781013606.612000000","description":"Error received from peer ipv6:[::1]:57534","file":"..\..\..\src\core\lib\surface\call.cc","file_line":953,"grpc_message":"Stream removed","grpc_status":2}

--- End of inner exception stack trace ---

at ProtoBuf.Grpc.Internal.Reshape.UnaryTaskAsyncImpl[TRequest,TResponse](AsyncUnaryCall`1 call, MetadataContext metadata, CancellationToken cancellationToken)

at Universal.Server.Services.DashboardProxy.ExecuteEndpoint(DashboardExecuteEndpointRequest request) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Services\Dashboard\DashboardProxy.cs:line 670

at UniversalDashboard.Controllers.UDComponentController.RunScript(String endpointId, Dictionary`2 parameters, Boolean form) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Controllers\UDComponentController.cs:line 218

at UniversalDashboard.Controllers.UDComponentController.Element(String id) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Controllers\UDComponentController.cs:line 376

at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)

at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|7_0(Endpoint endpoint, Task requestTask, ILogger logger)

at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)

at PowerShellUniversal.FeatureMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\FeatureMiddleware.cs:line 42

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at PowerShellUniversal.DisallowedModeMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\ModeMiddleware.cs:line 25

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at PowerShellUniversal.CspMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\CspMiddleware.cs:line 28

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at Universal.Server.Middleware.RoutingMiddleware.Invoke(HttpContext httpContext, IPolicyEvaluator policyEvaluator) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\RoutingMiddleware.cs:line 185

at PowerShellUniversal.PSUMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\PowerShellMiddleware.cs:line 15

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)

at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)

at Universal.Server.Middleware.WindowsAuthMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\WindowsAuthMiddleware.cs:line 58

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at Universal.Server.Middleware.SwaggerAuthenticationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\SwaggerAuthMiddleware.cs:line 51

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at StackExchange.Profiling.MiniProfilerMiddleware.Invoke(HttpContext context) in C:\projects\dotnet\src\MiniProfiler.AspNetCore\MiniProfilerMiddleware.cs:line 112

at AspNetCoreRateLimit.RateLimitMiddleware`1.Invoke(HttpContext context) in D:\a\powershell-universal\powershell-universal\src\AspNetCoreRateLimit\Middleware\RateLimitMiddleware.cs:line 109

at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)

at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)

at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddlewareImpl.<Invoke>g__Awaited|10_0(ExceptionHandlerMiddlewareImpl middleware, HttpContext context, Task task)

2026-06-09 10:00:07.216 -04:00 [ERR][Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware] An unhandled exception has occurred while executing the request.

Grpc.Core.RpcException: Status(StatusCode="Unknown", Detail="Stream removed", DebugException="Grpc.Core.Internal.CoreErrorDetailException: {"created":"@1781013606.612000000","description":"Error received from peer ipv6:[::1]:57534","file":"..\..\..\src\core\lib\surface\call.cc","file_line":953,"grpc_message":"Stream removed","grpc_status":2}")

---> Grpc.Core.Internal.CoreErrorDetailException: {"created":"@1781013606.612000000","description":"Error received from peer ipv6:[::1]:57534","file":"..\..\..\src\core\lib\surface\call.cc","file_line":953,"grpc_message":"Stream removed","grpc_status":2}

--- End of inner exception stack trace ---

at ProtoBuf.Grpc.Internal.Reshape.UnaryTaskAsyncImpl[TRequest,TResponse](AsyncUnaryCall`1 call, MetadataContext metadata, CancellationToken cancellationToken)

at Universal.Server.Services.DashboardProxy.ExecuteEndpoint(DashboardExecuteEndpointRequest request) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Services\Dashboard\DashboardProxy.cs:line 670

at UniversalDashboard.Controllers.UDComponentController.RunScript(String endpointId, Dictionary`2 parameters, Boolean form) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Controllers\UDComponentController.cs:line 218

at UniversalDashboard.Controllers.UDComponentController.Element(String id) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Controllers\UDComponentController.cs:line 376

at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)

at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|7_0(Endpoint endpoint, Task requestTask, ILogger logger)

at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)

at PowerShellUniversal.FeatureMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\FeatureMiddleware.cs:line 42

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at PowerShellUniversal.DisallowedModeMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\ModeMiddleware.cs:line 25

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at PowerShellUniversal.CspMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\CspMiddleware.cs:line 28

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at Universal.Server.Middleware.RoutingMiddleware.Invoke(HttpContext httpContext, IPolicyEvaluator policyEvaluator) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\RoutingMiddleware.cs:line 185

at PowerShellUniversal.PSUMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\PowerShellMiddleware.cs:line 15

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)

at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)

at Universal.Server.Middleware.WindowsAuthMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\WindowsAuthMiddleware.cs:line 58

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at Universal.Server.Middleware.SwaggerAuthenticationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) in D:\a\powershell-universal\powershell-universal\src\Universal.Server\Middleware\SwaggerAuthMiddleware.cs:line 51

at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()

--- End of stack trace from previous location ---

at StackExchange.Profiling.MiniProfilerMiddleware.Invoke(HttpContext context) in C:\projects\dotnet\src\MiniProfiler.AspNetCore\MiniProfilerMiddleware.cs:line 112

at AspNetCoreRateLimit.RateLimitMiddleware`1.Invoke(HttpContext context) in D:\a\powershell-universal\powershell-universal\src\AspNetCoreRateLimit\Middleware\RateLimitMiddleware.cs:line 109

at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)

at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)

at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddlewareImpl.<Invoke>g__Awaited|10_0(ExceptionHandlerMiddlewareImpl middleware, HttpContext context, Task task)

Changing App Settings Deletes Code

avatar
avatar
avatar

I also notice that the app doesnt retain the custom role. I constantly have to reapply the role as it keeps reverting back to just administrators

Changing App Settings Deletes Code

avatar
avatar
avatar

Some additional info about our PSU instance:

  • Not sure if matters but prior to restarting PSU after that bug we hadn't restarted PSU for about 6 days.

  • Everything was done through the web ui in web editing mode.

  • Git sync was paused and syncing one way.

  • Hosted on Windows server 2019 virtual machine (vmware)

  • using latest version of PSU (2026.1.7)

Changing App Settings Deletes Code

avatar
avatar
avatar

Should be able to reproduce by changing the permitted roles for the app via the gui (Apps -> Apps Page and using the gear icon to change the app properties).

I already had the built in administrator role assigned to the app and once I had finished building the app to my liking I added a custom role to allow users to start using it. Once I did that (as described above) the app reloaded and changes I had made were no longer showing in the web code editor. When I checked the script file on the PSU host it still contained the missing code. I tried just restarting the app to reload the code but the only thing that seemed to work was restarting PSU entirely.

no error messages or any notification popped up when changing the role, everything seemed normal

Changing App Settings Deletes Code

avatar
avatar
avatar

Just had an app delete progress I had made after I changed the roles to allow another role to access the app. I've seen this bug in previous versions but I thought it was fixed already. Not sure if it matters but git sync is setup one way and was paused at the time. All changes were made through the PSU web interface.

Turn Apps On Via PSU Portal

avatar
avatar
avatar

another nice thing to have in addition to this/along side this would be a way to automatically turn off apps that are idle and have no active sessions for X minutes.

App Delayed Startup

avatar
avatar
avatar

I'd like to see some more options for tweaking application auto startup. For example if a app isnt as important the app could be put on a delayed startup similar to how services in windows work. This would help get PSU up and running quicker in the event the server needs to restart

Turn Apps On Via PSU Portal

avatar
avatar
avatar

In order to save cpu and memory resources on our PSU instance we dont have all apps running 24/7. Currently when a technician wants to use an app that is offline they have to ask me to turn it on for them. I would like to see a way to grant the ability to turn an app on via the PSU portal and have the ability tied to security roles.

PowerShell Universal - 2026.1.2

avatar
avatar
avatar
avatar
avatar

getting the following error:

[ERROR] The ‘Set-Variable’ command was found in the module ‘Microsoft.PowerShell.Utility’, but the module could not be loaded. For more information, run ‘Import-Module Microsoft.PowerShell.Utility’

Breaking API and script execution

PowerShell Universal - 2026.1.1

avatar
avatar
avatar
avatar
avatar

Updated to 2026.1.1 and New-UDUpload seems to not be working anymore, nothing happens when pressing the button

TinyMCE Cutting off Text

avatar
avatar
Product: PowerShell Universal
Version: 5.6.13

I have a form with multiple TInyMCE editors within the UD Form. I have each tinymce editor copying its own contents to a hidden textbox to allow validation within the form and to get the contents later when submitting the form:

$TinyMCESettings = @{
        menubar             = 'edit view insert format table'
        plugins             = "link autolink image lists table searchreplace fullscreen"
        toolbar             = 'undo redo link image styles bold italic underline bullist numlist outdent indent searchreplace fullscreen'
        link_default_target = '_blank'
        browser_spellcheck  = $true
        contextmenu         = $false
        statusbar           = $false
    }
New-UDTinyMCE -OnEditorChange {
    Set-UDElement -Id 'problemDescription' -Properties @{
        value = $($Body | ConvertFrom-Json)
    }
} -Init $TinyMCESettings
New-UDElement -Tag 'div' -Content {
    New-UDTextbox -Id 'problemDescription'
} -Attributes @{
    style = @{
        display = 'none'
    }
}

Whenever users submit the form it seems to cut off some of the text they enter into the tinymce editor. Has anyone seen this issue before? Is there a rich text editor similar to tinymce I should be using instead?

PowerShell Universal - 2026.1.0

avatar
avatar
avatar
avatar
avatar

I attempted updating and had the same issues dbytes and Dynamic are reporting. Didnt spend much time looking into it because our sever is used in production so Im back on 5.6.13 after uninstalling 2026.1 and reinstalling 5.6.13

we use the msi installer and run on windows server 2019 if it helps. Using Sqlite for the database

Failed to Kill Job Process

avatar
avatar
avatar
Product: PowerShell Universal
Version: 5.6.13

I’ve been having some issues where things dont save properly or revert changes I’ve made. I checked the system logs and I’ve noticed this error message pop up frequently:

2026-02-02 06:00:15.191 -05:00 [ERR][PowerShellUniversal.Automation.JobProcessManager] Failed to kill process.

Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data may have been modified or deleted since entities were loaded. See for information on understanding and handling optimistic concurrency exceptions. at Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.ThrowAggregateUpdateConcurrencyException(RelationalDataReader reader, Int32 commandIndex, Int32 expectedRowsAffected, Int32 rowsAffected) at Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.ConsumeResultSetWithRowsAffectedOnly(Int32 commandIndex, RelationalDataReader reader) at Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.Consume(RelationalDataReader reader) at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection) at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable1 commandBatches, IRelationalConnection connection) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList1 entriesToSave) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(StateManager stateManager, Boolean acceptAllChangesOnSuccess) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess) at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess) at PowerShellUniversal.Extensibility.EFTable2.SaveWithRetry(DbContext context) in D:\a\powershell-universal\powershell-universal\src\PowerShellUniversal.Extensibility\Persistence\EFTable.cs:line 964 at PowerShellUniversal.Extensibility.EFTable2.Delete(T item) in D:\a\powershell-universal\powershell-universal\src\PowerShellUniversal.Extensibility\Persistence\EFTable.cs:line 131 at PowerShellUniversal.Automation.JobProcessManager.Kill(ChildProcess childProcess) in D:\a\powershell-universal\powershell-universal\src\PowerShellUniversal.Automation\JobProcessManager.cs:line 329`

I’m unsure what might be causing this, does anyone have any tips?

App Token Mistakenly Triggers Revoked App Token Trigger

avatar
avatar
avatar
avatar
Product: PowerShell Universal
Version: 5.6.13

I have a trigger setup for “Revoked App Token Used” that emails me whenever a revoked app token is used however it keeps incorrectly triggering on an app token that has no expiration date. Looking for advice on how to track down what is causing this

File Upload Permissions for Script

avatar
avatar
avatar

Thanks for the reply. Once I tested with the execute built in permission I found I had to create a permission giving the custom role the automation/execute permission in order to allow them to upload files despite being able to still run the script previously.

Form Layout Help

avatar
avatar
avatar

So I was trying to make a dynamic custom form function that you feed an array of fields to to create the form. I understand that new-udform has something similar but I wasnt a fan of the lack of visual customization. Here is my function right now:

function New-PSUAppRequestForm {
    param(
        [parameter(Mandatory)]
        $FieldArray,
        [parameter()]
        $FormName
    )
    New-UDGrid -Container -Content {
        New-UDGrid -Item -ExtraSmallSize 4 -ExtraLargeSize 3 -Content {}
        New-UDGrid -Item -ExtraSmallSize 12 -ExtraLargeSize 6 -Content {
            New-UDCard -Title $FormName -Content {
                New-UDForm -Content {
                    $ContentScriptBlock = {
                        if ([bool]$field.helpMessage) {
                            New-UDTypography -Text "ℹ️ $($field.helpMessage)" -Variant overline
                            New-UDHtml -Markup "<nobr>"
                        }
                        else {
                            New-UDTypography -Text " " -Variant overline
                            New-UDHtml -Markup "<nobr>"
                        }
                        if ([bool]$field.Required) {
                            New-UDTypography -Text "❗Required" -Style @{
                                color = '#e81e1e'
                            } -Variant overline
                            New-UDHtml -Markup "<nobr>"
                        }
                        else {
                            New-UDTypography -Text " " -Variant overline
                            New-UDHtml -Markup "<nobr>"
                        }
                        switch ($field.fieldType) {
                            "AutoComplete" {
                                $Options = @()
                                foreach ($option in $field.fieldOptions) {
                                    $Options += New-UDAutocompleteOption -Name $option.option -Value $option.value
                                }
                                New-UDAutocomplete -Options $options -FullWidth -Id $field.fieldId -Label $field.fieldName
                            }
                            "Select" {
                                New-UDSelect -FullWidth -Option {
                                    foreach ($option in $field.fieldOptions) {
                                        New-UDSelectOption -Name $option -Value $option
                                    }
                                } -Id $field.fieldId -Label $field.fieldName
                            }
                            "Multiline" {
                                New-UDTextbox -Multiline -Rows $field.fieldRows -Variant $field.fieldVarient -FullWidth -Id $field.fieldId -Label $field.fieldName
                            }
                            "Checkbox" {
                                New-UDCheckBox -Id $field.fieldId -Label $field.fieldName
                            }
                            "Textbox" {
                                New-UDTextbox -Variant $field.fieldVarient -FullWidth -Id $field.fieldId -Label $field.fieldName
                            }
                            "TinyMCE" {
                                New-UDTinyMCE -OnEditorChange {
                                    $Page:Textvalue = $EventData
                                    Set-UDElement -Id $field.fieldId -Properties @{
                                        value = $Page:Textvalue
                                    }
                                } -Init $Field.init
                                New-UDTransition -Content {
                                    New-UDTextbox -Id $field.fieldId
                                } -Fade -Timeout 1000
                            }
                        }
                    }
                    if ([bool]$FieldArray.row) {
                        $TotalRows = $FieldArray.row | sort-object -unique | select -last 1
                        foreach ($row in $($FieldArray.row | sort-object -unique)) {
                            New-UDStack -Content {
                                foreach ($field in $($FieldArray | where { $_.row -eq $row })) {
                                    New-UDGrid -Item -ExtraSmallSize 12 -ExtraLargeSize 12 -Content {
                                        Invoke-Command -ScriptBlock $ContentScriptBlock
                                    }
                                }
                            }  -JustifyContent center -FullWidth -AlignItems center -Direction row -Spacing 2
                            if ($Row -ne $TotalRows) {
                                if ($FieldArray.row -contains 2) {
                                    New-UDHtml -Markup "<br>"
                                }
                            }
                        }
                    }
                    foreach ($field in $($FieldArray | where { ![bool]$_.row })) {
                        New-UDGrid -Item -ExtraSmallSize 12 -ExtraLargeSize 12 -Content {
                            Invoke-Command -ScriptBlock $ContentScriptBlock
                        }
                    }
                } -ButtonVariant contained -OnSubmit {
                    $formContent = New-Object -TypeName psobject
                    foreach ($field in $FieldArray) {
                        switch ($field.fieldType) {
                            "Checkbox" {
                                $FieldValue = $(Get-UDElement -Id $field.fieldID).checked
                            }
                            default {
                                $FieldValue = $(Get-UDElement -Id $field.fieldID).value
                            }
                        }
                        $formContent | Add-Member -MemberType NoteProperty -Name $field.fieldValueName -Value $FieldValue
                    }
                    Invoke-PSUScript -Name "ProjectHandOff_SubmitActions.ps1" -Parameters @{formContent = $formContent } -Integrated
                    New-UDTypography -Text "Project Submitted" -Variant h5
                } -OnProcessing {
                    New-UDTypography -Text "Submitting Project Form, Please Wait..." -Variant h5
                    New-UDSkeleton -Animation wave
                } -OnValidate {
                    $Valid = $true
                    foreach ($field in $FieldArray) {
                        if ($field.validationRequired) {
                            switch ($field.validationType) {
                                "Value Exists" {
                                    switch ($field.fieldType) {
                                        "AutoComplete" {
                                            $FieldValue = $(Get-UDElement -Id $Field.fieldId).value
                                            if (![bool]$FieldValue) {
                                                $valid = $false
                                            }
                                        }
                                        "Textbox" {
                                            $FieldValue = $(Get-UDElement -Id $Field.fieldId).value
                                            if (![bool]$FieldValue) {
                                                $valid = $false
                                            }
                                        }
                                        "TinyMCE" {
                                            $FieldValue = $(Get-UDElement -Id $Field.fieldId).value
                                            if (![bool]$FieldValue) {
                                                $valid = $false
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if ($Valid) {
                        New-UDFormValidationResult -Valid
                    }
                    else {
                        New-UDFormValidationResult -ValidationError "Please fill out required fields"
                    }
                } # end of ud form
            }
        }
    } # end of ud container
}

And here is an example of using the function:

$FieldArray = @(

            @{

                fieldName          = "Opportunity Number"

                fieldValueName     = "opportunityNumber"

                row                = 1

                fieldType          = "TextBox"

                fieldVarient       = "filled"

                fieldID            = $(New-Guid | select -expand guid)

                icon               = "Hashtag"

                required           = $true

                validationRequired = $true

                validationType     = "Value Exists"

            }
)
New-PSUAppRequestForm -FieldArray $FieldArray -FormName "📝 Project Handoff"

File Upload Permissions for Script

avatar
avatar
avatar
Product: PowerShell Universal
Version: 5.6.11

Recently updated to v5 and created a script that users have access to in the portal. The script has a file parameter so the user has to upload a file in order to run the script property. The problem is when a user uploads a file it appears to work on their end but not actually upload, the script pauses and requests feedback because nothing was uploaded. When testing under my admin account it works without issues so Im wondering what permission I need to give to my users in order to make this work?

Form Layout Help

avatar
avatar
avatar

I have those parameters setup but they will not change the fields to being vertically stacked when the screen size is small. Here I have the extrasmallsize parameter set to the largest (12) and the fields get messy and cut off

Form Layout Help

avatar
avatar
avatar
Product: PowerShell Universal
Version: 5.6.11

Looking for help with making the layout of my form mobile friendly.

Currently on desktop the form looks like:

When on mobile however the fields get smooshed together and you cant read everything or edit fields very well and it just looks really bad. I was wondering if there is a way I set this up so the fields show as two fields in a row on desktop but when on a small screen or mobile all fields become vertically stacked.

If this isnt somehow automatically possible is it possible to determine the size of the screen viewing the app?

I can provide a sample of my code if that helps answer the question I have

Invalid URI using Get-PSUScript after Upgrade

avatar
avatar
avatar

What was the setting that caused this if you remember? I am encountering the same issue after upgrading to v5

Upgrading from v4 to v5 issues

avatar
avatar
avatar
avatar

thanks jscott! For some reason there was an entry for psu v4.2 even though the last version of v4 I had installed was v4.5.5

1 - 25 of 54 items