Prerequisites
Summary
Due to longstanding issues with HadErrors (PowerShell/PowerShell#4613) and the [Windows]PowerShellScript resources use of HadErrors
|
if ($ps.HadErrors) { |
|
# If there are any errors, we will exit with an error code |
|
Write-DscTrace -Now -Level Error -Message 'Errors occurred during script execution.' |
|
exit 1 |
|
} |
after invoking any of the scripts, it is difficult to implement some patterns with these resources. It is even more difficult to diagnose them, as you get back only a generic "it failed" message. Manually running the script will not expose the issue obviously unless you already know about the problem (you must remove any -ErrorAction that is intended to make a call into a "try").
I certainly don't know enough about the PS model to strongly suggest how to do this, but the answer feels like implementing an externalized version of the suggestion to have a HadTerminatingErrors property. Maybe just checking the state of $Error instead of HadErrors would be a better mechanism? If the user decides to $Error.Clear() in their script, it seems reasonable to treat that as success. That of course also allows the use of -ErrorAction values that prevent the update of $Error in the first place.
Steps to reproduce
# test.yml
$schema: https://aka.ms/dsc/schema/v3/bundled/config/document.json
resources:
- name: TestHadErrors
type: Microsoft.DSC.Transitional/PowerShellScript
metadata:
description: Install and default the stable Rust toolchain via rustup
properties:
getScript:
testScript: |
return [bool](Get-Command this-command-is-fake -ErrorAction SilentlyContinue)
setScript:
> dsc config test -i test.yml
Replacing this-command-is-fake with an existing command produces a successful test (and in the desired state).
Expected behavior
The resource is able to execute the test without issue, returning a "not in desired state" result.
Actual behavior
> dsc config test -f test.yml
2026-05-28T17:54:23.691113Z ERROR PID 57844: Errors occurred during script execution.
2026-05-28T17:54:23.819646Z ERROR Failed to run process 'pwsh': Command: Resource 'pwsh' [exit code 1] manifest description: PowerShell script execution failed
2026-05-28T17:54:23.823655Z ERROR Command: Resource 'pwsh' [exit code 1] manifest description: PowerShell script execution failed
Error details
Environment data
> $PSVersionTable
Name Value
---- -----
PSVersion 7.6.2
PSEdition Core
GitCommitId 7.6.2
OS Microsoft Windows 10.0.28581
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.4
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Version
3.2.1
Visuals
No response
Prerequisites
Summary
Due to longstanding issues with
HadErrors(PowerShell/PowerShell#4613) and the [Windows]PowerShellScript resources use ofHadErrorsDSC/resources/PSScript/psscript.ps1
Lines 148 to 152 in aa3e331
after invoking any of the scripts, it is difficult to implement some patterns with these resources. It is even more difficult to diagnose them, as you get back only a generic "it failed" message. Manually running the script will not expose the issue obviously unless you already know about the problem (you must remove any
-ErrorActionthat is intended to make a call into a "try").I certainly don't know enough about the PS model to strongly suggest how to do this, but the answer feels like implementing an externalized version of the suggestion to have a
HadTerminatingErrorsproperty. Maybe just checking the state of$Errorinstead ofHadErrorswould be a better mechanism? If the user decides to$Error.Clear()in their script, it seems reasonable to treat that as success. That of course also allows the use of-ErrorActionvalues that prevent the update of$Errorin the first place.Steps to reproduce
> dsc config test -i test.ymlReplacing
this-command-is-fakewith an existing command produces a successful test (and in the desired state).Expected behavior
The resource is able to execute the test without issue, returning a "not in desired state" result.Actual behavior
Error details
Environment data
Version
3.2.1
Visuals
No response