mirror of
https://github.com/PowerShell/PSDesiredStateConfiguration
synced 2026-06-21 13:45:25 +00:00
Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f48ffbcc11 | |||
| be08036a24 | |||
| 53b693ab8e | |||
| 76f41549ad | |||
| a5787f0cb3 | |||
| 231356d2ba | |||
| 4a1c8e75e0 | |||
| 67ee71793e | |||
| 86b0561f52 | |||
| a74f5ee8de | |||
| aa4652ce28 | |||
| 9ddb7e2305 | |||
| aa49a839e3 | |||
| 82aa860cb1 | |||
| 8b8e454b4e | |||
| 56e5460ef9 | |||
| eed19c33ed | |||
| 836f7e532c | |||
| c7f5c83843 | |||
| 00be7c8e9d | |||
| 0f59c3cdba | |||
| d3b5218d0d | |||
| 7f2d6ebf2e | |||
| 5db42b0120 | |||
| 7ac2ce4d07 | |||
| bd0affdb4d | |||
| 0b4412362b | |||
| 553a19715a | |||
| 94ca4dda32 | |||
| 7cba5c16d5 |
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"instanceUrl": "https://msazure.visualstudio.com",
|
|
||||||
"projectName": "One",
|
|
||||||
"areaPath": "One\\MGMT\\Compute\\Powershell\\Powershell\\PowerShell Core",
|
|
||||||
"notificationAliases": [
|
|
||||||
"andschwa@microsoft.com",
|
|
||||||
"slee@microsoft.com"
|
|
||||||
],
|
|
||||||
"codebaseName": "PSDSC_202502"
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
name: CI Tests
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ v2 ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ v2 ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ci:
|
|
||||||
name: pester
|
|
||||||
runs-on: windows-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install PSResources
|
|
||||||
run: ./tools/installPSResources.ps1
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: ./build.ps1 -Build
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
- name: Test
|
|
||||||
run: ./build.ps1 -Test
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
- name: Package
|
|
||||||
run: ./build.ps1 -Publish
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
- name: Upload build artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
if: always()
|
|
||||||
with:
|
|
||||||
name: PSDesiredStateConfiguration-package
|
|
||||||
path: out/**/*.nupkg
|
|
||||||
|
|
||||||
- name: Upload test results
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
if: always()
|
|
||||||
with:
|
|
||||||
name: PSDesiredStateConfiguration-tests
|
|
||||||
path: out/testResults.xml
|
|
||||||
@@ -1,155 +0,0 @@
|
|||||||
trigger:
|
|
||||||
- main
|
|
||||||
|
|
||||||
schedules:
|
|
||||||
- cron: '18 11 * * 5'
|
|
||||||
displayName: Weekly CodeQL
|
|
||||||
branches:
|
|
||||||
include:
|
|
||||||
- main
|
|
||||||
always: true
|
|
||||||
|
|
||||||
parameters:
|
|
||||||
- name: debug
|
|
||||||
displayName: Enable debug output
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
- name: OfficialBuild
|
|
||||||
displayName: Use Official OneBranch template
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
- name: Release
|
|
||||||
displayName: Generate a release
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
|
|
||||||
variables:
|
|
||||||
system.debug: ${{ parameters.debug }}
|
|
||||||
BuildConfiguration: Release
|
|
||||||
WindowsContainerImage: onebranch.azurecr.io/windows/ltsc2022/vse2022:latest
|
|
||||||
OneBranchTemplate: ${{ iif(parameters.OfficialBuild, 'v2/OneBranch.Official.CrossPlat.yml@templates', 'v2/OneBranch.NonOfficial.CrossPlat.yml@templates') }}
|
|
||||||
|
|
||||||
resources:
|
|
||||||
repositories:
|
|
||||||
- repository: templates
|
|
||||||
type: git
|
|
||||||
name: OneBranch.Pipelines/GovernedTemplates
|
|
||||||
ref: refs/heads/main
|
|
||||||
|
|
||||||
extends:
|
|
||||||
# https://aka.ms/obpipelines/templates
|
|
||||||
template: ${{ variables.OneBranchTemplate }}
|
|
||||||
parameters:
|
|
||||||
globalSdl: # https://aka.ms/obpipelines/sdl
|
|
||||||
asyncSdl:
|
|
||||||
enabled: true
|
|
||||||
forStages: [build]
|
|
||||||
featureFlags:
|
|
||||||
EnableCDPxPAT: false
|
|
||||||
WindowsHostVersion:
|
|
||||||
Version: 2022
|
|
||||||
Network: KS3
|
|
||||||
release:
|
|
||||||
category: NonAzure
|
|
||||||
stages:
|
|
||||||
- stage: build
|
|
||||||
jobs:
|
|
||||||
- job: main
|
|
||||||
displayName: Build package
|
|
||||||
pool:
|
|
||||||
type: windows
|
|
||||||
variables:
|
|
||||||
ob_outputDirectory: $(Build.SourcesDirectory)/out
|
|
||||||
steps:
|
|
||||||
- pwsh: |
|
|
||||||
$manifest = Import-PowerShellDataFile ./src/PSDesiredStateConfiguration/PSDesiredStateConfiguration.psd1
|
|
||||||
$version = $manifest.ModuleVersion
|
|
||||||
Write-Output "##vso[task.setvariable variable=version;isOutput=true]$version"
|
|
||||||
name: package
|
|
||||||
displayName: Get version from module manifest
|
|
||||||
- task: onebranch.pipeline.version@1
|
|
||||||
displayName: Set OneBranch version
|
|
||||||
inputs:
|
|
||||||
system: Custom
|
|
||||||
customVersion: $(package.version)
|
|
||||||
- pwsh: ./tools/installPSResources.ps1 -PSRepository CFS
|
|
||||||
displayName: Install PSResources
|
|
||||||
- pwsh: ./build.ps1 -Clean -Build -Test
|
|
||||||
displayName: Build
|
|
||||||
- task: onebranch.pipeline.signing@1
|
|
||||||
displayName: Sign 1st-party files
|
|
||||||
inputs:
|
|
||||||
command: sign
|
|
||||||
signing_profile: external_distribution
|
|
||||||
search_root: $(Build.SourcesDirectory)/out
|
|
||||||
files_to_sign: |
|
|
||||||
**/*.psd1;
|
|
||||||
**/*.psm1;
|
|
||||||
- pwsh: ./build.ps1 -Publish
|
|
||||||
displayName: Package module
|
|
||||||
- task: onebranch.pipeline.signing@1
|
|
||||||
displayName: Sign NuGet package
|
|
||||||
inputs:
|
|
||||||
command: sign
|
|
||||||
signing_profile: external_distribution
|
|
||||||
search_root: $(Build.SourcesDirectory)/out
|
|
||||||
files_to_sign: |
|
|
||||||
*.nupkg
|
|
||||||
- stage: release
|
|
||||||
dependsOn: build
|
|
||||||
condition: and(succeeded(), ${{ eq(parameters.Release, true) }})
|
|
||||||
variables:
|
|
||||||
ob_release_environment: ${{ iif(parameters.OfficialBuild, 'Production', 'Test') }}
|
|
||||||
version: $[ stageDependencies.build.main.outputs['package.version'] ]
|
|
||||||
jobs:
|
|
||||||
- job: github
|
|
||||||
displayName: Publish draft to GitHub
|
|
||||||
pool:
|
|
||||||
type: release
|
|
||||||
templateContext:
|
|
||||||
inputs:
|
|
||||||
- input: pipelineArtifact
|
|
||||||
artifactName: drop_build_main
|
|
||||||
steps:
|
|
||||||
- task: GitHubRelease@1
|
|
||||||
displayName: Create GitHub release
|
|
||||||
inputs:
|
|
||||||
gitHubConnection: GitHub
|
|
||||||
repositoryName: PowerShell/PSDesiredStateConfiguration
|
|
||||||
target: main
|
|
||||||
assets: $(Pipeline.Workspace)/PSDesiredStateConfiguration.$(version).nupkg
|
|
||||||
tagSource: userSpecifiedTag
|
|
||||||
tag: $(version)
|
|
||||||
isDraft: true
|
|
||||||
addChangeLog: false
|
|
||||||
releaseNotesSource: inline
|
|
||||||
releaseNotesInline: "<!-- TODO: Generate release notes on GitHub! -->"
|
|
||||||
- job: validation
|
|
||||||
displayName: Manual validation
|
|
||||||
pool:
|
|
||||||
type: server
|
|
||||||
timeoutInMinutes: 1440
|
|
||||||
steps:
|
|
||||||
- task: ManualValidation@0
|
|
||||||
displayName: Wait 24 hours for validation
|
|
||||||
inputs:
|
|
||||||
notifyUsers: $(Build.RequestedForEmail)
|
|
||||||
instructions: Please validate the release and then publish it!
|
|
||||||
timeoutInMinutes: 1440
|
|
||||||
- job: publish
|
|
||||||
dependsOn: validation
|
|
||||||
displayName: Publish to PowerShell Gallery
|
|
||||||
pool:
|
|
||||||
type: release
|
|
||||||
templateContext:
|
|
||||||
inputs:
|
|
||||||
- input: pipelineArtifact
|
|
||||||
artifactName: drop_build_main
|
|
||||||
steps:
|
|
||||||
- task: NuGetCommand@2
|
|
||||||
displayName: Publish module to PowerShell Gallery
|
|
||||||
inputs:
|
|
||||||
command: push
|
|
||||||
packagesToPush: $(Pipeline.Workspace)/PSDesiredStateConfiguration.$(version).nupkg
|
|
||||||
nuGetFeedType: external
|
|
||||||
publishFeedCredentials: PowerShellGallery
|
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
name: Build-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
trigger:
|
||||||
|
# Batch merge builds together while a merge build is running
|
||||||
|
batch: true
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
pr:
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- feature-*
|
||||||
|
paths:
|
||||||
|
exclude:
|
||||||
|
- /.dependabot/*
|
||||||
|
- /.poshchan/*
|
||||||
|
- /.github/**/*
|
||||||
|
- /.vscode/**/*
|
||||||
|
- /.vsts-ci/misc-analysis.yml
|
||||||
|
- /tools/**/*
|
||||||
|
- .editorconfig
|
||||||
|
- .gitattributes
|
||||||
|
- .gitignore
|
||||||
|
- /docs/**/*
|
||||||
|
- /CHANGELOG.md
|
||||||
|
- /CONTRIBUTING.md
|
||||||
|
- /README.md
|
||||||
|
- /LICENSE.txt
|
||||||
|
- /CODE_OF_CONDUCT.md
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- stage: Build
|
||||||
|
displayName: Build PowerShell Package
|
||||||
|
jobs:
|
||||||
|
- job: BuildPkg
|
||||||
|
displayName: Build Package
|
||||||
|
pool:
|
||||||
|
vmImage: windows-2019
|
||||||
|
steps:
|
||||||
|
- template: templates/ci-build.yml
|
||||||
|
- pwsh: |
|
||||||
|
Write-Verbose "BUILD_OUTPUT_PATH- $env:BUILD_OUTPUT_PATH" -Verbose
|
||||||
|
Write-Verbose "SIGNED_OUTPUT_PATH- $env:SIGNED_OUTPUT_PATH" -Verbose
|
||||||
|
Copy-Item $env:BUILD_OUTPUT_PATH $env:SIGNED_OUTPUT_PATH -Recurse -Force
|
||||||
|
displayName: Build Signing Placeholder
|
||||||
|
- pwsh: |
|
||||||
|
$(Build.SourcesDirectory)/build.ps1 -Publish -Signed
|
||||||
|
displayName: Publish
|
||||||
|
timeoutInMinutes: 10
|
||||||
|
|
||||||
|
- stage: Test
|
||||||
|
displayName: Test Package
|
||||||
|
jobs:
|
||||||
|
- template: templates/ci-test.yml
|
||||||
|
parameters:
|
||||||
|
jobName: TestPkgWin
|
||||||
|
displayName: PowerShell Core on Windows
|
||||||
|
imageName: windows-2019
|
||||||
|
|
||||||
|
# Not supported on Windows PowerShell per PSD1
|
||||||
|
# - template: test.yml
|
||||||
|
# parameters:
|
||||||
|
# jobName: TestPkgWinPS
|
||||||
|
# displayName: Windows PowerShell on Windows
|
||||||
|
# imageName: windows-2019
|
||||||
|
# powershellExecutable: powershell
|
||||||
|
|
||||||
|
- template: templates/ci-test.yml
|
||||||
|
parameters:
|
||||||
|
jobName: TestPkgUbuntu16
|
||||||
|
displayName: PowerShell Core on Ubuntu 16.04
|
||||||
|
imageName: ubuntu-16.04
|
||||||
|
|
||||||
|
- template: templates/ci-test.yml
|
||||||
|
parameters:
|
||||||
|
jobName: TestPkgWinMacOS
|
||||||
|
displayName: PowerShell Core on macOS
|
||||||
|
imageName: macOS-10.14
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
name: $(BuildDefinitionName)_$(date:yyMM).$(date:dd)$(rev:rrr)
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
batch: true
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
exclude:
|
||||||
|
- /.dependabot/*
|
||||||
|
- /.poshchan/*
|
||||||
|
- /.github/**/*
|
||||||
|
- /.vscode/**/*
|
||||||
|
- /.vsts-ci/misc-analysis.yml
|
||||||
|
- /tools/**/*
|
||||||
|
- .editorconfig
|
||||||
|
- .gitattributes
|
||||||
|
- .gitignore
|
||||||
|
- /docs/**/*
|
||||||
|
- /CHANGELOG.md
|
||||||
|
- /CONTRIBUTING.md
|
||||||
|
- /README.md
|
||||||
|
- /LICENSE.txt
|
||||||
|
- /CODE_OF_CONDUCT.md
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- stage: Build
|
||||||
|
displayName: Build PowerShell Package
|
||||||
|
jobs:
|
||||||
|
- job: BuildPkg
|
||||||
|
displayName: Build Package
|
||||||
|
pool:
|
||||||
|
name: 'Package ES CodeHub Lab E'
|
||||||
|
steps:
|
||||||
|
- powershell: |
|
||||||
|
$powerShellPath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath 'powershell'
|
||||||
|
Invoke-WebRequest -Uri https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.ps1 -outfile ./install-powershell.ps1
|
||||||
|
./install-powershell.ps1 -Destination $powerShellPath
|
||||||
|
$vstsCommandString = "vso[task.setvariable variable=PATH]$powerShellPath;$env:PATH"
|
||||||
|
Write-Host "sending " + $vstsCommandString
|
||||||
|
Write-Host "##$vstsCommandString"
|
||||||
|
displayName: Install PowerShell Core
|
||||||
|
|
||||||
|
- task: PkgESSetupBuild@10
|
||||||
|
displayName: 'Package ES - Setup Build'
|
||||||
|
inputs:
|
||||||
|
productName: PSDesiredStateConfiguration
|
||||||
|
|
||||||
|
- template: templates/shouldsign.yml
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
Get-ChildItem -Path env:
|
||||||
|
displayName: Capture environment
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
- template: templates/ci-build.yml
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
Write-Verbose "BUILD_OUTPUT_PATH- $env:BUILD_OUTPUT_PATH" -Verbose
|
||||||
|
Write-Verbose "SIGNED_OUTPUT_PATH- $env:SIGNED_OUTPUT_PATH" -Verbose
|
||||||
|
Copy-Item $env:BUILD_OUTPUT_PATH $env:SIGNED_OUTPUT_PATH -Recurse -Force
|
||||||
|
displayName: Copy unsigned files first
|
||||||
|
|
||||||
|
- task: PkgESCodeSign@10
|
||||||
|
displayName: 'CodeSign tools/releaseBuild/signing.xml'
|
||||||
|
env:
|
||||||
|
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
|
||||||
|
inputs:
|
||||||
|
signConfigXml: tools/releaseBuild/signing.xml
|
||||||
|
inPathRoot: '$(BUILD_OUTPUT_PATH)'
|
||||||
|
outPathRoot: '$(SIGNED_OUTPUT_PATH)'
|
||||||
|
condition: and(succeeded(), eq(variables['SHOULD_SIGN'], 'true'))
|
||||||
|
|
||||||
|
- task: PowerShell@1
|
||||||
|
displayName: 'Create catalog file'
|
||||||
|
inputs:
|
||||||
|
scriptType: inlineScript
|
||||||
|
inlineScript: |
|
||||||
|
$signedDir = "$env:SIGNED_OUTPUT_PATH\PSDesiredStateConfiguration"
|
||||||
|
New-FileCatalog -CatalogFilePath "$env:SIGNED_OUTPUT_PATH\PSDesiredStateConfiguration\PSDesiredStateConfiguration.cat" -Path "$signedDir"
|
||||||
|
|
||||||
|
- task: PkgESCodeSign@10
|
||||||
|
displayName: 'CodeSign tools/releaseBuild/FileCatalogSigning.xml'
|
||||||
|
env:
|
||||||
|
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
|
||||||
|
inputs:
|
||||||
|
signConfigXml: tools/releaseBuild/FileCatalogSigning.xml
|
||||||
|
inPathRoot: '$(SIGNED_OUTPUT_PATH)'
|
||||||
|
outPathRoot: '$(SIGNED_OUTPUT_PATH)'
|
||||||
|
condition: and(succeeded(), eq(variables['SHOULD_SIGN'], 'true'))
|
||||||
|
|
||||||
|
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
|
||||||
|
displayName: 'Component Detection'
|
||||||
|
|
||||||
|
- task: AntiMalware@3
|
||||||
|
inputs:
|
||||||
|
InputType: 'Basic'
|
||||||
|
ScanType: 'CustomScan'
|
||||||
|
FileDirPath: '$(SIGNED_OUTPUT_PATH)'
|
||||||
|
EnableServices: false
|
||||||
|
SupportLogOnError: false
|
||||||
|
TreatSignatureUpdateFailureAs: 'Warning'
|
||||||
|
SignatureFreshness: 'UpToDate'
|
||||||
|
TreatStaleSignatureAs: 'Error'
|
||||||
|
|
||||||
|
- task: PoliCheck@1
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
inputs:
|
||||||
|
targetType: F
|
||||||
|
optionsFC: 0
|
||||||
|
optionsXS: 0
|
||||||
|
optionsPE: '1|2|3|4'
|
||||||
|
optionsHMENABLE: 0
|
||||||
|
optionsFTPATH: '$(Build.SourcesDirectory)\tools\terms\FileTypeSet.xml'
|
||||||
|
|
||||||
|
- task: CredScan@2
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
# Publish results as artifacts
|
||||||
|
- task: PublishSecurityAnalysisLogs@3
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
inputs:
|
||||||
|
ArtifactName: 'CodeAnalysisLogs'
|
||||||
|
ArtifactType: 'Container'
|
||||||
|
|
||||||
|
# Publish to TSA server
|
||||||
|
# - task: TSAUpload@1
|
||||||
|
# condition: succeededOrFailed()
|
||||||
|
# continueOnError: true
|
||||||
|
# inputs:
|
||||||
|
# tsaVersion: 'TsaV2'
|
||||||
|
# codebase: 'Existing'
|
||||||
|
# tsaEnvironment: 'PROD'
|
||||||
|
# codeBaseName: 'PSDesiredStateConfiguration_20190828'
|
||||||
|
# uploadAPIScan: false
|
||||||
|
# uploadBinSkim: false
|
||||||
|
# uploadCredScan: true
|
||||||
|
# uploadFortifySCA: false
|
||||||
|
# uploadFxCop: false
|
||||||
|
# uploadModernCop: false
|
||||||
|
# uploadPoliCheck: true
|
||||||
|
# uploadPREfast: false
|
||||||
|
# uploadRoslyn: false
|
||||||
|
# uploadTSLint: false
|
||||||
|
# uploadAsync: true
|
||||||
|
|
||||||
|
- pwsh: |
|
||||||
|
$(Build.SourcesDirectory)/build.ps1 -Publish -Signed
|
||||||
|
displayName: Publish
|
||||||
|
timeoutInMinutes: 10
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
trigger:
|
||||||
|
# Batch merge builds together while a merge build is running
|
||||||
|
batch: true
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
|
||||||
|
pr:
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
|
||||||
|
resources:
|
||||||
|
- repo: self
|
||||||
|
clean: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
- template: templates/credscan.yml
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
steps:
|
||||||
|
- pwsh: |
|
||||||
|
Install-Module -Name "platyPS","Pester" -Force
|
||||||
|
displayName: Install dependencies
|
||||||
|
timeoutInMinutes: 10
|
||||||
|
- pwsh: |
|
||||||
|
Install-Module -Name "PSScriptAnalyzer" -RequiredVersion 1.18.0 -Force
|
||||||
|
displayName: Install PSScriptAnalyzer
|
||||||
|
timeoutInMinutes: 10
|
||||||
|
- pwsh: |
|
||||||
|
Install-Module -Name PSPackageProject -Force
|
||||||
|
displayName: Install PSPackageProject module
|
||||||
|
timeoutInMinutes: 10
|
||||||
|
- pwsh: |
|
||||||
|
$(Build.SourcesDirectory)/build.ps1 -Build
|
||||||
|
displayName: Build
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
parameters:
|
||||||
|
jobName: TestPkgWin
|
||||||
|
imageName: windows-2019
|
||||||
|
displayName: PowerShell Core on Windows
|
||||||
|
powershellExecutable: pwsh
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
- job: ${{ parameters.jobName }}
|
||||||
|
pool:
|
||||||
|
vmImage: ${{ parameters.imageName }}
|
||||||
|
displayName: ${{ parameters.displayName }}
|
||||||
|
steps:
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
if($IsMacOs)
|
||||||
|
{
|
||||||
|
brew install powershell/tap/powershell-preview
|
||||||
|
sudo ln -s -f /usr/local/opt/powershell-preview/libexec/pwsh /usr/local/bin/pwsh
|
||||||
|
}
|
||||||
|
elseif($IsLinux)
|
||||||
|
{
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install powershell-preview
|
||||||
|
sudo ln -s /opt/microsoft/powershell/7-preview/pwsh /usr/local/bin/pwsh
|
||||||
|
}
|
||||||
|
elseif($IsWindows)
|
||||||
|
{
|
||||||
|
Invoke-WebRequest -Uri https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.ps1 -outfile ./install-powershell.ps1
|
||||||
|
./install-powershell.ps1 -AddToPath -Preview -Destination C:\powershell-preview
|
||||||
|
$vstsCommandString = "vso[task.setvariable variable=PATH]C:\powershell-preview;$env:PATH"
|
||||||
|
Write-Host "sending " + $vstsCommandString
|
||||||
|
Write-Host "##$vstsCommandString"
|
||||||
|
}
|
||||||
|
displayName: Setup PowerShell preview
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
$PSVersionTable
|
||||||
|
$vstsCommandString = "vso[task.setvariable variable=PSHOME]$pshome"
|
||||||
|
Write-Host "sending " + $vstsCommandString
|
||||||
|
Write-Host "##$vstsCommandString"
|
||||||
|
displayName: Capture PowerShellVersion
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
dir env:PATH
|
||||||
|
displayName: Capture Path
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
Get-PSRepository
|
||||||
|
displayName: Capture PSRepository
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
Install-module Pester -Force -MaximumVersion 4.99
|
||||||
|
displayName: Install dependencies - Pester
|
||||||
|
timeoutInMinutes: 10
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
Install-Module -Name "platyPS" -Force
|
||||||
|
displayName: Install dependencies - PlatyPS
|
||||||
|
timeoutInMinutes: 10
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
Install-Module -Name "PSScriptAnalyzer" -RequiredVersion 1.18.0 -Force
|
||||||
|
displayName: Install dependencies - PSScriptAnalyzer
|
||||||
|
timeoutInMinutes: 10
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
Install-Module -Name PSPackageProject -Force
|
||||||
|
displayName: Install PSPackageProject module
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
Get-InstalledModule -Name pester -AllVersions | Where-Object {$_.Version -ge ([version]::new(5,0,0))} | Uninstall-Module -Force
|
||||||
|
displayName: Remove >= 5.0.0 Pester
|
||||||
|
|
||||||
|
- task: DownloadBuildArtifacts@0
|
||||||
|
displayName: 'Download artifacts'
|
||||||
|
inputs:
|
||||||
|
buildType: current
|
||||||
|
downloadType: specific
|
||||||
|
itemPattern: '**/*.nupkg'
|
||||||
|
downloadPath: '$(System.ArtifactsDirectory)'
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
$sourceName = 'pspackageproject-local-repo'
|
||||||
|
Register-PSRepository -Name $sourceName -SourceLocation '$(System.ArtifactsDirectory)' -ErrorAction Ignore
|
||||||
|
$config = Get-PSPackageProjectConfiguration
|
||||||
|
$buildOutputPath = $config.BuildOutputPath
|
||||||
|
$null = New-Item -ItemType Directory -Path $buildOutputPath -Verbose
|
||||||
|
$moduleName = $config.ModuleName
|
||||||
|
Save-Module -Repository $sourceName -Name $moduleName -Path $config.BuildOutputPath
|
||||||
|
displayName: Extract product artifact
|
||||||
|
timeoutInMinutes: 10
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
Invoke-PSPackageProjectTest -Type Functional
|
||||||
|
displayName: Execute functional tests - InvokeDscResource Disabled
|
||||||
|
errorActionPreference: continue
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
$configFolder = split-path $PROFILE
|
||||||
|
$configPath = Join-Path $configFolder -ChildPath powershell.config.json
|
||||||
|
copy-Item $(Build.SourcesDirectory)/assets/powershell.config.json $configPath
|
||||||
|
displayName: Enable ExperimentalFeature
|
||||||
|
errorActionPreference: continue
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
Invoke-PSPackageProjectTest -Type Functional
|
||||||
|
displayName: Execute functional tests - InvokeDscResource Enabled
|
||||||
|
errorActionPreference: continue
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
Invoke-PSPackageProjectTest -Type StaticAnalysis
|
||||||
|
displayName: Execute static analysis tests
|
||||||
|
# need to figure out how to disable PSAvoidOverwritingBuiltInCmdlets
|
||||||
|
continueOnError: true
|
||||||
|
errorActionPreference: continue
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
|
||||||
|
- ${{ parameters.powershellExecutable }}: |
|
||||||
|
Unregister-PSRepository -Name 'pspackageproject-local-repo' -ErrorAction Ignore
|
||||||
|
displayName: Unregister temporary PSRepository
|
||||||
|
condition: always()
|
||||||
|
timeoutInMinutes: 10
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
parameters:
|
||||||
|
pool: 'Hosted VS2017'
|
||||||
|
jobName: 'credscan'
|
||||||
|
displayName: Secret Scan
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
- job: ${{ parameters.jobName }}
|
||||||
|
pool:
|
||||||
|
name: ${{ parameters.pool }}
|
||||||
|
|
||||||
|
displayName: ${{ parameters.displayName }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- powershell: Write-Host "##vso[build.updatebuildnumber]$env:BUILD_SOURCEBRANCHNAME-$env:BUILD_SOURCEVERSION-$((get-date).ToString("yyyyMMddhhmmss"))"
|
||||||
|
displayName: Set Build Name for Non-PR
|
||||||
|
condition: ne(variables['Build.Reason'], 'PullRequest')
|
||||||
|
|
||||||
|
- task: securedevelopmentteam.vss-secure-development-tools.build-task-credscan.CredScan@2
|
||||||
|
displayName: 'Scan for secrets'
|
||||||
|
inputs:
|
||||||
|
debugMode: false
|
||||||
|
|
||||||
|
- task: securedevelopmentteam.vss-secure-development-tools.build-task-publishsecurityanalysislogs.PublishSecurityAnalysisLogs@2
|
||||||
|
displayName: 'Publish Secret Scan Logs to Build Artifacts'
|
||||||
|
continueOnError: true
|
||||||
|
|
||||||
|
- task: securedevelopmentteam.vss-secure-development-tools.build-task-postanalysis.PostAnalysis@1
|
||||||
|
displayName: 'Check for failures'
|
||||||
|
inputs:
|
||||||
|
CredScan: true
|
||||||
|
ToolLogsNotFoundAction: Error
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
steps:
|
||||||
|
- powershell: |
|
||||||
|
$shouldSign = $true
|
||||||
|
if($env:BUILD_REASON -ne 'Manual')
|
||||||
|
{
|
||||||
|
$shouldSign = $false
|
||||||
|
}
|
||||||
|
|
||||||
|
if($env:SKIP_SIGNING -eq 'Yes')
|
||||||
|
{
|
||||||
|
$shouldSign = $false
|
||||||
|
}
|
||||||
|
|
||||||
|
$vstsCommandString = "vso[task.setvariable variable=SHOULD_SIGN]$($shouldSign.ToString().ToLowerInvariant())"
|
||||||
|
Write-Host ("sending " + $vstsCommandString)
|
||||||
|
Write-Host "##$vstsCommandString"
|
||||||
|
displayName: 'Set SHOULD_SIGN Variable'
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Changelogs
|
|
||||||
|
|
||||||
* [v2 changelog](v2.md)
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
# v2 Changelog
|
|
||||||
|
|
||||||
## [v2.0.8]
|
|
||||||
|
|
||||||
- Fixed an issue with array parameters is key-value pairs (#128).
|
|
||||||
- ConvertTo-MOFInstance: Include resource properties with empty array value (#127)
|
|
||||||
|
|
||||||
## [v2.0.7]
|
|
||||||
|
|
||||||
### Main changes
|
|
||||||
|
|
||||||
- Fixed Invoke-DscResource error when a class-based resource module path contains a space.
|
|
||||||
|
|
||||||
[v2.0.7]: https://www.powershellgallery.com/packages/PSDesiredStateConfiguration/2.0.7
|
|
||||||
|
|
||||||
## [v2.0.6]
|
|
||||||
|
|
||||||
### Main changes
|
|
||||||
|
|
||||||
- Fixed `PathSeparator` bug in Get-DSCResourceModules.
|
|
||||||
- Changed `PSDesiredStateConfiguration.InvokeDscResource` from experimental to permanently enabled feature.
|
|
||||||
- Changed `ErrorAction` to `Ignore` so that the error doesn't show up in `$Error`.
|
|
||||||
- Removed duplicate result resources from `Get-DSCResourcesModules`.
|
|
||||||
- Add `ImplementationDetail` member to results only when the member does not already exist.
|
|
||||||
- Updated v2 Release pipeline with latest Compliance requirements.
|
|
||||||
- Added SBOM generation that is now released with v2 module.
|
|
||||||
|
|
||||||
[v2.0.6]: https://www.powershellgallery.com/packages/PSDesiredStateConfiguration/2.0.6
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) Microsoft Corporation.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"ExperimentalFeatures":["PSCommandNotFoundSuggestion","PSForEachObjectParallel","PSImplicitRemotingBatching","Microsoft.PowerShell.Utility.PSDebugRunspaceWithBreakpoints","PSDesiredStateConfiguration.InvokeDscResource"]}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# Starter pipeline
|
||||||
|
# Start with a minimal pipeline that you can customize to build and deploy your code.
|
||||||
|
# Add steps that build, run tests, deploy, and more:
|
||||||
|
# https://aka.ms/yaml
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
- master
|
||||||
|
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-latest'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- script: echo Hello, world!
|
||||||
|
displayName: 'Run a one-line script'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
echo Add other tasks to build, test, and deploy your project.
|
||||||
|
echo See https://aka.ms/yaml
|
||||||
|
displayName: 'Run a multi-line script'
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
# Copyright (c) Microsoft Corporation.
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
# Licensed under the MIT License.
|
# Licensed under the MIT License.
|
||||||
|
|
||||||
|
# Do NOT edit this file. Edit dobuild.ps1
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingWriteHost", "")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingWriteHost", "")]
|
||||||
param (
|
param (
|
||||||
[Parameter(ParameterSetName="build")]
|
[Parameter(ParameterSetName="build")]
|
||||||
@@ -14,6 +15,9 @@ param (
|
|||||||
[Parameter(ParameterSetName="publish")]
|
[Parameter(ParameterSetName="publish")]
|
||||||
[switch]
|
[switch]
|
||||||
$Publish,
|
$Publish,
|
||||||
|
[Parameter(ParameterSetName="publish")]
|
||||||
|
[switch]
|
||||||
|
$Signed,
|
||||||
|
|
||||||
[Parameter(ParameterSetName="build")]
|
[Parameter(ParameterSetName="build")]
|
||||||
[switch]
|
[switch]
|
||||||
@@ -33,15 +37,34 @@ param (
|
|||||||
$TestInvokeDscResource
|
$TestInvokeDscResource
|
||||||
)
|
)
|
||||||
|
|
||||||
# Build configuration
|
$config = Get-PSPackageProjectConfiguration -ConfigPath $PSScriptRoot
|
||||||
$script:ModuleName = "PSDesiredStateConfiguration"
|
|
||||||
$script:SrcPath = Join-Path (Join-Path $PSScriptRoot "src") $ModuleName
|
$script:ModuleName = $config.ModuleName
|
||||||
$script:OutDirectory = Join-Path $PSScriptRoot "out"
|
$script:SrcPath = $config.SourcePath
|
||||||
$script:Culture = "en-US"
|
$script:OutDirectory = $config.BuildOutputPath
|
||||||
$script:HelpPath = Join-Path $PSScriptRoot "help"
|
$script:SignedDirectory = $config.SignedOutputPath
|
||||||
|
$script:TestPath = $config.TestPath
|
||||||
|
|
||||||
|
$script:ModuleRoot = $PSScriptRoot
|
||||||
|
$script:Culture = $config.Culture
|
||||||
|
$script:HelpPath = $config.HelpPath
|
||||||
|
|
||||||
|
if ($env:TF_BUILD) {
|
||||||
|
$vstsCommandString = "vso[task.setvariable variable=BUILD_OUTPUT_PATH]$OutDirectory"
|
||||||
|
Write-Host ("sending " + $vstsCommandString)
|
||||||
|
Write-Host "##$vstsCommandString"
|
||||||
|
|
||||||
|
$vstsCommandString = "vso[task.setvariable variable=SIGNED_OUTPUT_PATH]$SignedDirectory"
|
||||||
|
Write-Host ("sending " + $vstsCommandString)
|
||||||
|
Write-Host "##$vstsCommandString"
|
||||||
|
}
|
||||||
|
|
||||||
. $PSScriptRoot\dobuild.ps1
|
. $PSScriptRoot\dobuild.ps1
|
||||||
|
|
||||||
|
if ( ! ( Get-Module -ErrorAction SilentlyContinue PSPackageProject) ) {
|
||||||
|
Install-Module PSPackageProject
|
||||||
|
}
|
||||||
|
|
||||||
if ($Clean -and (Test-Path $OutDirectory))
|
if ($Clean -and (Test-Path $OutDirectory))
|
||||||
{
|
{
|
||||||
Remove-Item -Force -Recurse $OutDirectory -ErrorAction Stop -Verbose
|
Remove-Item -Force -Recurse $OutDirectory -ErrorAction Stop -Verbose
|
||||||
@@ -58,48 +81,42 @@ else
|
|||||||
|
|
||||||
if ($Build.IsPresent)
|
if ($Build.IsPresent)
|
||||||
{
|
{
|
||||||
DoBuild
|
$sb = (Get-Item Function:DoBuild).ScriptBlock
|
||||||
|
Invoke-PSPackageProjectBuild -BuildScript $sb -SkipPublish
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($Publish.IsPresent)
|
if ($Publish.IsPresent)
|
||||||
{
|
{
|
||||||
DoPackage
|
Invoke-PSPackageProjectPublish -Signed:$Signed.IsPresent
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($Test.IsPresent) {
|
if ( $TestInvokeDscResource.IsPresent ) {
|
||||||
Import-Module Pester -MinimumVersion 5.0.0
|
$backupName = $null
|
||||||
Import-Module $PSScriptRoot\out\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psd1
|
try {
|
||||||
|
$configFolder = split-path $PROFILE
|
||||||
|
$configPath = Join-Path $configFolder -ChildPath powershell.config.json
|
||||||
|
if(Test-Path ~/.config/powershell/powershell.config.json)
|
||||||
|
{
|
||||||
|
$backupName = Join-Path $configFolder -ChildPath "powershell.config-((Get-Date).ToString('yyyyMMddHHmm')).json"
|
||||||
|
Copy-Item $configPath $backupName -force
|
||||||
|
}
|
||||||
|
|
||||||
$testPath = Join-Path $PSScriptRoot "test"
|
copy-Item $PSScriptRoot/assets/powershell.config.json $configPath
|
||||||
$config = [PesterConfiguration]::Default
|
Invoke-PSPackageProjectTest -Type $TestType
|
||||||
$config.Run.Path = $testPath
|
|
||||||
$config.Run.Exit = $false
|
|
||||||
$config.TestResult.Enabled = $true
|
|
||||||
$config.TestResult.OutputPath = Join-Path $OutDirectory "testResults.xml"
|
|
||||||
$config.Output.Verbosity = "Detailed"
|
|
||||||
|
|
||||||
Write-Verbose -Verbose "Running tests from: $testPath"
|
|
||||||
$result = Invoke-Pester -Configuration $config
|
|
||||||
|
|
||||||
if ($result.FailedCount -gt 0) {
|
|
||||||
throw "$($result.FailedCount) test(s) failed"
|
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
remove-item $configPath
|
||||||
|
if($backupName)
|
||||||
|
{
|
||||||
|
Copy-Item $backupName $configPath -force
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $Test.IsPresent ) {
|
||||||
|
Invoke-PSPackageProjectTest -Type $TestType
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($UpdateHelp.IsPresent) {
|
if ($UpdateHelp.IsPresent) {
|
||||||
# Build help using platyPS
|
Add-PSPackageProjectCmdletHelp -ProjectRoot $ModuleRoot -ModuleName $ModuleName -Culture $Culture
|
||||||
$docsPath = Join-Path $PSScriptRoot "help"
|
|
||||||
$markdownDocsPath = Join-Path $docsPath "en-US"
|
|
||||||
$outputDocsPath = Join-Path $OutModule "en-US"
|
|
||||||
|
|
||||||
if (-not (Get-Module -ListAvailable platyPS)) {
|
|
||||||
Write-Verbose -Verbose "platyPS module not found, installing"
|
|
||||||
Install-Module -Force -Name platyPS -Scope CurrentUser
|
|
||||||
}
|
|
||||||
|
|
||||||
Import-Module platyPS -Verbose:$false
|
|
||||||
if (-not (Test-Path $outputDocsPath)) {
|
|
||||||
$null = New-Item -Type Directory -Path $outputDocsPath -Force
|
|
||||||
}
|
|
||||||
$null = New-ExternalHelp -Path $markdownDocsPath -OutputPath $outputDocsPath -Force
|
|
||||||
}
|
}
|
||||||
|
|||||||
+41
-16
@@ -1,27 +1,52 @@
|
|||||||
# Copyright (c) Microsoft Corporation. All rights reserved.
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
# Licensed under the MIT License.
|
# Licensed under the MIT License.
|
||||||
|
|
||||||
|
#####################################################
|
||||||
|
# Do NOT edit anything outside the DoBuild function.
|
||||||
|
# You can define functions inside the scope of DoBuild.
|
||||||
|
#####################################################
|
||||||
|
|
||||||
|
<#
|
||||||
|
.DESCRIPTION
|
||||||
|
Implement build and packaging of the package and place the output $OutDirectory/$ModuleName
|
||||||
|
#>
|
||||||
function DoBuild
|
function DoBuild
|
||||||
{
|
{
|
||||||
Write-Verbose -Verbose -Message "Running DoBuild to layout module at: '${OutDirectory}/${ModuleName}'"
|
Write-Verbose -Verbose -Message "Starting DoBuild"
|
||||||
Copy-Item "${SrcPath}/*" "${OutDirectory}/${ModuleName}" -Recurse
|
|
||||||
Copy-Item -Recurse "${HelpPath}/${Culture}" "${OutDirectory}/${ModuleName}"
|
|
||||||
}
|
|
||||||
|
|
||||||
function DoPackage
|
Write-Verbose -Verbose -Message "Copying module files to '${OutDirectory}/${ModuleName}'"
|
||||||
{
|
# copy psm1 and psd1 files
|
||||||
try {
|
copy-item "${SrcPath}/*" "${OutDirectory}/${ModuleName}" -Recurse
|
||||||
$repoName = [guid]::NewGuid().ToString()
|
|
||||||
$modulePath = Join-Path $OutDirectory $ModuleName
|
|
||||||
$null = Register-PSRepository -Name $repoName -InstallationPolicy Trusted -SourceLocation $OutDirectory
|
|
||||||
|
|
||||||
Write-Verbose -Verbose -Message "Publishing module from: '$modulePath'"
|
# copy help
|
||||||
Publish-Module -Path $modulePath -Repository $repoName
|
# Write-Verbose -Verbose -Message "Copying help files to '${OutDirectory}/${ModuleName}'"
|
||||||
|
# copy-item -Recurse "${HelpPath}/${Culture}" "${OutDirectory}/${ModuleName}"
|
||||||
|
|
||||||
$nupkgPath = (Get-ChildItem -Path $OutDirectory -Filter "$ModuleName*.nupkg" | Select-Object -First 1).FullName
|
$subsystemCodePath = Resolve-Path "${SrcPath}\..\DscSubsystem"
|
||||||
Write-Verbose -Verbose -Message "Created package: $nupkgPath"
|
$subsystemBinPath = "bin/Debug/net6.0/publish/Microsoft.PowerShell.DscSubsystem.dll"
|
||||||
|
Write-Verbose -Verbose -Message "Subsystem code path ${subsystemCodePath}"
|
||||||
|
|
||||||
|
if ( Test-Path $subsystemCodePath )
|
||||||
|
{
|
||||||
|
Write-Verbose -Verbose -Message "Building assembly and copying to '${OutDirectory}/${ModuleName}'"
|
||||||
|
|
||||||
|
Push-Location $subsystemCodePath
|
||||||
|
$result = dotnet publish
|
||||||
|
if (Test-Path $subsystemBinPath)
|
||||||
|
{
|
||||||
|
Copy-Item $subsystemBinPath "${OutDirectory}/${ModuleName}"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Write-Error "dotnet build failed - $subsystemBinPath not found - $result"
|
||||||
|
}
|
||||||
|
|
||||||
|
Pop-Location
|
||||||
}
|
}
|
||||||
finally {
|
else {
|
||||||
Unregister-PSRepository -Name $repoName
|
Write-Verbose -Verbose -Message "No code to build in '$subsystemCodePath'"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## Add build and packaging here
|
||||||
|
Write-Verbose -Verbose -Message "Ending DoBuild"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
|
||||||
|
<metadata minClientVersion="3.4">
|
||||||
|
<id>PSDesiredStateConfiguration</id>
|
||||||
|
<version>2.0</version>
|
||||||
|
<title>PSDesiredStateConfiguration</title>
|
||||||
|
<authors>Microsoft</authors>
|
||||||
|
<owners>microsoft,powershell</owners>
|
||||||
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
|
<description>Provides pre-built PSDesiredStateConfiguration module for PowerShell.</description>
|
||||||
|
<summary></summary>
|
||||||
|
<copyright>© Microsoft Corporation. All rights reserved.</copyright>
|
||||||
|
<contentFiles>
|
||||||
|
<files include="**/*" buildAction="None" copyToOutput="true" flatten="false" />
|
||||||
|
</contentFiles>
|
||||||
|
</metadata>
|
||||||
|
</package>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"HelpPath": "help",
|
||||||
|
"ModuleName": "PSDesiredStateConfiguration",
|
||||||
|
"BuildOutputPath": "out",
|
||||||
|
"SignedOutputPath": "signed",
|
||||||
|
"SourcePath": "src/PSDesiredStateConfiguration",
|
||||||
|
"TestPath": "test",
|
||||||
|
"Culture": "en-US"
|
||||||
|
}
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT License.
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Management.Automation;
|
||||||
|
using System.Management.Automation.Internal;
|
||||||
|
using System.Management.Automation.Language;
|
||||||
|
|
||||||
|
namespace System.Management.Automation.Subsystem.DSC
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interface for implementing a cross platform desired state configuration component.
|
||||||
|
/// </summary>
|
||||||
|
public class CrossPlatformDsc : ICrossPlatformDsc, IModuleAssemblyInitializer
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the unique identifier for a subsystem implementation.
|
||||||
|
/// </summary>
|
||||||
|
public Guid Id { get {return Guid.NewGuid();} }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the name of a subsystem implementation.
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get {return "Cross platform desired state configuration";} }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the description of a subsystem implementation.
|
||||||
|
/// </summary>
|
||||||
|
public string Description { get {return "Cross platform desired state configuration";} }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a dictionary that contains the functions to be defined at the global scope of a PowerShell session.
|
||||||
|
/// Key: function name; Value: function script.
|
||||||
|
/// </summary>
|
||||||
|
Dictionary<string, string>? ISubsystem.FunctionsToDefine => null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test.
|
||||||
|
/// </summary>
|
||||||
|
public void LoadDefaultKeywords(Collection<Exception> errors)
|
||||||
|
{
|
||||||
|
Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache.LoadDefaultCimKeywords(errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Default summary.
|
||||||
|
/// </summary>
|
||||||
|
public void ClearCache()
|
||||||
|
{
|
||||||
|
Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache.ClearCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Default summary.
|
||||||
|
/// </summary>
|
||||||
|
public string GetDSCResourceUsageString(DynamicKeyword keyword)
|
||||||
|
{
|
||||||
|
return Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache.GetDSCResourceUsageString(keyword);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if a string is one of dynamic keywords that can be used in both configuration and meta configuration.
|
||||||
|
/// </summary>
|
||||||
|
public bool IsSystemResourceName(string name)
|
||||||
|
{
|
||||||
|
return Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache.SystemResourceNames.Contains(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if a string matches default module name used for meta configuration resources.
|
||||||
|
/// </summary>
|
||||||
|
public bool IsDefaultModuleNameForMetaConfigResource(string name)
|
||||||
|
{
|
||||||
|
return name.Equals(Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache.DefaultModuleInfoForMetaConfigResource.Item1, StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnImport()
|
||||||
|
{
|
||||||
|
if (SubsystemManager.GetSubsystem<ICrossPlatformDsc>() == null)
|
||||||
|
{
|
||||||
|
SubsystemManager.RegisterSubsystem(SubsystemKind.CrossPlatformDsc, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT License.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.Management.Automation;
|
||||||
|
using System.Security;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class that does high level Cim schema parsing.
|
||||||
|
/// </summary>
|
||||||
|
internal class CimDSCParser
|
||||||
|
{
|
||||||
|
private readonly JsonDeserializer _jsonDeserializer;
|
||||||
|
|
||||||
|
internal CimDSCParser()
|
||||||
|
{
|
||||||
|
_jsonDeserializer = JsonDeserializer.Create();
|
||||||
|
}
|
||||||
|
|
||||||
|
internal IEnumerable<PSObject> ParseSchemaJson(string filePath, bool useNewRunspace = false)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string json = File.ReadAllText(filePath);
|
||||||
|
string fileNameDefiningClass = Path.GetFileNameWithoutExtension(filePath);
|
||||||
|
int dotIndex = fileNameDefiningClass.IndexOf(".schema", StringComparison.InvariantCultureIgnoreCase);
|
||||||
|
if (dotIndex != -1)
|
||||||
|
{
|
||||||
|
fileNameDefiningClass = fileNameDefiningClass.Substring(0, dotIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerable<PSObject> result = _jsonDeserializer.DeserializeClasses(json, useNewRunspace);
|
||||||
|
foreach (dynamic classObject in result)
|
||||||
|
{
|
||||||
|
string superClassName = classObject.SuperClassName;
|
||||||
|
string className = classObject.ClassName;
|
||||||
|
if (string.Equals(superClassName, "OMI_BaseResource", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
// Get the name of the file without schema.mof/json extension
|
||||||
|
if (!className.Equals(fileNameDefiningClass, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(
|
||||||
|
ParserStrings.ClassNameNotSameAsDefiningFile, className, fileNameDefiningClass);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
PSInvalidOperationException e = PSTraceSource.NewInvalidOperationException(
|
||||||
|
exception, ParserStrings.CimDeserializationError, filePath);
|
||||||
|
|
||||||
|
e.SetErrorId("CimDeserializationError");
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT License.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Management.Automation;
|
||||||
|
using System.Management.Automation.Runspaces;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform
|
||||||
|
{
|
||||||
|
internal class JsonDeserializer
|
||||||
|
{
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Instantiates a default deserializer.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Default deserializer.</returns>
|
||||||
|
public static JsonDeserializer Create()
|
||||||
|
{
|
||||||
|
return new JsonDeserializer();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Constructors
|
||||||
|
|
||||||
|
#region Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns schema of Cim classes from specified json file.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="json">Json text to deserialize.</param>
|
||||||
|
/// <param name="useNewRunspace">If a new runspace should be used.</param>
|
||||||
|
/// <returns>Deserialized PSObjects.</returns>
|
||||||
|
public IEnumerable<PSObject> DeserializeClasses(string json, bool useNewRunspace = false)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(json))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(json));
|
||||||
|
}
|
||||||
|
|
||||||
|
System.Management.Automation.PowerShell powerShell = null;
|
||||||
|
|
||||||
|
if (useNewRunspace)
|
||||||
|
{
|
||||||
|
// currently using RunspaceMode.NewRunspace will reset PSModulePath env var for the entire process
|
||||||
|
// this is something we want to avoid in DSC GuestConfigAgent scenario, so we use following workaround
|
||||||
|
var s_iss = InitialSessionState.CreateDefault();
|
||||||
|
s_iss.EnvironmentVariables.Add(
|
||||||
|
new SessionStateVariableEntry(
|
||||||
|
"PSModulePath",
|
||||||
|
Environment.GetEnvironmentVariable("PSModulePath"),
|
||||||
|
description: null));
|
||||||
|
powerShell = System.Management.Automation.PowerShell.Create(s_iss);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
powerShell = System.Management.Automation.PowerShell.Create(RunspaceMode.CurrentRunspace);
|
||||||
|
}
|
||||||
|
|
||||||
|
using (powerShell)
|
||||||
|
{
|
||||||
|
return powerShell.AddCommand("Microsoft.PowerShell.Utility\\ConvertFrom-Json")
|
||||||
|
.AddParameter("InputObject", json)
|
||||||
|
.AddParameter("Depth", 100) // maximum supported by cmdlet
|
||||||
|
.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<AssemblyName>Microsoft.PowerShell.DscSubsystem</AssemblyName>
|
||||||
|
|
||||||
|
<DelaySign>true</DelaySign>
|
||||||
|
<AssemblyOriginatorKeyFile>visualstudiopublic.snk</AssemblyOriginatorKeyFile>
|
||||||
|
<SignAssembly>true</SignAssembly>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<!-- TEMPORARY: This needs to be replaced with <PackageReference Include="System.Management.Automation" /> when Preview 6 is published with subsystem interface. -->
|
||||||
|
<Reference Include="C:\Temp\SMA-Reference\System.Management.Automation.dll"></Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
Binary file not shown.
+232
@@ -0,0 +1,232 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_Credential",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "UserName",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"MaxLen": 256
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Password",
|
||||||
|
"CimType": "String"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "OMI_BaseResource",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "ResourceId",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Required": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "SourceInfo",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DependsOn",
|
||||||
|
"CimType": "StringArray",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ModuleName",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Required": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ModuleVersion",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Required": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationName",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "PsDscRunAsCredential",
|
||||||
|
"CimType": "Instance",
|
||||||
|
"ReferenceClassName": "MSFT_Credential",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true,
|
||||||
|
"EmbeddedInstance": "MSFT_Credential"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_KeyValuePair",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "Key",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Key": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Value",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_BaseConfigurationProviderRegistration",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "ClassName",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Key": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DSCEngineCompatVersion",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DSCModuleVersion",
|
||||||
|
"CimType": "String"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_CimConfigurationProviderRegistration",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "MSFT_BaseConfigurationProviderRegistration",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "Namespace",
|
||||||
|
"CimType": "String"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_PSConfigurationProviderRegistration",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "MSFT_BaseConfigurationProviderRegistration",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "ModuleName",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ProviderPath",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ModulePath",
|
||||||
|
"CimType": "String"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "OMI_ConfigurationDocument",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "Version",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Author",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Copyright",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "HelpInfoUri",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ContentType",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "GenerationDate",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "GenerationHost",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Name",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "MinimumCompatibleVersion",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "CompatibleVersionAdditionalProperties",
|
||||||
|
"CimType": "StringArray"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "UseCms",
|
||||||
|
"CimType": "Boolean"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "OMI_MetaConfigurationResource",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "ResourceId",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Required": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "SourceInfo",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "OMI_ResourceModuleManager",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "OMI_MetaConfigurationResource"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "OMI_ConfigurationDownloadManager",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "OMI_MetaConfigurationResource"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "OMI_ReportManager",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "OMI_MetaConfigurationResource"
|
||||||
|
}
|
||||||
|
]
|
||||||
+218
@@ -0,0 +1,218 @@
|
|||||||
|
{
|
||||||
|
"ClassName": "MSFT_DSCMetaConfiguration",
|
||||||
|
"FriendlyName": "LocalConfigurationManager",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationModeFrequencyMins",
|
||||||
|
"CimType": "UInt32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RebootNodeIfNeeded",
|
||||||
|
"CimType": "Boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationMode",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"ValueMap": [
|
||||||
|
"ApplyOnly",
|
||||||
|
"ApplyAndMonitor",
|
||||||
|
"ApplyAndAutoCorrect",
|
||||||
|
"MonitorOnly"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"ApplyOnly",
|
||||||
|
"ApplyAndMonitor",
|
||||||
|
"ApplyAndAutoCorrect",
|
||||||
|
"MonitorOnly"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ActionAfterReboot",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"ValueMap": [
|
||||||
|
"ContinueConfiguration",
|
||||||
|
"StopConfiguration"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"ContinueConfiguration",
|
||||||
|
"StopConfiguration"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Credential",
|
||||||
|
"CimType": "Instance",
|
||||||
|
"ReferenceClassName": "MSFT_Credential",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_Credential"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RefreshMode",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"ValueMap": [
|
||||||
|
"Push",
|
||||||
|
"Pull",
|
||||||
|
"Disabled"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"Push",
|
||||||
|
"Pull",
|
||||||
|
"Disabled"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "CertificateID",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationID",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DownloadManagerName",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DownloadManagerCustomData",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "MSFT_KeyValuePair",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_KeyValuePair"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RefreshFrequencyMins",
|
||||||
|
"CimType": "UInt32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AllowModuleOverwrite",
|
||||||
|
"CimType": "Boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DebugMode",
|
||||||
|
"CimType": "StringArray",
|
||||||
|
"Qualifiers": {
|
||||||
|
"ValueMap": [
|
||||||
|
"None",
|
||||||
|
"ForceModuleImport",
|
||||||
|
"All",
|
||||||
|
"ResourceScriptBreakAll",
|
||||||
|
"ResourceScriptBreakpoint"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"None",
|
||||||
|
"ForceModuleImport",
|
||||||
|
"All",
|
||||||
|
"ResourceScriptBreakAll",
|
||||||
|
"ResourceScriptBreakpoint"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "LCMVersion",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Read": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "LCMCompatibleVersions",
|
||||||
|
"CimType": "StringArray",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Read": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "LCMState",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Read": true,
|
||||||
|
"ValueMap": [
|
||||||
|
"Idle",
|
||||||
|
"Busy",
|
||||||
|
"PendingReboot",
|
||||||
|
"PendingConfiguration"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"Idle",
|
||||||
|
"Busy",
|
||||||
|
"PendingReboot",
|
||||||
|
"PendingConfiguration"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "LCMStateDetail",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Read": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationDownloadManagers",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "OMI_ConfigurationDownloadManager",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "OMI_ConfigurationDownloadManager"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ResourceModuleManagers",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "OMI_ResourceModuleManager",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "OMI_ResourceModuleManager"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ReportManagers",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "OMI_ReportManager",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "OMI_ReportManager"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "PartialConfigurations",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "MSFT_PartialConfiguration",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_PartialConfiguration"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "StatusRetentionTimeInDays",
|
||||||
|
"CimType": "UInt32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AgentId",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Read": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "SignatureValidationPolicy",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "SignatureValidations",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "MSFT_SignatureValidation",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_SignatureValidation"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "MaximumDownloadSizeMB",
|
||||||
|
"CimType": "UInt32"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
+455
@@ -0,0 +1,455 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_WebDownloadManager",
|
||||||
|
"FriendlyName": "ConfigurationRepositoryWeb",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "OMI_ConfigurationDownloadManager",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "ServerURL",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Key": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "CertificateID",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AllowUnsecureConnection",
|
||||||
|
"CimType": "Boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RegistrationKey",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationNames",
|
||||||
|
"CimType": "StringArray"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ProxyURL",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ProxyCredential",
|
||||||
|
"CimType": "Instance",
|
||||||
|
"ReferenceClassName": "MSFT_Credential",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_Credential"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_FileDownloadManager",
|
||||||
|
"FriendlyName": "ConfigurationRepositoryShare",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "OMI_ConfigurationDownloadManager",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "SourcePath",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Key": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Credential",
|
||||||
|
"CimType": "Instance",
|
||||||
|
"ReferenceClassName": "MSFT_Credential",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_Credential"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_WebResourceManager",
|
||||||
|
"FriendlyName": "ResourceRepositoryWeb",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "OMI_ResourceModuleManager",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "ServerURL",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Key": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "CertificateID",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AllowUnsecureConnection",
|
||||||
|
"CimType": "Boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RegistrationKey",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ProxyURL",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ProxyCredential",
|
||||||
|
"CimType": "Instance",
|
||||||
|
"ReferenceClassName": "MSFT_Credential",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_Credential"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_FileResourceManager",
|
||||||
|
"FriendlyName": "ResourceRepositoryShare",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "OMI_ResourceModuleManager",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "SourcePath",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Key": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Credential",
|
||||||
|
"CimType": "Instance",
|
||||||
|
"ReferenceClassName": "MSFT_Credential",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_Credential"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_WebReportManager",
|
||||||
|
"FriendlyName": "ReportServerWeb",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "OMI_ReportManager",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "ServerURL",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Key": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "CertificateID",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AllowUnsecureConnection",
|
||||||
|
"CimType": "Boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RegistrationKey",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ProxyURL",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ProxyCredential",
|
||||||
|
"CimType": "Instance",
|
||||||
|
"ReferenceClassName": "MSFT_Credential",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_Credential"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_PartialConfiguration",
|
||||||
|
"FriendlyName": "PartialConfiguration",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "OMI_MetaConfigurationResource",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "Description",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ExclusiveResources",
|
||||||
|
"CimType": "StringArray",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationSource",
|
||||||
|
"CimType": "StringArray",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ResourceModuleSource",
|
||||||
|
"CimType": "StringArray",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DependsOn",
|
||||||
|
"CimType": "StringArray",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RefreshMode",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"ValueMap": [
|
||||||
|
"Push",
|
||||||
|
"Pull",
|
||||||
|
"Disabled"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"Push",
|
||||||
|
"Pull",
|
||||||
|
"Disabled"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_SignatureValidation",
|
||||||
|
"FriendlyName": "SignatureValidation",
|
||||||
|
"ClassVersion": "1.0.0",
|
||||||
|
"SuperClassName": "OMI_MetaConfigurationResource",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "TrustedStorePath",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Write": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "SignedItemType",
|
||||||
|
"CimType": "StringArray",
|
||||||
|
"Qualifiers": {
|
||||||
|
"ValueMap": [
|
||||||
|
"Configuration",
|
||||||
|
"Module"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"Configuration",
|
||||||
|
"Module"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ClassName": "MSFT_DSCMetaConfigurationV2",
|
||||||
|
"FriendlyName": "Settings",
|
||||||
|
"ClassVersion": "2.0.0",
|
||||||
|
"ClassProperties": [
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationModeFrequencyMins",
|
||||||
|
"CimType": "UInt32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RebootNodeIfNeeded",
|
||||||
|
"CimType": "Boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationMode",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"ValueMap": [
|
||||||
|
"ApplyOnly",
|
||||||
|
"ApplyAndMonitor",
|
||||||
|
"ApplyAndAutoCorrect",
|
||||||
|
"MonitorOnly"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"ApplyOnly",
|
||||||
|
"ApplyAndMonitor",
|
||||||
|
"ApplyAndAutoCorrect",
|
||||||
|
"MonitorOnly"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ActionAfterReboot",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"ValueMap": [
|
||||||
|
"ContinueConfiguration",
|
||||||
|
"StopConfiguration"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"ContinueConfiguration",
|
||||||
|
"StopConfiguration"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RefreshMode",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"ValueMap": [
|
||||||
|
"Push",
|
||||||
|
"Pull",
|
||||||
|
"Disabled"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"Push",
|
||||||
|
"Pull",
|
||||||
|
"Disabled"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "CertificateID",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationID",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RefreshFrequencyMins",
|
||||||
|
"CimType": "UInt32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AllowModuleOverwrite",
|
||||||
|
"CimType": "Boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DebugMode",
|
||||||
|
"CimType": "StringArray",
|
||||||
|
"Qualifiers": {
|
||||||
|
"ValueMap": [
|
||||||
|
"None",
|
||||||
|
"ForceModuleImport",
|
||||||
|
"All",
|
||||||
|
"ResourceScriptBreakAll",
|
||||||
|
"ResourceScriptBreakpoint"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"None",
|
||||||
|
"ForceModuleImport",
|
||||||
|
"All",
|
||||||
|
"ResourceScriptBreakAll",
|
||||||
|
"ResourceScriptBreakpoint"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "LCMVersion",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Read": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "LCMCompatibleVersions",
|
||||||
|
"CimType": "StringArray",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Read": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "LCMState",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Read": true,
|
||||||
|
"ValueMap": [
|
||||||
|
"Idle",
|
||||||
|
"Busy",
|
||||||
|
"PendingReboot",
|
||||||
|
"PendingConfiguration"
|
||||||
|
],
|
||||||
|
"Values": [
|
||||||
|
"Idle",
|
||||||
|
"Busy",
|
||||||
|
"PendingReboot",
|
||||||
|
"PendingConfiguration"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "LCMStateDetail",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Read": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ConfigurationDownloadManagers",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "OMI_ConfigurationDownloadManager",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "OMI_ConfigurationDownloadManager"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ResourceModuleManagers",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "OMI_ResourceModuleManager",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "OMI_ResourceModuleManager"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ReportManagers",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "OMI_ReportManager",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "OMI_ReportManager"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "PartialConfigurations",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "MSFT_PartialConfiguration",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_PartialConfiguration"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "StatusRetentionTimeInDays",
|
||||||
|
"CimType": "UInt32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AgentId",
|
||||||
|
"CimType": "String",
|
||||||
|
"Qualifiers": {
|
||||||
|
"Read": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "SignatureValidationPolicy",
|
||||||
|
"CimType": "String"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "SignatureValidations",
|
||||||
|
"CimType": "InstanceArray",
|
||||||
|
"ReferenceClassName": "MSFT_SignatureValidation",
|
||||||
|
"Qualifiers": {
|
||||||
|
"EmbeddedInstance": "MSFT_SignatureValidation"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "MaximumDownloadSizeMB",
|
||||||
|
"CimType": "UInt32"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
RootModule = 'PSDesiredStateConfiguration.psm1'
|
RootModule = 'PSDesiredStateConfiguration.psm1'
|
||||||
|
|
||||||
# Version number of this module.
|
# Version number of this module.
|
||||||
moduleVersion = '2.0.8'
|
moduleVersion = '3.0.0'
|
||||||
|
|
||||||
# Supported PSEditions
|
# Supported PSEditions
|
||||||
CompatiblePSEditions = @('Core')
|
CompatiblePSEditions = @('Core')
|
||||||
@@ -30,7 +30,7 @@ Copyright = '(c) Microsoft Corporation. All rights reserved.'
|
|||||||
Description = 'PowerShell Desired State Configuration'
|
Description = 'PowerShell Desired State Configuration'
|
||||||
|
|
||||||
# Minimum version of the Windows PowerShell engine required by this module
|
# Minimum version of the Windows PowerShell engine required by this module
|
||||||
PowerShellVersion = '6.1'
|
PowerShellVersion = '7.1'
|
||||||
|
|
||||||
# Name of the Windows PowerShell host required by this module
|
# Name of the Windows PowerShell host required by this module
|
||||||
# PowerShellHostName = ''
|
# PowerShellHostName = ''
|
||||||
@@ -48,7 +48,7 @@ PowerShellVersion = '6.1'
|
|||||||
# ProcessorArchitecture = ''
|
# ProcessorArchitecture = ''
|
||||||
|
|
||||||
# Modules that must be imported into the global environment prior to importing this module
|
# Modules that must be imported into the global environment prior to importing this module
|
||||||
# RequiredModules = @()
|
#RequiredModules = @()
|
||||||
|
|
||||||
# Assemblies that must be loaded prior to importing this module
|
# Assemblies that must be loaded prior to importing this module
|
||||||
# RequiredAssemblies = @()
|
# RequiredAssemblies = @()
|
||||||
@@ -63,7 +63,7 @@ PowerShellVersion = '6.1'
|
|||||||
# FormatsToProcess = @()
|
# FormatsToProcess = @()
|
||||||
|
|
||||||
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
|
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
|
||||||
# NestedModules = @()
|
NestedModules = @('Microsoft.PowerShell.DscSubsystem.dll')
|
||||||
|
|
||||||
# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
|
# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
|
||||||
FunctionsToExport = @(
|
FunctionsToExport = @(
|
||||||
@@ -71,6 +71,7 @@ FunctionsToExport = @(
|
|||||||
'New-DscChecksum'
|
'New-DscChecksum'
|
||||||
'Get-DscResource'
|
'Get-DscResource'
|
||||||
'Invoke-DscResource'
|
'Invoke-DscResource'
|
||||||
|
'ConvertTo-DscJsonSchema'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -100,11 +101,13 @@ HelpInfoURI = 'https://go.microsoft.com/fwlink/?linkid=2113535'
|
|||||||
|
|
||||||
PrivateData = @{
|
PrivateData = @{
|
||||||
PSData = @{
|
PSData = @{
|
||||||
Tags = @('PSDesiredStateConfiguration',
|
ExperimentalFeatures = @(
|
||||||
'Linux',
|
@{
|
||||||
'Mac',
|
Name = 'PSDesiredStateConfiguration.InvokeDscResource'
|
||||||
'Windows')
|
Description = "Enables the Invoke-DscResource cmdlet and related features."
|
||||||
ProjectUri = 'https://github.com/PowerShell/PSDesiredStateConfiguration'
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ data LocalizedData
|
|||||||
InvalidConfigurationName = Invalid Configuration Name '{0}' is specified. Standard names may only contain letters (a-z, A-Z), numbers (0-9), and underscore (_). The name may not be null or empty, and should start with a letter.
|
InvalidConfigurationName = Invalid Configuration Name '{0}' is specified. Standard names may only contain letters (a-z, A-Z), numbers (0-9), and underscore (_). The name may not be null or empty, and should start with a letter.
|
||||||
InvalidResourceSpecification = Found more than one resource named '{0}'. Please use the module specification to be more specific.
|
InvalidResourceSpecification = Found more than one resource named '{0}'. Please use the module specification to be more specific.
|
||||||
UnsupportedResourceImplementation = The resource '{0}' implemented as '{1}' is not supported by Invoke-DscResource.
|
UnsupportedResourceImplementation = The resource '{0}' implemented as '{1}' is not supported by Invoke-DscResource.
|
||||||
NoValidConfigFileFound = No valid config files (mof,zip) were found.
|
NoValidConfigFileFound = No valid config files (json,zip) were found.
|
||||||
InputFileNotExist=File {0} doesn't exist.
|
InputFileNotExist=File {0} doesn't exist.
|
||||||
FileReadError=Error Reading file {0}.
|
FileReadError=Error Reading file {0}.
|
||||||
MatchingFileNotFound=No matching file found.
|
MatchingFileNotFound=No matching file found.
|
||||||
@@ -71,12 +71,12 @@ data LocalizedData
|
|||||||
Set-StrictMode -Off
|
Set-StrictMode -Off
|
||||||
|
|
||||||
# In case localized resource is not available we revert back to English as defined in LocalizedData section so ignore the error instead of showing it to user.
|
# In case localized resource is not available we revert back to English as defined in LocalizedData section so ignore the error instead of showing it to user.
|
||||||
Import-LocalizedData -BindingVariable LocalizedData -FileName PSDesiredStateConfiguration.Resource.psd1 -ErrorAction Ignore
|
Import-LocalizedData -BindingVariable LocalizedData -FileName PSDesiredStateConfiguration.Resource.psd1 -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
Import-Module $PSScriptRoot/helpers/DscResourceInfo.psm1
|
Import-Module $PSScriptRoot/helpers/DscResourceInfo.psm1
|
||||||
|
|
||||||
# Set DSC HOME environment variable.
|
# Set DSC HOME environment variable.
|
||||||
$env:DSC_HOME = "$PSScriptRoot/Configuration"
|
$env:DSC_HOME = Join-Path $PSScriptRoot "Configuration"
|
||||||
|
|
||||||
$script:V1MetaConfigPropertyList = @('ConfigurationModeFrequencyMins', 'RebootNodeIfNeeded', 'ConfigurationMode', 'ActionAfterReboot', 'RefreshMode', 'CertificateID', 'ConfigurationID', 'DownloadManagerName', 'DownloadManagerCustomData', 'RefreshFrequencyMins', 'AllowModuleOverwrite', 'DebugMode', 'Credential')
|
$script:V1MetaConfigPropertyList = @('ConfigurationModeFrequencyMins', 'RebootNodeIfNeeded', 'ConfigurationMode', 'ActionAfterReboot', 'RefreshMode', 'CertificateID', 'ConfigurationID', 'DownloadManagerName', 'DownloadManagerCustomData', 'RefreshFrequencyMins', 'AllowModuleOverwrite', 'DebugMode', 'Credential')
|
||||||
$script:DirectAccessMetaConfigPropertyList = @('AllowModuleOverWrite', 'CertificateID', 'ConfigurationDownloadManagers', 'ResourceModuleManagers', 'DebugMode', 'RebootNodeIfNeeded', 'RefreshMode', 'ConfigurationAgent')
|
$script:DirectAccessMetaConfigPropertyList = @('AllowModuleOverWrite', 'CertificateID', 'ConfigurationDownloadManagers', 'ResourceModuleManagers', 'DebugMode', 'RebootNodeIfNeeded', 'RefreshMode', 'ConfigurationAgent')
|
||||||
@@ -307,7 +307,7 @@ function ConvertTo-MOFInstance
|
|||||||
elseif ($Value -is [PSCredential] )
|
elseif ($Value -is [PSCredential] )
|
||||||
{
|
{
|
||||||
# If the input object is a PSCredential, turn it into an MSFT_Credential with an encrypted password.
|
# If the input object is a PSCredential, turn it into an MSFT_Credential with an encrypted password.
|
||||||
$clearText = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::GetStringFromSecureString($Value.Password)
|
$clearText = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::GetStringFromSecureString($Value.Password)
|
||||||
$newValue = @{
|
$newValue = @{
|
||||||
UserName = $Value.UserName
|
UserName = $Value.UserName
|
||||||
Password = $clearText
|
Password = $clearText
|
||||||
@@ -509,7 +509,7 @@ function ConvertTo-MOFInstance
|
|||||||
$targetTypeName = $PropertyTypes[$p.Name].TypeConstraint
|
$targetTypeName = $PropertyTypes[$p.Name].TypeConstraint
|
||||||
|
|
||||||
# see if the target type is an array
|
# see if the target type is an array
|
||||||
$asArray = $p.Name -eq 'DependsOn' -or $targetTypeName -match 'Array' -or ((-not [string]::IsNullOrEmpty($targetTypeName)) -and $targetTypeName.EndsWith('[]'))
|
$asArray = $p.Name -eq 'DependsOn' -or $targetTypeName -match 'Array'
|
||||||
|
|
||||||
# Convert the CIM typename to the appropriate .NET type to use
|
# Convert the CIM typename to the appropriate .NET type to use
|
||||||
# to convert the input object into an appropriately encoded string
|
# to convert the input object into an appropriately encoded string
|
||||||
@@ -671,7 +671,10 @@ function ConvertTo-MOFInstance
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$p.Name + ' = ' + (stringify -value $p.Value -asArray $asArray -targetType $targetType ) + ";`n"
|
if ($targetTypeName -notmatch 'Array' -or $p.Value.Count)
|
||||||
|
{
|
||||||
|
$p.Name + ' = ' + (stringify -value $p.Value -asArray $asArray -targetType $targetType ) + ";`n"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1790,59 +1793,6 @@ function ValidateUpdate-ConfigurationData
|
|||||||
return $true
|
return $true
|
||||||
}
|
}
|
||||||
|
|
||||||
##############################################################
|
|
||||||
#
|
|
||||||
# Checks to see if a module defining composite resources should be reloaded
|
|
||||||
# based the last write time of the schema file. Returns true if the file exists
|
|
||||||
# and the last modified time was either not recorded or has change.
|
|
||||||
#
|
|
||||||
function Test-ModuleReloadRequired
|
|
||||||
{
|
|
||||||
[OutputType([bool])]
|
|
||||||
param (
|
|
||||||
[Parameter(Mandatory)]
|
|
||||||
[string]
|
|
||||||
$SchemaFilePath
|
|
||||||
)
|
|
||||||
|
|
||||||
if (-not $SchemaFilePath -or $SchemaFilePath -notmatch '\.schema\.psm1$')
|
|
||||||
{
|
|
||||||
# not a composite res
|
|
||||||
return $false
|
|
||||||
}
|
|
||||||
|
|
||||||
# If the path doesn't exist, then we can't reload it.
|
|
||||||
# Note: this condition is explicitly not an error for this function.
|
|
||||||
if ( -not (Test-Path $SchemaFilePath))
|
|
||||||
{
|
|
||||||
if ($schemaFileLastUpdate.ContainsKey($SchemaFilePath))
|
|
||||||
{
|
|
||||||
$schemaFileLastUpdate.Remove($SchemaFilePath)
|
|
||||||
}
|
|
||||||
return $false
|
|
||||||
}
|
|
||||||
|
|
||||||
# If we have a modified date, then return it.
|
|
||||||
if ($schemaFileLastUpdate.ContainsKey($SchemaFilePath))
|
|
||||||
{
|
|
||||||
if ( (Get-Item $SchemaFilePath).LastWriteTime -eq $schemaFileLastUpdate[$SchemaFilePath] )
|
|
||||||
{
|
|
||||||
return $false
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return $true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Otherwise, record the last write time and return true.
|
|
||||||
$script:schemaFileLastUpdate[$SchemaFilePath] = (Get-Item $SchemaFilePath).LastWriteTime
|
|
||||||
$true
|
|
||||||
}
|
|
||||||
# Holds the schema file to lastwritetime mapping.
|
|
||||||
[System.Collections.Generic.Dictionary[string,DateTime]] $script:schemaFileLastUpdate =
|
|
||||||
New-Object -TypeName 'System.Collections.Generic.Dictionary[string,datetime]'
|
|
||||||
|
|
||||||
###########################################################
|
###########################################################
|
||||||
# Configuration keyword implementation
|
# Configuration keyword implementation
|
||||||
###########################################################
|
###########################################################
|
||||||
@@ -1968,7 +1918,7 @@ function Configuration
|
|||||||
|
|
||||||
# Load the default CIM keyword/function definitions set, populating the function collection
|
# Load the default CIM keyword/function definitions set, populating the function collection
|
||||||
# with the default functions.
|
# with the default functions.
|
||||||
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::LoadDefaultCimKeywords($functionsToDefine)
|
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::LoadDefaultCimKeywords($functionsToDefine)
|
||||||
|
|
||||||
# Set up the rest of the configuration runtime state.
|
# Set up the rest of the configuration runtime state.
|
||||||
Initialize-ConfigurationRuntimeState $Name
|
Initialize-ConfigurationRuntimeState $Name
|
||||||
@@ -2059,25 +2009,8 @@ function Configuration
|
|||||||
foreach ($mod in $modulesInfo) {
|
foreach ($mod in $modulesInfo) {
|
||||||
|
|
||||||
$null = ImportClassResourcesFromModule -Module $mod -Resources $res -functionsToDefine $functionsToDefine
|
$null = ImportClassResourcesFromModule -Module $mod -Resources $res -functionsToDefine $functionsToDefine
|
||||||
$dscResourcesPath = Join-Path -Path $mod.ModuleBase -ChildPath 'DscResources'
|
|
||||||
if(Test-Path $dscResourcesPath)
|
if ($moduleInfos.Count -eq 1)
|
||||||
{
|
|
||||||
foreach($requiredResource in $res)
|
|
||||||
{
|
|
||||||
if ($requiredResource.Contains('*')) {
|
|
||||||
# we historically resolve wildcards by Get-Item File System rules.
|
|
||||||
# We don't support wildcards resolutions for Friendly names.
|
|
||||||
foreach ($resource in Get-ChildItem -Path $dscResourcesPath -Directory -Name -Filter $requiredResource)
|
|
||||||
{
|
|
||||||
$null = ImportCimAndScriptKeywordsFromModule -Module $mod -Resource $resource -functionsToDefine $functionsToDefine
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
# ImportCimAndScriptKeywordsFromModule takes care about resolving $requiredResources names to ClassNames or FriendlyNames.
|
|
||||||
$null = ImportCimAndScriptKeywordsFromModule -Module $mod -Resource $requiredResource -functionsToDefine $functionsToDefine
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
elseif ($moduleInfos.Count -eq 1)
|
|
||||||
{
|
{
|
||||||
$modules.Add($moduleInfos)
|
$modules.Add($moduleInfos)
|
||||||
}
|
}
|
||||||
@@ -2313,7 +2246,7 @@ function Configuration
|
|||||||
{
|
{
|
||||||
Write-Debug -Message " CONFIGURATION $Name : DOING TOP-LEVEL CLEAN UP"
|
Write-Debug -Message " CONFIGURATION $Name : DOING TOP-LEVEL CLEAN UP"
|
||||||
[System.Management.Automation.Language.DynamicKeyword]::Reset()
|
[System.Management.Automation.Language.DynamicKeyword]::Reset()
|
||||||
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::ClearCache()
|
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::ClearCache()
|
||||||
|
|
||||||
Initialize-ConfigurationRuntimeState
|
Initialize-ConfigurationRuntimeState
|
||||||
}
|
}
|
||||||
@@ -2490,66 +2423,16 @@ function ImportClassResourcesFromModule
|
|||||||
$functionsToDefine
|
$functionsToDefine
|
||||||
)
|
)
|
||||||
|
|
||||||
$resourcesFound = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::ImportClassResourcesFromModule($Module, $Resources, $functionsToDefine)
|
$Errors = New-Object -TypeName 'System.Collections.ObjectModel.Collection[System.Exception]'
|
||||||
return ,$resourcesFound
|
|
||||||
}
|
|
||||||
|
|
||||||
function ImportCimAndScriptKeywordsFromModule
|
$resourcesFound = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::ImportClassResourcesFromModule($Module, $Resources, $functionsToDefine, $Errors)
|
||||||
{
|
|
||||||
param (
|
|
||||||
[Parameter(Mandatory)]
|
|
||||||
$Module,
|
|
||||||
|
|
||||||
[Parameter(Mandatory)]
|
foreach($ex in $Errors)
|
||||||
$resource,
|
|
||||||
|
|
||||||
$functionsToDefine
|
|
||||||
)
|
|
||||||
|
|
||||||
trap
|
|
||||||
{
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
$SchemaFilePath = $null
|
|
||||||
$oldCount = $functionsToDefine.Count
|
|
||||||
|
|
||||||
$keywordErrors = New-Object -TypeName 'System.Collections.ObjectModel.Collection[System.Exception]'
|
|
||||||
|
|
||||||
$foundCimSchema = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::ImportCimKeywordsFromModule(
|
|
||||||
$Module, $resource, [ref] $SchemaFilePath, $functionsToDefine, $keywordErrors)
|
|
||||||
|
|
||||||
foreach($ex in $keywordErrors)
|
|
||||||
{
|
{
|
||||||
Write-Error -Exception $ex
|
Write-Error -Exception $ex
|
||||||
if($ex.InnerException)
|
|
||||||
{
|
|
||||||
Write-Error -Exception $ex.InnerException
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$functionsAdded = $functionsToDefine.Count - $oldCount
|
return ,$resourcesFound
|
||||||
Write-Debug -Message " $Name : PROCESSING RESOURCE FILE: Added $functionsAdded type handler functions from '$SchemaFilePath'"
|
|
||||||
|
|
||||||
$SchemaFilePath = $null
|
|
||||||
$oldCount = $functionsToDefine.Count
|
|
||||||
|
|
||||||
$foundScriptSchema = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::ImportScriptKeywordsFromModule(
|
|
||||||
$Module, $resource, [ref] $SchemaFilePath, $functionsToDefine )
|
|
||||||
|
|
||||||
$functionsAdded = $functionsToDefine.Count - $oldCount
|
|
||||||
Write-Debug -Message " $Name : PROCESSING RESOURCE FILE: Added $functionsAdded type handler functions from '$SchemaFilePath'"
|
|
||||||
|
|
||||||
if ($foundScriptSchema -and $SchemaFilePath)
|
|
||||||
{
|
|
||||||
$resourceDirectory = Split-Path $SchemaFilePath
|
|
||||||
if($null -ne $resourceDirectory)
|
|
||||||
{
|
|
||||||
Import-Module -Force: (Test-ModuleReloadRequired $SchemaFilePath) -Verbose:$false -Name $resourceDirectory -Global -ErrorAction SilentlyContinue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $foundCimSchema -or $foundScriptSchema
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -2943,16 +2826,6 @@ function Write-NodeMOFFile
|
|||||||
# Fix up newlines to be CRLF
|
# Fix up newlines to be CRLF
|
||||||
$nodeDoc = $nodeDoc -replace "`n", "`r`n"
|
$nodeDoc = $nodeDoc -replace "`n", "`r`n"
|
||||||
|
|
||||||
$errMsg = Test-MofInstanceText $nodeDoc
|
|
||||||
if($errMsg)
|
|
||||||
{
|
|
||||||
$errorMessage = $LocalizedData.InvalidMOFDefinition -f @($mofNode, $errMsg)
|
|
||||||
$exception = New-Object -TypeName System.InvalidOperationException -ArgumentList $errorMessage
|
|
||||||
Write-Error -Exception $exception -Message $errorMessage -Category InvalidOperation -ErrorId InvalidMOFDefinition
|
|
||||||
Update-ConfigurationErrorCount
|
|
||||||
$nodeOutfile = "$ConfigurationOutputDirectory/$($mofNode).mof.error"
|
|
||||||
}
|
|
||||||
|
|
||||||
if($nodeDocCount -gt 0)
|
if($nodeDocCount -gt 0)
|
||||||
{
|
{
|
||||||
# Write to a file only if no error was generated or we are writing to .mof.error file
|
# Write to a file only if no error was generated or we are writing to .mof.error file
|
||||||
@@ -3409,7 +3282,7 @@ function Test-MofInstanceText
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::ValidateInstanceText($instanceText)
|
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::ValidateInstanceText($instanceText)
|
||||||
}
|
}
|
||||||
catch [System.Management.Automation.MethodInvocationException]
|
catch [System.Management.Automation.MethodInvocationException]
|
||||||
{
|
{
|
||||||
@@ -3652,7 +3525,7 @@ function New-DscChecksum
|
|||||||
# Retrieve all valid configuration files at the specified $Path
|
# Retrieve all valid configuration files at the specified $Path
|
||||||
$allConfigFiles = $Path | ForEach-Object -Process {
|
$allConfigFiles = $Path | ForEach-Object -Process {
|
||||||
(Get-ChildItem -Path $_ -Recurse | Where-Object -FilterScript {
|
(Get-ChildItem -Path $_ -Recurse | Where-Object -FilterScript {
|
||||||
$_.Extension -eq '.mof' -or $_.Extension -eq '.zip'
|
$_.Extension -eq '.json' -or $_.Extension -eq '.zip'
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -3661,7 +3534,6 @@ function New-DscChecksum
|
|||||||
if ($allConfigFiles.Length -eq 0)
|
if ($allConfigFiles.Length -eq 0)
|
||||||
{
|
{
|
||||||
Write-Log -Message $LocalizedData.NoValidConfigFileFound
|
Write-Log -Message $LocalizedData.NoValidConfigFileFound
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3676,7 +3548,7 @@ function New-DscChecksum
|
|||||||
}
|
}
|
||||||
|
|
||||||
# If the Force parameter was not specified and the hash file already exists for the current file, log this, and skip this file
|
# If the Force parameter was not specified and the hash file already exists for the current file, log this, and skip this file
|
||||||
if (!$Force -and (Get-Item -Path $fileOutpath -ErrorAction Ignore))
|
if (!$Force -and (Get-Item -Path $fileOutpath -ErrorAction SilentlyContinue))
|
||||||
{
|
{
|
||||||
Write-Log -Message ($LocalizedData.CheckSumFileExists -f $fileOutpath)
|
Write-Log -Message ($LocalizedData.CheckSumFileExists -f $fileOutpath)
|
||||||
continue
|
continue
|
||||||
@@ -3847,22 +3719,12 @@ function Get-DSCResourceModules
|
|||||||
foreach($moduleFolder in Get-ChildItem $folder -Directory)
|
foreach($moduleFolder in Get-ChildItem $folder -Directory)
|
||||||
{
|
{
|
||||||
$addModule = $false
|
$addModule = $false
|
||||||
|
foreach($psd1 in Get-ChildItem -Recurse -Filter "$($moduleFolder.Name).psd1" -Path $moduleFolder.fullname -Depth 2)
|
||||||
$dscFolders = Get-childitem "$($moduleFolder.FullName)\DscResources","$($moduleFolder.FullName)\*\DscResources" -ErrorAction Ignore
|
|
||||||
if($null -ne $dscFolders)
|
|
||||||
{
|
{
|
||||||
$addModule = $true
|
$containsDSCResource = select-string -LiteralPath $psd1 -pattern '^[^#]*\bDscResourcesToExport\b.*'
|
||||||
}
|
if($null -ne $containsDSCResource)
|
||||||
|
|
||||||
if(-not $addModule)
|
|
||||||
{
|
|
||||||
foreach($psd1 in Get-ChildItem -Recurse -Filter "$($moduleFolder.Name).psd1" -Path $moduleFolder.fullname -Depth 2)
|
|
||||||
{
|
{
|
||||||
$containsDSCResource = select-string -LiteralPath $psd1 -pattern '^[^#]*\bDscResourcesToExport\b.*'
|
$addModule = $true
|
||||||
if($null -ne $containsDSCResource)
|
|
||||||
{
|
|
||||||
$addModule = $true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3876,14 +3738,167 @@ function Get-DSCResourceModules
|
|||||||
$dscModuleFolderList
|
$dscModuleFolderList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function CimPropertyIsInherited
|
||||||
|
{
|
||||||
|
param(
|
||||||
|
[parameter(Mandatory)]
|
||||||
|
[string]
|
||||||
|
$PropertyName,
|
||||||
|
|
||||||
|
[parameter(Mandatory)]
|
||||||
|
[AllowNull()]
|
||||||
|
[System.Object]
|
||||||
|
$ParentClass)
|
||||||
|
|
||||||
|
if (-not ($ParentClass))
|
||||||
|
{
|
||||||
|
return $false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach($property in $ParentClass.CimClassProperties)
|
||||||
|
{
|
||||||
|
if ($property.Name -eq $PropertyName)
|
||||||
|
{
|
||||||
|
return $true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return CimPropertyIsInherited -PropertyName $PropertyName -ParentClass $ParentClass.CimSuperClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function PrepareCimClassesForJsonConvertion
|
||||||
|
{
|
||||||
|
param(
|
||||||
|
[parameter(Mandatory)]
|
||||||
|
$classList)
|
||||||
|
|
||||||
|
$resultList = New-Object -TypeName 'System.Collections.Generic.List[PSObject]'
|
||||||
|
|
||||||
|
foreach($class in $classList)
|
||||||
|
{
|
||||||
|
Write-Verbose "Preprocessing class $($class.CimSystemProperties.ClassName)"
|
||||||
|
$properties = New-Object -TypeName 'System.Collections.Generic.List[System.Object]'
|
||||||
|
|
||||||
|
# remove inherited properties
|
||||||
|
foreach($property in $class.CimClassProperties)
|
||||||
|
{
|
||||||
|
if (-not (CimPropertyIsInherited -PropertyName $property.Name -ParentClass $class.CimSuperClass))
|
||||||
|
{
|
||||||
|
Write-Verbose "Adding property $($property.Name)"
|
||||||
|
|
||||||
|
$qualifiers = New-Object -TypeName 'System.Collections.Generic.Dictionary[System.String,System.Object]'
|
||||||
|
foreach($qualifier in $property.Qualifiers)
|
||||||
|
{
|
||||||
|
$qualifiers.Add($qualifier.Name, $qualifier.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($qualifiers.Count -eq 0) { $qualifiers = $null}
|
||||||
|
|
||||||
|
$flags = $property.Flags
|
||||||
|
$flags = $flags -band -bnot [Microsoft.Management.Infrastructure.CimFlags]::Property # this is set for all properties
|
||||||
|
$flags = $flags -band -bnot [Microsoft.Management.Infrastructure.CimFlags]::NullValue # this is set for all properties
|
||||||
|
$flags = $flags -band -bnot [Microsoft.Management.Infrastructure.CimFlags]::Required # this is also specified in Qualifiers
|
||||||
|
$flags = $flags -band -bnot [Microsoft.Management.Infrastructure.CimFlags]::Key # this is also specified in Qualifiers
|
||||||
|
$flags = $flags -band -bnot [Microsoft.Management.Infrastructure.CimFlags]::ReadOnly # this is also specified in Qualifiers
|
||||||
|
if ($flags -eq 0) { $flags = $null}
|
||||||
|
|
||||||
|
$p = [pscustomobject]@{
|
||||||
|
Name = $property.Name
|
||||||
|
Value = $property.Value
|
||||||
|
CimType = $property.CimType
|
||||||
|
Flags = $flags
|
||||||
|
ReferenceClassName = $property.ReferenceClassName
|
||||||
|
Qualifiers = $qualifiers
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove properties that have null value
|
||||||
|
$p.PSobject.Properties | % {if ($_.Value -eq $null) {$p.PSobject.Properties.Remove($_.Name)}}
|
||||||
|
|
||||||
|
$properties.Add($p);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Write-Verbose "Property $($property.Name) is inherited, ignoring it"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($properties.Count -eq 0) { $properties = $null}
|
||||||
|
|
||||||
|
# construct the processed class
|
||||||
|
$processedClass = [pscustomobject]@{
|
||||||
|
ClassName = $class.CimSystemProperties.ClassName
|
||||||
|
FriendlyName = ($class.CimClassQualifiers | Where-Object {$_.Name -eq "FriendlyName"}).Value
|
||||||
|
ClassVersion = ($class.CimClassQualifiers | Where-Object {$_.Name -eq "ClassVersion"}).Value
|
||||||
|
Description = ($class.CimClassQualifiers | Where-Object {$_.Name -eq "Description"}).Value
|
||||||
|
SuperClassName = $class.CimSuperClassName
|
||||||
|
ClassProperties = $properties
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove properties that have null value
|
||||||
|
$processedClass.PSobject.Properties | % {if ($_.Value -eq $null) {$processedClass.PSobject.Properties.Remove($_.Name)}}
|
||||||
|
|
||||||
|
$resultList.Add($processedClass)
|
||||||
|
}
|
||||||
|
|
||||||
|
return $resultList
|
||||||
|
}
|
||||||
|
|
||||||
|
###########################################################
|
||||||
|
# ConvertTo-DscJsonSchema
|
||||||
|
###########################################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# Reads CIM MOF schema files and creates json files with equivalent json schema
|
||||||
|
#
|
||||||
|
function ConvertTo-DscJsonSchema
|
||||||
|
{
|
||||||
|
param (
|
||||||
|
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[Alias("Path")]
|
||||||
|
[string[]]
|
||||||
|
$Directory
|
||||||
|
)
|
||||||
|
|
||||||
|
Process
|
||||||
|
{
|
||||||
|
foreach($dir in $Directory)
|
||||||
|
{
|
||||||
|
Write-Verbose "Processing $dir"
|
||||||
|
if (-not (Test-Path -Path $dir))
|
||||||
|
{
|
||||||
|
Write-Error "Can not find directory $dir" # non-terminating error
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::Initialize()
|
||||||
|
$schemaFilePaths = Get-ChildItem -Recurse -File -Path $dir -Filter '*.schema.mof'
|
||||||
|
|
||||||
|
foreach($mofPath in $schemaFilePaths)
|
||||||
|
{
|
||||||
|
$cimClasses = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::ReadCimSchemaMof($mofPath)
|
||||||
|
Write-Verbose "Read $($cimClasses.Count) classes from $mofPath"
|
||||||
|
$preprocessedCimClasses = PrepareCimClassesForJsonConvertion $cimClasses
|
||||||
|
|
||||||
|
[string] $jsonPath = $mofPath.FullName.Substring(0, $mofPath.FullName.LastIndexOf('.')) + ".json";
|
||||||
|
Write-Verbose "Writing $jsonPath"
|
||||||
|
ConvertTo-Json -InputObject $preprocessedCimClasses -Depth 100 -EnumsAsStrings | Out-File -Force -Path $jsonPath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
###########################################################
|
###########################################################
|
||||||
# Get-DSCResource
|
# Get-DSCResource
|
||||||
###########################################################
|
###########################################################
|
||||||
|
|
||||||
#
|
#
|
||||||
# Gets DSC resources on the machine. Allows to filter on a particular resource.
|
# Gets DSC resources on the machine. Allows to filter on a particular resource.
|
||||||
# It parses all the resources defined in the schema.mof file and also the composite
|
# It parses class-based resources defined in the psm1 module files.
|
||||||
# resources defined or imported from PowerShell modules
|
|
||||||
#
|
#
|
||||||
function Get-DscResource
|
function Get-DscResource
|
||||||
{
|
{
|
||||||
@@ -3916,7 +3931,7 @@ function Get-DscResource
|
|||||||
$keywordErrors = New-Object -TypeName 'System.Collections.ObjectModel.Collection[System.Exception]'
|
$keywordErrors = New-Object -TypeName 'System.Collections.ObjectModel.Collection[System.Exception]'
|
||||||
|
|
||||||
# Load the default Inbox providers (keyword) in cache, also allow caching the resources from multiple versions of modules.
|
# Load the default Inbox providers (keyword) in cache, also allow caching the resources from multiple versions of modules.
|
||||||
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::LoadDefaultCimKeywords($keywordErrors, $true)
|
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::LoadDefaultCimKeywords($keywordErrors, $true)
|
||||||
|
|
||||||
foreach($ex in $keywordErrors)
|
foreach($ex in $keywordErrors)
|
||||||
{
|
{
|
||||||
@@ -3963,15 +3978,6 @@ function Get-DscResource
|
|||||||
{
|
{
|
||||||
$null = ImportClassResourcesFromModule -Module $mod -Resources * -functionsToDefine $functionsToDefine
|
$null = ImportClassResourcesFromModule -Module $mod -Resources * -functionsToDefine $functionsToDefine
|
||||||
}
|
}
|
||||||
|
|
||||||
$dscResources = Join-Path -Path $mod.ModuleBase -ChildPath 'DscResources'
|
|
||||||
if(Test-Path $dscResources)
|
|
||||||
{
|
|
||||||
foreach ($resource in Get-ChildItem -Path $dscResources -Directory -Name)
|
|
||||||
{
|
|
||||||
$null = ImportCimAndScriptKeywordsFromModule -Module $mod -Resource $resource -functionsToDefine $functionsToDefine
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$Resources = @()
|
$Resources = @()
|
||||||
@@ -4001,7 +4007,7 @@ function Get-DscResource
|
|||||||
Write-Progress -Id 3 -Activity $LocalizedData.CreatingResourceList
|
Write-Progress -Id 3 -Activity $LocalizedData.CreatingResourceList
|
||||||
|
|
||||||
# Get resources for CIM cache
|
# Get resources for CIM cache
|
||||||
$keywords = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::GetCachedKeywords() | Where-Object -FilterScript {
|
$keywords = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::GetKeywordsFromCachedClasses() | Where-Object -FilterScript {
|
||||||
(!$_.IsReservedKeyword) -and ($null -ne $_.ResourceName) -and !(IsHiddenResource $_.ResourceName) -and (![bool]$Module -or ($_.ImplementingModule -like $ModuleString))
|
(!$_.IsReservedKeyword) -and ($null -ne $_.ResourceName) -and !(IsHiddenResource $_.ResourceName) -and (![bool]$Module -or ($_.ImplementingModule -like $ModuleString))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4015,16 +4021,6 @@ function Get-DscResource
|
|||||||
$_ -ne $null
|
$_ -ne $null
|
||||||
}
|
}
|
||||||
|
|
||||||
# Get composite resources
|
|
||||||
$Resources += Get-Command -CommandType Configuration |
|
|
||||||
ForEach-Object -Process {
|
|
||||||
GetCompositeResource $patterns $_ $ignoreResourceParameters -modules $modules
|
|
||||||
} |
|
|
||||||
Where-Object -FilterScript {
|
|
||||||
$_ -ne $null -and (![bool]$ModuleString -or ($_.Module -like $ModuleString)) -and
|
|
||||||
($_.Path -and ((Split-Path -Leaf $_.Path) -eq "$($_.Name).schema.psm1"))
|
|
||||||
}
|
|
||||||
|
|
||||||
# check whether all resources are found
|
# check whether all resources are found
|
||||||
CheckResourceFound $Name $Resources
|
CheckResourceFound $Name $Resources
|
||||||
}
|
}
|
||||||
@@ -4033,7 +4029,7 @@ function Get-DscResource
|
|||||||
if ($initialized)
|
if ($initialized)
|
||||||
{
|
{
|
||||||
[System.Management.Automation.Language.DynamicKeyword]::Reset()
|
[System.Management.Automation.Language.DynamicKeyword]::Reset()
|
||||||
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::ClearCache()
|
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::ClearCache()
|
||||||
|
|
||||||
$initialized = $false
|
$initialized = $false
|
||||||
}
|
}
|
||||||
@@ -4044,7 +4040,7 @@ function Get-DscResource
|
|||||||
|
|
||||||
End
|
End
|
||||||
{
|
{
|
||||||
$Resources = $Resources | Sort-Object -Property Module, Name -Unique
|
$Resources = $Resources | Sort-Object -Property Module, Name
|
||||||
foreach ($resource in $Resources)
|
foreach ($resource in $Resources)
|
||||||
{
|
{
|
||||||
# return formatted string if required
|
# return formatted string if required
|
||||||
@@ -4061,7 +4057,7 @@ function Get-DscResource
|
|||||||
if ($initialized)
|
if ($initialized)
|
||||||
{
|
{
|
||||||
[System.Management.Automation.Language.DynamicKeyword]::Reset()
|
[System.Management.Automation.Language.DynamicKeyword]::Reset()
|
||||||
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::ClearCache()
|
[Microsoft.PowerShell.DesiredStateConfiguration.Internal.CrossPlatform.DscClassCache]::ClearCache()
|
||||||
|
|
||||||
$initialized = $false
|
$initialized = $false
|
||||||
}
|
}
|
||||||
@@ -4114,69 +4110,23 @@ function GetResourceFromKeyword
|
|||||||
|
|
||||||
$resource.Name = $keyword.Keyword
|
$resource.Name = $keyword.Keyword
|
||||||
|
|
||||||
$schemaFiles = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::GetFileDefiningClass($keyword.ResourceName)
|
# only supporting class-based resources at this time
|
||||||
|
$implementationDetail = 'ClassBased'
|
||||||
|
$Module = $modules | Where-Object -FilterScript {
|
||||||
|
$_.Name -eq $keyword.ImplementingModule -and
|
||||||
|
$_.Version -eq $keyword.ImplementingModuleVersion
|
||||||
|
} | Select-Object -First 1
|
||||||
|
|
||||||
if ($schemaFiles.Count)
|
if ($Module -and $Module.ExportedDscResources -contains $keyword.Keyword)
|
||||||
{
|
{
|
||||||
# Find the correct schema file that matches module name and version
|
$resource.Module = $Module
|
||||||
# if same module/version is installed in multiple locations, then pick the first schema file.
|
$resource.Path = $Module.Path
|
||||||
foreach ($schemaFileName in $schemaFiles){
|
$resource.ParentPath = Split-Path -Path $Module.Path
|
||||||
$moduleInfo = GetModule $modules $schemaFileName;
|
|
||||||
if ($moduleInfo.Name -eq $keyword.ImplementingModule -and $moduleInfo.Version -eq $keyword.ImplementingModuleVersion){
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# if the class is not a resource we will ignore it except if it is DSC inbox resource.
|
|
||||||
if(-not $schemaFileName.StartsWith("$env:windir\system32\configuration",[stringComparison]::OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
$classesFromSchema = [Microsoft.PowerShell.DesiredStateConfiguration.Internal.DscClassCache]::GetCachedClassByFileName($schemaFileName)
|
|
||||||
if($null -ne $classesFromSchema)
|
|
||||||
{
|
|
||||||
# check if the resource is proper DSC resource that always derives from OMI_BaseResource.
|
|
||||||
$schemaToProcess = $classesFromSchema | ForEach-Object -Process {
|
|
||||||
if(($_.CimSystemProperties.ClassName -ieq $keyword.ResourceName) -and ($_.CimSuperClassName -ieq 'OMI_BaseResource'))
|
|
||||||
{
|
|
||||||
$member = Get-Member -InputObject $_ -MemberType NoteProperty -Name 'ImplementationDetail'
|
|
||||||
if ($null -eq $member)
|
|
||||||
{
|
|
||||||
$_ | Add-Member -MemberType NoteProperty -Name 'ImplementationDetail' -Value $implementationDetail -PassThru
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$_
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if($null -eq $schemaToProcess)
|
|
||||||
{
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$message = $LocalizedData.SchemaFileForResource -f @($schemaFileName)
|
|
||||||
Write-Verbose -Message $message
|
|
||||||
|
|
||||||
$resource.Module = $moduleInfo
|
|
||||||
$resource.Path = GetImplementingModulePath $schemaFileName
|
|
||||||
$resource.ParentPath = Split-Path $schemaFileName
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$implementationDetail = 'ClassBased'
|
# a class-based keyword must be in the ExportedDscResources of the module that implements it
|
||||||
$Module = $modules | Where-Object -FilterScript {
|
return $null
|
||||||
$_.Name -eq $keyword.ImplementingModule -and
|
|
||||||
$_.Version -eq $keyword.ImplementingModuleVersion
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($Module -and $Module.ExportedDscResources -contains $keyword.Keyword)
|
|
||||||
{
|
|
||||||
$implementationDetail = 'ClassBased'
|
|
||||||
$resource.Module = $Module
|
|
||||||
$resource.Path = $Module.Path
|
|
||||||
$resource.ParentPath = Split-Path -Path $Module.Path
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([system.string]::IsNullOrEmpty($resource.Path) -eq $false)
|
if ([system.string]::IsNullOrEmpty($resource.Path) -eq $false)
|
||||||
@@ -4208,8 +4158,10 @@ function GetResourceFromKeyword
|
|||||||
Ascending = $true
|
Ascending = $true
|
||||||
}
|
}
|
||||||
$resource.UpdateProperties($updatedProperties)
|
$resource.UpdateProperties($updatedProperties)
|
||||||
|
if ([ExperimentalFeature]::IsEnabled("PSDesiredStateConfiguration.InvokeDscResource"))
|
||||||
$resource | Add-Member -MemberType NoteProperty -Name 'ImplementationDetail' -Value $implementationDetail
|
{
|
||||||
|
$resource | Add-Member -MemberType NoteProperty -Name 'ImplementationDetail' -Value $implementationDetail
|
||||||
|
}
|
||||||
|
|
||||||
return $resource
|
return $resource
|
||||||
}
|
}
|
||||||
@@ -4327,7 +4279,6 @@ function AddDscResourceProperty
|
|||||||
$dscProperty.Values.Add($_)
|
$dscProperty.Values.Add($_)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$dscProperty.PropertyType = $Type
|
$dscProperty.PropertyType = $Type
|
||||||
$dscProperty.IsMandatory = $property.Mandatory
|
$dscProperty.IsMandatory = $property.Mandatory
|
||||||
|
|
||||||
@@ -4447,13 +4398,13 @@ function GetImplementingModulePath
|
|||||||
$schemaFileName
|
$schemaFileName
|
||||||
)
|
)
|
||||||
|
|
||||||
$moduleFileName = ($schemaFileName -replace ".schema.mof$", '') + '.psd1'
|
$moduleFileName = ($schemaFileName -replace ".schema.json$", '') + '.psd1'
|
||||||
if (Test-Path $moduleFileName)
|
if (Test-Path $moduleFileName)
|
||||||
{
|
{
|
||||||
return $moduleFileName
|
return $moduleFileName
|
||||||
}
|
}
|
||||||
|
|
||||||
$moduleFileName = ($schemaFileName -replace ".schema.mof$", '') + '.psm1'
|
$moduleFileName = ($schemaFileName -replace ".schema.json$", '') + '.psm1'
|
||||||
if (Test-Path $moduleFileName)
|
if (Test-Path $moduleFileName)
|
||||||
{
|
{
|
||||||
return $moduleFileName
|
return $moduleFileName
|
||||||
@@ -4483,9 +4434,9 @@ function GetModule
|
|||||||
}
|
}
|
||||||
|
|
||||||
$schemaFileExt = $null
|
$schemaFileExt = $null
|
||||||
if ($schemaFileName -match '.schema.mof')
|
if ($schemaFileName -match '.schema.json')
|
||||||
{
|
{
|
||||||
$schemaFileExt = ".schema.mof$"
|
$schemaFileExt = ".schema.json$"
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($schemaFileName -match '.schema.psm1')
|
if ($schemaFileName -match '.schema.psm1')
|
||||||
@@ -4643,6 +4594,7 @@ Export-ModuleMember -Function Get-DscResource, Configuration
|
|||||||
|
|
||||||
function Invoke-DscResource
|
function Invoke-DscResource
|
||||||
{
|
{
|
||||||
|
[Experimental("PSDesiredStateConfiguration.InvokeDscResource", "Show")]
|
||||||
[CmdletBinding(HelpUri = '')]
|
[CmdletBinding(HelpUri = '')]
|
||||||
param (
|
param (
|
||||||
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Mandatory)]
|
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Mandatory)]
|
||||||
@@ -4744,29 +4696,29 @@ function Invoke-DscClassBasedResource
|
|||||||
|
|
||||||
Write-Debug "Importing $path ..."
|
Write-Debug "Importing $path ..."
|
||||||
$iss = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault2()
|
$iss = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault2()
|
||||||
|
# next line prevents PSModulePath from being reset to default
|
||||||
|
$iss.EnvironmentVariables.Add([System.Management.Automation.Runspaces.SessionStateVariableEntry]::new("PSModulePath", $env:PSModulePath, $null))
|
||||||
$powershell = [PowerShell]::Create($iss)
|
$powershell = [PowerShell]::Create($iss)
|
||||||
$script = @"
|
$script = @"
|
||||||
using module "$path"
|
using module $path
|
||||||
|
return [$type]
|
||||||
Write-Host -Message ([$type]::new | out-string)
|
|
||||||
return [$type]::new()
|
|
||||||
"@
|
"@
|
||||||
|
|
||||||
|
$null = $powershell.AddScript($script)
|
||||||
$null= $powershell.AddScript($script)
|
$dscType = $powershell.Invoke() | Select-object -First 1
|
||||||
$dscType=$powershell.Invoke() | Select-object -First 1
|
Write-Debug "Imported Type: $($dscType | Out-String)"
|
||||||
|
$dscObj = $dscType::new()
|
||||||
foreach($key in $Property.Keys)
|
foreach($key in $Property.Keys)
|
||||||
{
|
{
|
||||||
$value = $Property.$key
|
$value = $Property.$key
|
||||||
Write-Debug "Setting $key to $value"
|
Write-Debug "Setting $key to $value"
|
||||||
$dscType.$key = $value
|
$dscObj.$key = $value
|
||||||
}
|
}
|
||||||
$info = $dscType | Out-String
|
Write-Debug "Object with filled keys: $($dscObj | Out-String)"
|
||||||
Write-Debug $info
|
|
||||||
|
|
||||||
Write-Debug "calling $type.$Method() ..."
|
Write-Debug "Calling $type.$Method() ..."
|
||||||
$global:DSCMachineStatus = $null
|
$global:DSCMachineStatus = $null
|
||||||
$output = $dscType.$Method()
|
$output = $dscObj.$Method()
|
||||||
return Get-InvokeDscResourceResult -Output $output -Method $Method
|
return Get-InvokeDscResourceResult -Output $output -Method $Method
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4831,6 +4783,7 @@ function Get-InvokeDscResourceResult
|
|||||||
|
|
||||||
Export-ModuleMember -Function @(
|
Export-ModuleMember -Function @(
|
||||||
'Invoke-DscResource'
|
'Invoke-DscResource'
|
||||||
|
'ConvertTo-DscJsonSchema'
|
||||||
)
|
)
|
||||||
|
|
||||||
###########################################################
|
###########################################################
|
||||||
|
|||||||
@@ -1,24 +1,40 @@
|
|||||||
# Copyright (c) Microsoft Corporation. All rights reserved.
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
# Licensed under the MIT License.
|
# Licensed under the MIT License.
|
||||||
|
Function Install-ModuleIfMissing {
|
||||||
|
param(
|
||||||
|
[parameter(Mandatory)]
|
||||||
|
[String]
|
||||||
|
$Name,
|
||||||
|
[version]
|
||||||
|
$MinimumVersion,
|
||||||
|
[switch]
|
||||||
|
$SkipPublisherCheck,
|
||||||
|
[switch]
|
||||||
|
$Force
|
||||||
|
)
|
||||||
|
|
||||||
BeforeDiscovery {
|
$module = Get-Module -Name $Name -ListAvailable -ErrorAction Ignore | Sort-Object -Property Version -Descending | Select-Object -First 1
|
||||||
Function global:Test-IsInvokeDscResourceEnable {
|
|
||||||
return ($PSVersionTable.PSVersion.Major -ge 7)
|
if (!$module -or $module.Version -lt $MinimumVersion) {
|
||||||
|
Write-Verbose "Installing module '$Name' ..." -Verbose
|
||||||
|
Install-Module -Name $Name -Force -SkipPublisherCheck:$SkipPublisherCheck.IsPresent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Describe "Test PSDesiredStateConfiguration" {
|
Function Test-IsInvokeDscResourceEnable {
|
||||||
|
return [ExperimentalFeature]::IsEnabled("PSDesiredStateConfiguration.InvokeDscResource")
|
||||||
|
}
|
||||||
|
|
||||||
|
Describe "Test PSDesiredStateConfiguration" -tags CI {
|
||||||
Context "Module loading" {
|
Context "Module loading" {
|
||||||
BeforeAll {
|
BeforeAll {
|
||||||
Function BeCommand {
|
Function BeCommand {
|
||||||
[CmdletBinding()]
|
[CmdletBinding()]
|
||||||
Param(
|
Param(
|
||||||
$ActualValue,
|
[object[]] $ActualValue,
|
||||||
[string] $CommandName,
|
[string] $CommandName,
|
||||||
[string] $ModuleName,
|
[string] $ModuleName,
|
||||||
[switch]$Negate,
|
[switch]$Negate
|
||||||
[string]$Because,
|
|
||||||
$CallerSessionState
|
|
||||||
)
|
)
|
||||||
|
|
||||||
$failure = if ($Negate) {
|
$failure = if ($Negate) {
|
||||||
@@ -66,6 +82,7 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
BeforeAll {
|
BeforeAll {
|
||||||
$origProgress = $global:ProgressPreference
|
$origProgress = $global:ProgressPreference
|
||||||
$global:ProgressPreference = 'SilentlyContinue'
|
$global:ProgressPreference = 'SilentlyContinue'
|
||||||
|
Install-ModuleIfMissing -Name PSDscResources
|
||||||
$testCases = @(
|
$testCases = @(
|
||||||
@{
|
@{
|
||||||
TestCaseName = 'case mismatch in resource name'
|
TestCaseName = 'case mismatch in resource name'
|
||||||
@@ -96,7 +113,7 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
Set-ItResult -Pending -Because "Will only find script from PSDesiredStateConfiguration without modulename"
|
Set-ItResult -Pending -Because "Will only find script from PSDesiredStateConfiguration without modulename"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-not $IsWindows) {
|
if ($IsLinux) {
|
||||||
Set-ItResult -Pending -Because "https://github.com/PowerShell/PSDesiredStateConfiguration/issues/26"
|
Set-ItResult -Pending -Because "https://github.com/PowerShell/PSDesiredStateConfiguration/issues/26"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +132,7 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
it "should be able to get <Name> from <ModuleName> - <TestCaseName>" -TestCases $testCases {
|
it "should be able to get <Name> from <ModuleName> - <TestCaseName>" -TestCases $testCases {
|
||||||
param($Name, $ModuleName, $PendingBecause)
|
param($Name, $ModuleName, $PendingBecause)
|
||||||
|
|
||||||
if (-not $IsWindows) {
|
if ($IsLinux) {
|
||||||
Set-ItResult -Pending -Because "https://github.com/PowerShell/PSDesiredStateConfiguration/issues/26"
|
Set-ItResult -Pending -Because "https://github.com/PowerShell/PSDesiredStateConfiguration/issues/26"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,6 +157,10 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
$origProgress = $global:ProgressPreference
|
$origProgress = $global:ProgressPreference
|
||||||
$global:ProgressPreference = 'SilentlyContinue'
|
$global:ProgressPreference = 'SilentlyContinue'
|
||||||
|
|
||||||
|
Install-ModuleIfMissing -Name PSDscResources -Force
|
||||||
|
|
||||||
|
# Install PowerShellGet only if PowerShellGet 2.2.1 or newer does not exist
|
||||||
|
Install-ModuleIfMissing -Name PowerShellGet -MinimumVersion '2.2.1'
|
||||||
$module = Get-Module PowerShellGet -ListAvailable | Sort-Object -Property Version -Descending | Select-Object -First 1
|
$module = Get-Module PowerShellGet -ListAvailable | Sort-Object -Property Version -Descending | Select-Object -First 1
|
||||||
|
|
||||||
$psGetModuleSpecification = @{ModuleName = $module.Name; ModuleVersion = $module.Version.ToString() }
|
$psGetModuleSpecification = @{ModuleName = $module.Name; ModuleVersion = $module.Version.ToString() }
|
||||||
@@ -213,7 +234,7 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
it "should be able to get <Name> from <ModuleName> - <TestCaseName>" -TestCases $testCases {
|
it "should be able to get <Name> from <ModuleName> - <TestCaseName>" -TestCases $testCases {
|
||||||
param($Name, $ModuleName, $PendingBecause)
|
param($Name, $ModuleName, $PendingBecause)
|
||||||
|
|
||||||
if (-not $IsWindows) {
|
if ($IsLinux) {
|
||||||
Set-ItResult -Pending -Because "https://github.com/PowerShell/PSDesiredStateConfiguration/issues/12 and https://github.com/PowerShell/PowerShellGet/pull/529"
|
Set-ItResult -Pending -Because "https://github.com/PowerShell/PSDesiredStateConfiguration/issues/12 and https://github.com/PowerShell/PowerShellGet/pull/529"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,6 +268,7 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
BeforeAll {
|
BeforeAll {
|
||||||
$origProgress = $global:ProgressPreference
|
$origProgress = $global:ProgressPreference
|
||||||
$global:ProgressPreference = 'SilentlyContinue'
|
$global:ProgressPreference = 'SilentlyContinue'
|
||||||
|
Install-ModuleIfMissing -Name XmlContentDsc -Force
|
||||||
$classTestCases = @(
|
$classTestCases = @(
|
||||||
@{
|
@{
|
||||||
TestCaseName = 'Good case'
|
TestCaseName = 'Good case'
|
||||||
@@ -313,6 +335,11 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
BeforeAll {
|
BeforeAll {
|
||||||
$origProgress = $global:ProgressPreference
|
$origProgress = $global:ProgressPreference
|
||||||
$global:ProgressPreference = 'SilentlyContinue'
|
$global:ProgressPreference = 'SilentlyContinue'
|
||||||
|
$module = Get-InstalledModule -Name PsDscResources -ErrorAction Ignore
|
||||||
|
if ($module) {
|
||||||
|
Write-Verbose "removing PSDscResources, tests will re-install..." -Verbose
|
||||||
|
Uninstall-Module -Name PsDscResources -AllVersions -Force
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AfterAll {
|
AfterAll {
|
||||||
@@ -340,22 +367,26 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Install-ModuleIfMissing -Name PowerShellGet -Force -SkipPublisherCheck -MinimumVersion '2.2.1'
|
||||||
|
Install-ModuleIfMissing -Name xWebAdministration
|
||||||
$module = Get-Module PowerShellGet -ListAvailable | Sort-Object -Property Version -Descending | Select-Object -First 1
|
$module = Get-Module PowerShellGet -ListAvailable | Sort-Object -Property Version -Descending | Select-Object -First 1
|
||||||
|
|
||||||
$psGetModuleSpecification = @{ModuleName = $module.Name; ModuleVersion = $module.Version.ToString() }
|
$psGetModuleSpecification = @{ModuleName = $module.Name; ModuleVersion = $module.Version.ToString() }
|
||||||
}
|
}
|
||||||
it "Set method should work" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
it "Set method should work" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
||||||
if ($env:TF_BUILD -eq 'true') {
|
if (!$IsLinux) {
|
||||||
Set-ItResult -Skipped -Because "cannot install PSDscResources module during tests in Azure DevOps"
|
$result = Invoke-DscResource -Name PSModule -ModuleName $psGetModuleSpecification -Method set -Property @{
|
||||||
|
Name = 'PsDscResources'
|
||||||
|
InstallationPolicy = 'Trusted'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
$result = Invoke-DscResource -Name PSModule -ModuleName $psGetModuleSpecification -Method set -Property @{
|
# workraound because of https://github.com/PowerShell/PowerShellGet/pull/529
|
||||||
Name = 'PSDscResources'
|
Install-ModuleIfMissing -Name PsDscResources -Force
|
||||||
InstallationPolicy = 'Trusted'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$result.RebootRequired | Should -BeFalse
|
$result.RebootRequired | Should -BeFalse
|
||||||
$module = Get-module PSDscResources -ListAvailable
|
$module = Get-module PsDscResources -ListAvailable
|
||||||
$module | Should -Not -BeNullOrEmpty -Because "Resource should have installed module"
|
$module | Should -Not -BeNullOrEmpty -Because "Resource should have installed module"
|
||||||
}
|
}
|
||||||
it 'Set method should return RebootRequired=<expectedResult> when $global:DSCMachineStatus = <value>' -Skip:(!(Test-IsInvokeDscResourceEnable)) -TestCases $dscMachineStatusCases {
|
it 'Set method should return RebootRequired=<expectedResult> when $global:DSCMachineStatus = <value>' -Skip:(!(Test-IsInvokeDscResourceEnable)) -TestCases $dscMachineStatusCases {
|
||||||
@@ -372,30 +403,18 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
it "Test method should return false" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
it "Test method should return false" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
||||||
if ($env:TF_BUILD -eq 'true') {
|
|
||||||
Set-ItResult -Skipped -Because "cannot install PSDscResources module during tests in Azure DevOps"
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = Invoke-DscResource -Name Script -ModuleName PSDscResources -Method Test -Property @{TestScript = { Write-Output 'test'; return $false }; GetScript = { return @{ } }; SetScript = { return } }
|
$result = Invoke-DscResource -Name Script -ModuleName PSDscResources -Method Test -Property @{TestScript = { Write-Output 'test'; return $false }; GetScript = { return @{ } }; SetScript = { return } }
|
||||||
$result | Should -Not -BeNullOrEmpty
|
$result | Should -Not -BeNullOrEmpty
|
||||||
$result.InDesiredState | Should -BeFalse -Because "Test method return false"
|
$result.InDesiredState | Should -BeFalse -Because "Test method return false"
|
||||||
}
|
}
|
||||||
|
|
||||||
it "Test method should return true" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
it "Test method should return true" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
||||||
if ($env:TF_BUILD -eq 'true') {
|
|
||||||
Set-ItResult -Skipped -Because "cannot install PSDscResources module during tests in Azure DevOps"
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = Invoke-DscResource -Name Script -ModuleName PSDscResources -Method Test -Property @{TestScript = { Write-Verbose 'test'; return $true }; GetScript = { return @{ } }; SetScript = { return } }
|
$result = Invoke-DscResource -Name Script -ModuleName PSDscResources -Method Test -Property @{TestScript = { Write-Verbose 'test'; return $true }; GetScript = { return @{ } }; SetScript = { return } }
|
||||||
$result | Should -BeTrue -Because "Test method return true"
|
$result | Should -BeTrue -Because "Test method return true"
|
||||||
}
|
}
|
||||||
|
|
||||||
it "Test method should return true with moduleSpecification" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
it "Test method should return true with moduleSpecification" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
||||||
if ($env:TF_BUILD -eq 'true') {
|
$module = get-module PsDscResources -ListAvailable
|
||||||
Set-ItResult -Skipped -Because "cannot install PSDscResources module during tests in Azure DevOps"
|
|
||||||
}
|
|
||||||
|
|
||||||
$module = get-module PSDscResources -ListAvailable
|
|
||||||
$moduleSpecification = @{ModuleName = $module.Name; ModuleVersion = $module.Version.ToString() }
|
$moduleSpecification = @{ModuleName = $module.Name; ModuleVersion = $module.Version.ToString() }
|
||||||
$result = Invoke-DscResource -Name Script -ModuleName $moduleSpecification -Method Test -Property @{TestScript = { Write-Verbose 'test'; return $true }; GetScript = { return @{ } }; SetScript = { return } }
|
$result = Invoke-DscResource -Name Script -ModuleName $moduleSpecification -Method Test -Property @{TestScript = { Write-Verbose 'test'; return $true }; GetScript = { return @{ } }; SetScript = { return } }
|
||||||
$result | Should -BeTrue -Because "Test method return true"
|
$result | Should -BeTrue -Because "Test method return true"
|
||||||
@@ -403,7 +422,7 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
|
|
||||||
it "Invalid moduleSpecification" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
it "Invalid moduleSpecification" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
||||||
Set-ItResult -Pending -Because "https://github.com/PowerShell/PSDesiredStateConfiguration/issues/17"
|
Set-ItResult -Pending -Because "https://github.com/PowerShell/PSDesiredStateConfiguration/issues/17"
|
||||||
$moduleSpecification = @{ModuleName = 'PSDscResources'; ModuleVersion = '99.99.99.993' }
|
$moduleSpecification = @{ModuleName = 'PsDscResources'; ModuleVersion = '99.99.99.993' }
|
||||||
{
|
{
|
||||||
Invoke-DscResource -Name Script -ModuleName $moduleSpecification -Method Test -Property @{TestScript = { Write-Host 'test'; return $true }; GetScript = { return @{ } }; SetScript = { return } } -ErrorAction Stop
|
Invoke-DscResource -Name Script -ModuleName $moduleSpecification -Method Test -Property @{TestScript = { Write-Host 'test'; return $true }; GetScript = { return @{ } }; SetScript = { return } } -ErrorAction Stop
|
||||||
} |
|
} |
|
||||||
@@ -415,15 +434,11 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
Set-ItResult -Skipped -Because "Feature not enabled"
|
Set-ItResult -Skipped -Because "Feature not enabled"
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($env:TF_BUILD -eq 'true') {
|
|
||||||
Set-ItResult -Skipped -Because "cannot install PSDscResources module during tests in Azure DevOps"
|
|
||||||
}
|
|
||||||
|
|
||||||
$resourceName="TestRes"
|
$resourceName="TestRes"
|
||||||
$moduleName="TestEmbeddedDSCResource"
|
$moduleName="TestEmbeddedDSCResource"
|
||||||
$embObj = @(New-Object -TypeName psobject -Property @{embclassprop="property1"})
|
$embObj = @(New-Object -TypeName psobject -Property @{embclassprop="property1"})
|
||||||
|
|
||||||
Install-Module -Name $moduleName -Force
|
Install-ModuleIfMissing -Name $moduleName -Force
|
||||||
|
|
||||||
$resource = Get-DscResource -Name $resourceName -Module $moduleName -ErrorAction Stop
|
$resource = Get-DscResource -Name $resourceName -Module $moduleName -ErrorAction Stop
|
||||||
$resource | Should -Not -BeNullOrEmpty
|
$resource | Should -Not -BeNullOrEmpty
|
||||||
@@ -475,21 +490,17 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
it "Get method should work" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
it "Get method should work" -Skip:(!(Test-IsInvokeDscResourceEnable)) {
|
||||||
if ($env:TF_BUILD -eq 'true') {
|
if ($IsLinux) {
|
||||||
Set-ItResult -Skipped -Because "cannot install PSDscResources module during tests in Azure DevOps"
|
|
||||||
}
|
|
||||||
|
|
||||||
if (-not $IsWindows) {
|
|
||||||
Set-ItResult -Pending -Because "https://github.com/PowerShell/PSDesiredStateConfiguration/issues/12 and https://github.com/PowerShell/PowerShellGet/pull/529"
|
Set-ItResult -Pending -Because "https://github.com/PowerShell/PSDesiredStateConfiguration/issues/12 and https://github.com/PowerShell/PowerShellGet/pull/529"
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = Invoke-DscResource -Name PSModule -ModuleName $psGetModuleSpecification -Method Get -Property @{ Name = 'PSDscResources' }
|
$result = Invoke-DscResource -Name PSModule -ModuleName $psGetModuleSpecification -Method Get -Property @{ Name = 'PsDscResources' }
|
||||||
$result | Should -Not -BeNullOrEmpty
|
$result | Should -Not -BeNullOrEmpty
|
||||||
$result.Author | Should -BeLike 'Microsoft*'
|
$result.Author | Should -BeLike 'Microsoft*'
|
||||||
$result.InstallationPolicy | Should -BeOfType [string]
|
$result.InstallationPolicy | Should -BeOfType [string]
|
||||||
$result.Guid | Should -BeOfType [Guid]
|
$result.Guid | Should -BeOfType [Guid]
|
||||||
$result.Ensure | Should -Be 'Present'
|
$result.Ensure | Should -Be 'Present'
|
||||||
$result.Name | Should -be 'PSDscResources'
|
$result.Name | Should -be 'PsDscResources'
|
||||||
$result.Description | Should -BeLike 'This*DSC*'
|
$result.Description | Should -BeLike 'This*DSC*'
|
||||||
$result.InstalledVersion | should -BeOfType [Version]
|
$result.InstalledVersion | should -BeOfType [Version]
|
||||||
$result.ModuleBase | Should -BeLike '*PSDscResources*'
|
$result.ModuleBase | Should -BeLike '*PSDscResources*'
|
||||||
@@ -499,6 +510,10 @@ Describe "Test PSDesiredStateConfiguration" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Context "Class Based Resources" {
|
Context "Class Based Resources" {
|
||||||
|
BeforeAll {
|
||||||
|
Install-ModuleIfMissing -Name XmlContentDsc -Force
|
||||||
|
}
|
||||||
|
|
||||||
AfterAll {
|
AfterAll {
|
||||||
$Global:ProgressPreference = $origProgress
|
$Global:ProgressPreference = $origProgress
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
# Copyright (c) Microsoft Corporation. All rights reserved.
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
# Licensed under the MIT License.
|
# Licensed under the MIT License.
|
||||||
Describe "DSC MOF Compilation" {
|
Describe "DSC MOF Compilation" -tags "CI" {
|
||||||
BeforeAll {
|
BeforeAll {
|
||||||
$module = Get-Module PowerShellGet -ListAvailable | Sort-Object -Property Version -Descending | Select-Object -First 1
|
$module = Get-Module PowerShellGet -ListAvailable | Sort-Object -Property Version -Descending | Select-Object -First 1
|
||||||
|
|
||||||
$psGetModuleVersion = $module.Version.ToString()
|
$psGetModuleVersion = $module.Version.ToString()
|
||||||
|
if (!$env:DSC_HOME)
|
||||||
|
{
|
||||||
|
Import-Module PSDesiredStateConfiguration
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
It "Should be able to compile a MOF using PSModule resource" {
|
It "Should be able to compile a MOF using PSModule resource" {
|
||||||
if ($env:GITHUB_ACTIONS -eq 'true' -or $env:TF_BUILD -eq 'true') {
|
if ($IsLinux) {
|
||||||
Set-ItResult -Skipped -Because "does not work in CI"
|
|
||||||
}
|
|
||||||
|
|
||||||
if (-not $IsWindows) {
|
|
||||||
Set-ItResult -Pending -Because "https://github.com/PowerShell/PowerShellGet/pull/529"
|
Set-ItResult -Pending -Because "https://github.com/PowerShell/PowerShellGet/pull/529"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ Describe "DSC MOF Compilation" {
|
|||||||
Node "localhost" {
|
Node "localhost" {
|
||||||
PSModule f1
|
PSModule f1
|
||||||
{
|
{
|
||||||
Name = 'PSDscResources'
|
Name = 'PsDscResources'
|
||||||
InstallationPolicy = 'Trusted'
|
InstallationPolicy = 'Trusted'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
# Copyright (c) Microsoft Corporation.
|
|
||||||
# Licensed under the MIT License.
|
|
||||||
param(
|
|
||||||
[ValidateSet("PSGallery", "CFS")]
|
|
||||||
[string]$PSRepository = "PSGallery"
|
|
||||||
)
|
|
||||||
|
|
||||||
if ($PSRepository -eq "CFS" -and -not (Get-PSResourceRepository -Name CFS -ErrorAction SilentlyContinue)) {
|
|
||||||
Register-PSResourceRepository -Name CFS -Uri "https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/PowerShellGalleryMirror/nuget/v3/index.json"
|
|
||||||
}
|
|
||||||
|
|
||||||
# NOTE: Due to a bug in Install-PSResource with upstream feeds, we have to
|
|
||||||
# request an exact version. Otherwise, if a newer version is available in the
|
|
||||||
# upstream feed, it will fail to install any version at all.
|
|
||||||
Install-PSResource -Verbose -TrustRepository -RequiredResource @{
|
|
||||||
platyPS = @{
|
|
||||||
version = "0.14.2"
|
|
||||||
repository = $PSRepository
|
|
||||||
}
|
|
||||||
Pester = @{
|
|
||||||
version = "5.7.1"
|
|
||||||
repository = $PSRepository
|
|
||||||
}
|
|
||||||
PSDscResources = @{
|
|
||||||
version = "2.12.0.0"
|
|
||||||
repository = $PSRepository
|
|
||||||
}
|
|
||||||
XmlContentDsc = @{
|
|
||||||
version = "0.0.1"
|
|
||||||
repository = $PSRepository
|
|
||||||
}
|
|
||||||
xWebAdministration = @{
|
|
||||||
version = "3.3.0"
|
|
||||||
repository = $PSRepository
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<SignConfigXML>
|
||||||
|
<job platform="" configuration="" dest="__OUTPATHROOT__" jobname="PSDesiredStateConfiguration Catalog" approvers="vigarg;gstolt">
|
||||||
|
<file src="__INPATHROOT__\PSDesiredStateConfiguration\PSDesiredStateConfiguration.cat" signType="AuthenticodeFormer" dest="__OUTPATHROOT__\PSDesiredStateConfiguration\PSDesiredStateConfiguration.cat" />
|
||||||
|
</job>
|
||||||
|
</SignConfigXML>
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
# Licensed under the MIT License.
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[string] $Path,
|
||||||
|
[string[]] $AuthenticodeDualFiles,
|
||||||
|
[string[]] $AuthenticodeFiles,
|
||||||
|
[string[]] $NuPkgFiles,
|
||||||
|
[string[]] $MacDeveloperFiles,
|
||||||
|
[string[]] $LinuxFiles,
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[string] $rootPath
|
||||||
|
)
|
||||||
|
|
||||||
|
$resolvedRootPath = (Resolve-Path $rootPath).ProviderPath
|
||||||
|
|
||||||
|
if ((!$AuthenticodeDualFiles -or $AuthenticodeDualFiles.Count -eq 0) -and
|
||||||
|
(!$AuthenticodeFiles -or $AuthenticodeFiles.Count -eq 0) -and
|
||||||
|
(!$NuPkgFiles -or $NuPkgFiles.Count -eq 0) -and
|
||||||
|
(!$MacDeveloperFiles -or $MacDeveloperFiles.Count -eq 0) -and
|
||||||
|
(!$LinuxFiles -or $LinuxFiles.Count -eq 0))
|
||||||
|
{
|
||||||
|
throw "At least one file must be specified"
|
||||||
|
}
|
||||||
|
|
||||||
|
function New-Attribute
|
||||||
|
{
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[string]$Name,
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[object]$Value,
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[System.Xml.XmlElement]$Element
|
||||||
|
)
|
||||||
|
|
||||||
|
$attribute = $signingXml.CreateAttribute($Name)
|
||||||
|
$attribute.Value = $value
|
||||||
|
$null = $fileElement.Attributes.Append($attribute)
|
||||||
|
}
|
||||||
|
|
||||||
|
function New-FileElement
|
||||||
|
{
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[string]$File,
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[string]$SignType,
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[System.Xml.XmlDocument]$XmlDoc,
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[System.Xml.XmlElement]$Job
|
||||||
|
)
|
||||||
|
|
||||||
|
if(Test-Path -Path $file)
|
||||||
|
{
|
||||||
|
$name = Split-Path -Leaf -Path $File
|
||||||
|
$fileElement = $XmlDoc.CreateElement("file")
|
||||||
|
$src = $file.replace($resolvedRootPath,'__INPATHROOT__\')
|
||||||
|
$dest = $file.replace($resolvedRootPath,'__OUTPATHROOT__\')
|
||||||
|
New-Attribute -Name 'src' -value $src -Element $fileElement
|
||||||
|
New-Attribute -Name 'signType' -value $SignType -Element $fileElement
|
||||||
|
New-Attribute -Name 'dest' -value $dest -Element $fileElement
|
||||||
|
$null = $job.AppendChild($fileElement)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Write-Warning -Message "Skipping $SignType; $File because it does not exist"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[xml]$signingXml = get-content (Join-Path -Path $PSScriptRoot -ChildPath 'packagesigning.xml')
|
||||||
|
$job = $signingXml.SignConfigXML.job
|
||||||
|
|
||||||
|
foreach($file in $AuthenticodeDualFiles)
|
||||||
|
{
|
||||||
|
New-FileElement -File $file -SignType 'AuthenticodeDual' -XmlDoc $signingXml -Job $job
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach($file in $AuthenticodeFiles)
|
||||||
|
{
|
||||||
|
New-FileElement -File $file -SignType 'AuthenticodeFormer' -XmlDoc $signingXml -Job $job
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach($file in $NuPkgFiles)
|
||||||
|
{
|
||||||
|
New-FileElement -File $file -SignType 'NuGet' -XmlDoc $signingXml -Job $job
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($file in $MacDeveloperFiles) {
|
||||||
|
New-FileElement -File $file -SignType 'MacDeveloper' -XmlDoc $signingXml -Job $job
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($file in $LinuxFiles) {
|
||||||
|
New-FileElement -File $file -SignType 'LinuxPack' -XmlDoc $signingXml -Job $job
|
||||||
|
}
|
||||||
|
|
||||||
|
$null = new-item -Path $path -ItemType file -Force
|
||||||
|
$savePath = (Resolve-Path $Path).ProviderPath
|
||||||
|
$signingXml.Save($savePath)
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<!-- template used by generatePackageSigning.ps1 -->
|
||||||
|
<SignConfigXML>
|
||||||
|
<job platform="" configuration="" dest="__OUTPATHROOT__\signed" jobname="PSDesiredStateConfiguration module" approvers="vigarg;gstolt">
|
||||||
|
</job>
|
||||||
|
</SignConfigXML>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- template used by generatePackageSigning.ps1 -->
|
||||||
|
<SignConfigXML>
|
||||||
|
<job platform="" configuration="" dest="__OUTPATHROOT__\signed" jobname="PSDesiredStateConfiguration module" approvers="vigarg;gstolt">
|
||||||
|
<file src="__INPATHROOT__\PSDesiredStateConfiguration/helpers/DscResourceInfo.psm1" signType="AuthenticodeFormer" dest="__OUTPATHROOT__\PSDesiredStateConfiguration/helpers/DscResourceInfo.psm1" />
|
||||||
|
<file src="__INPATHROOT__\PSDesiredStateConfiguration/PSDesiredStateConfiguration.psd1" signType="AuthenticodeFormer" dest="__OUTPATHROOT__\PSDesiredStateConfiguration/PSDesiredStateConfiguration.psd1" />
|
||||||
|
<file src="__INPATHROOT__\PSDesiredStateConfiguration/PSDesiredStateConfiguration.psm1" signType="AuthenticodeFormer" dest="__OUTPATHROOT__\PSDesiredStateConfiguration/PSDesiredStateConfiguration.psm1" />
|
||||||
|
</job>
|
||||||
|
</SignConfigXML>
|
||||||
@@ -0,0 +1,379 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xmldata>
|
||||||
|
<PckFileTypes TotalTypes="35" TotalExts="198" UnsupportedFilesOnly="False">
|
||||||
|
<Type ID="0" Check="1">
|
||||||
|
<Name>Pure Text Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.txt</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.des</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pwd</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.asm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cmd</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ini</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.poc</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pwt</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hpj</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.sql</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.inf</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.log</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.def</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.url</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.bat</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.aspx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.idl</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.sys</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.resources</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.strings</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.md</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.yml</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.yaml</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.spelling</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.gitignore</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.gitattributes</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.gitmodules</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.csv</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.tsv</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="1" Check="1">
|
||||||
|
<Name>CodeFiles</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.frm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.inc</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cpp</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cls</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.c</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hpp</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vbs</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.java</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cs</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cxx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.h</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.jav</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.bas</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.js</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pl</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.rc</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vb</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.json</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.resjson</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.fs</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.fsi</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.fsx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.m</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.psm1</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.config</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ps1</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.psd1</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cmake</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.sh</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cshtml</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.plist</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mof</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mc</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="2" Check="1">
|
||||||
|
<Name>XML Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xml</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxa</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxk</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxl</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xsl</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxc</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxt</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.resx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxe</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxf</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxv</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.acctb</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.accfl</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xaml</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ttml</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ddue</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.sln</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.props</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ps1xml</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.csproj</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xsd</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.svg</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.clixml</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.nuspec</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cdxml</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.manifest</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="3" Check="1">
|
||||||
|
<Name>Microsoft Word Documents</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.doc</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.dot</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.wiz</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="4" Check="1">
|
||||||
|
<Name>Microsoft Access Database Compatible</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.mdb</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mda</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mde</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mpd</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mdt</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="5" Check="1">
|
||||||
|
<Name>Microsoft PowerPoint Presentation</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ppt</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pot</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pps</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="6" Check="1">
|
||||||
|
<Name>Microsoft Publisher Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pub</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="7" Check="1">
|
||||||
|
<Name>Microsoft Excel Workbooks</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xls</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlt</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="8" Check="1">
|
||||||
|
<Name>Pure Binary Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.com</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.bin</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.tlb</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.drv</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.fon</Ext>
|
||||||
|
<Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.blg</Ext>
|
||||||
|
<Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.gif</Ext>
|
||||||
|
<Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.png</Ext>
|
||||||
|
<Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.icns</Ext>
|
||||||
|
<Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.ico</Ext>
|
||||||
|
<Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.bmp</Ext>
|
||||||
|
<Ext Check="0" UseCustomParser="0" DllPath="" ClassName="">.pfx</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="9" Check="1">
|
||||||
|
<Name>Localization resource databases</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.edb</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.lcl</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlf</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xliff</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="10" Check="1">
|
||||||
|
<Name>Microsoft Project Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mpp</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mpt</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="11" Check="1">
|
||||||
|
<Name>Microsoft Visio Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vsd</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vdx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vss</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vst</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="12" Check="1">
|
||||||
|
<Name>Windows Installer databases</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.msi</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.msm</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="13" Check="1">
|
||||||
|
<Name>Zip Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.zip</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.accdt</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.axtr</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="14" Check="1">
|
||||||
|
<Name>Cabinet / MS Compression Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cab</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="15" Check="1">
|
||||||
|
<Name>Table driven IME lexicons</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mb</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="16" Check="1">
|
||||||
|
<Name>IME ( IMD ) Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.imd</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="17" Check="1">
|
||||||
|
<Name>TrueType Font Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ttf</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="18" Check="1">
|
||||||
|
<Name>Microsoft Outlook Mail Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.msg</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.oft</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="19" Check="1">
|
||||||
|
<Name>HTML Help 2.0 Files / InfoTech5.x Storage System Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.its</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxh</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxr</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxw</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxi</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxs</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hxq</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="20" Check="1">
|
||||||
|
<Name>Adobe Acrobat PDF Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pdf</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="21" Check="1">
|
||||||
|
<Name>HTML Files / Web Page</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.htm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.dtd</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hhk</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.htw</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.asp</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.htc</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.htx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.html</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.hhc</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.css</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.stm</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="22" Check="1">
|
||||||
|
<Name>Rich Text Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.rtf</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="23" Check="1">
|
||||||
|
<Name>Windows 3.x Write Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.wri</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="24" Check="1">
|
||||||
|
<Name>MHTML Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.eml</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.nws</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mht</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="25" Check="1">
|
||||||
|
<Name>Word 2007 Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.docx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.docm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.dotx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.dotm</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="26" Check="1">
|
||||||
|
<Name>Excel 2007 Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlsx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlsm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xltx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xltm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlsb</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.xlam</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="27" Check="1">
|
||||||
|
<Name>Power Point 2007 Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pptx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.pptm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.potx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.potm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ppsx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ppsm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ppam</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="28" Check="1">
|
||||||
|
<Name>Access 2007 Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.accdb</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.accde</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.accdr</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="29" Check="1">
|
||||||
|
<Name>Win32/64-based executable (image) Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.exe</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.dll</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ocx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.scr</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.acm</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.rll</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.cpl</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.mui</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ax</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.ime</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="30" Check="1">
|
||||||
|
<Name>HTML Help 1.0 Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.chm</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="31" Check="1">
|
||||||
|
<Name>LocStudio lsg</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.lsg</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="32" Check="1">
|
||||||
|
<Name>Microsoft Office OneNote Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.one</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.onepkg</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="33" Check="1">
|
||||||
|
<Name>Custom Parsers</Name>
|
||||||
|
<Extensions>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
<Type ID="34" Check="1">
|
||||||
|
<Name>Visio 2011 Files</Name>
|
||||||
|
<Extensions>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vstx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vsdx</Ext>
|
||||||
|
<Ext Check="1" UseCustomParser="0" DllPath="" ClassName="">.vssx</Ext>
|
||||||
|
</Extensions>
|
||||||
|
</Type>
|
||||||
|
|
||||||
|
</PckFileTypes>
|
||||||
|
</xmldata>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
&$PSScriptRoot/build.ps1 -Build -Clean
|
||||||
|
Write-Verbose -Message "Updating signing.xml ..." -Verbose
|
||||||
|
$files = @(Get-ChildItem $PSScriptRoot/out/*.ps* -Recurse | Select-Object -ExpandProperty FullName)
|
||||||
|
&$PSScriptRoot/tools/releaseBuild/generatePackgeSigning.ps1 -AuthenticodeFiles $files -path $PSScriptRoot/tools/releaseBuild/signing.xml -rootPath $PSScriptRoot/out/
|
||||||
|
Write-Verbose -Message "Done ..." -Verbose
|
||||||
|
# Make sure the file ends with an empty line
|
||||||
|
Add-Content -value '' -Path $PSScriptRoot/tools/releaseBuild/signing.xml
|
||||||
Reference in New Issue
Block a user