-
Notifications
You must be signed in to change notification settings - Fork 44
PSScript resource #937
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
PSScript resource #937
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces inline PowerShell script resources for both PowerShell 7 (PowerShellScript
) and Windows PowerShell 5.1 (WindowsPowerShellScript
), with accompanying manifests, implementation, tests, example configs, and build updates.
- Added two resource manifests and the core
psscript.ps1
engine - Comprehensive Pester tests covering get/set/test operations and error handling
- Updated build script and packaging to include new files and example configuration
Reviewed Changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.
Show a summary per file
File | Description |
---|---|
resources/PSScript/psscript.dsc.resource.json | Manifest for PowerShell 7 inline script resource |
resources/PSScript/winpsscript.dsc.resource.json | Manifest for Windows PowerShell 5.1 inline script resource |
resources/PSScript/psscript.ps1 | Core executor logic handling get/set/test and trace output |
resources/PSScript/psscript.tests.ps1 | Pester tests for new inline script resource behaviors |
resources/PSScript/copy_files.txt | Declares files to bundle under the resource folder |
build.ps1 | Packaging updates to include/exclude new resource files |
dsc/examples/psscript.dsc.yaml | Example DSC configuration using the new inline script resource |
Comments suppressed due to low confidence (2)
resources/PSScript/psscript.ps1:51
- The JSON property is named
_inDesiredState
, but tests referenceInDesiredState
. Rename the field toInDesiredState
(and update schema) for consistency.
@{ _inDesiredState = $true } | ConvertTo-Json -Compress
resources/PSScript/psscript.ps1:159
- Consistent with the above change, rename this property to
InDesiredState
so that the output matches test expectations.
@{ _inDesiredState = $outputObjects[0] } | ConvertTo-Json -Compress
PR Summary
New PS7 and WinPS5.1 script resources. Allow inline script execution for
get
,set
, andtest
operations.export
isn't supported due to how it works and is reserved for actual resources.If an operation isn't implemented, it is ignored with an
info
level message written and empty JSON being returned. However, iftest
is not implemented, then it always returns that it is_inDesiredState = true
.I did it async to preserve order of traces that could come out of the script. Note that
Write-Information
is mapped totrace
level whileWrite-Verbose
is mapped toinfo
to align with how they are defined in DSC.Separate
Microsoft.DSC.Transitional/PowerShellScript
andMicrosoft.DSC.Transitional/WindowsPowerShellScript
resources (latter is only on Windows) but they use the same underlying script as the resource.Output is expected to not already be JSON and will be converted automatically.
$VerbosePreference
iscontinue
,$DebugPreference
iscontinue
, and$ErrorActionPreference
isstop
.Input can be any valid JSON and is passed to the single parameter declared in the param block as PSCustomObject. If the script has a param and no input is provided, that's an error. If input is provided and the script doesn't have a param, that is also an error. If more than one param is declared, that is also an error.
Example config using it:
PR Context
Fix #885