Skip to content

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

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Open

PSScript resource #937

wants to merge 11 commits into from

Conversation

SteveL-MSFT
Copy link
Member

@SteveL-MSFT SteveL-MSFT commented Jul 2, 2025

PR Summary

New PS7 and WinPS5.1 script resources. Allow inline script execution for get, set, and test 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, if test 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 to trace level while Write-Verbose is mapped to info to align with how they are defined in DSC.

Separate Microsoft.DSC.Transitional/PowerShellScript and Microsoft.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 is continue, $DebugPreference is continue, and $ErrorActionPreference is stop.

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:

# Example configuration mixing native app resources with classic PS resources
$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
parameters:
  myName:
    type: string
    defaultValue: Steve
  myObject:
    type: object
    defaultValue:
      color: green
      number: 10
resources:
- name: Use PS script
  type: Microsoft.DSC.Transitional/PowerShellScript
  properties:
    input:
      - name: "[parameters('myName')]"
      - object: "[parameters('myObject')]"
    getScript: |
      param($inputArray)

      Write-Warning "This is a warning message"
      # any output will be collected and returned
      "My name is " + $inputArray[0].name
      "My color is " + $inputArray[1].object.color

PR Context

Fix #885

Copy link
Collaborator

@theJasonHelmick theJasonHelmick left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Have a PSScript resource
3 participants