Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

formatting partial / dot sourced ps1 dsc scripts #1583

Closed
sfcmgr opened this issue Oct 15, 2018 · 5 comments
Closed

formatting partial / dot sourced ps1 dsc scripts #1583

sfcmgr opened this issue Oct 15, 2018 · 5 comments
Labels

Comments

@sfcmgr
Copy link

sfcmgr commented Oct 15, 2018

Issue Description

I'm currently creating DSC Resource modules to apply settings in our environment, I'm breaking down the actual settings to individual files to make managing the settings easier and to have an easy structure of those settings.

The issue is that the formatter is not performing the align dsc resource / hash table function on the files to import.

It's not really relevant but i'm using the following code in my policy.schema.psm1 file

Configuration Win10CustomComputerPolicy
{
    Param(
        [Parameter(Mandatory = $false)]
        [array]
        $excludeImports = @()
    )
    
    Import-DscResource -ModuleName PSDesiredStateConfiguration

    $importParams = @{
        Path        = $PSScriptRoot
        Exclude     = $excludeImports
        Filter      = '*.ps1'
        ErrorAction = 'SilentlyContinue'
        Recurse     = $true
    }
    $imports = @(Get-ChildItem @importParams)

    #Dot source the files
    Foreach ($import in $imports) {
        Try {
            . $import.fullname
        }
        Catch {
            Write-Error -Message "Failed to import function $($import.fullname): $_"
        }
    }
}

each individual file then looks like this:

DisableLocalMachineRunOnce.ps1

#\System\Logon\Do not process the run once list
Registry DisableLocalMachineRunOnce {
    Ensure = "Present"
    Key = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
    Force     = $true
    ValueName = "DisableLocalMachineRunOnce"
    ValueType = "DWord"
    ValueData = "1"
}

most of the formatting works, but not the alignment, if I add a configuration section around the code it works, but that would break my import.

#\System\Logon\Do not process the run once list
configuration test {
    Registry DisableLocalMachineRunOnce {
        Ensure    = "Present"
        Key       = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
        Force     = $true
        ValueName = "DisableLocalMachineRunOnce"
        ValueType = "DWord"
        ValueData = "1"
    }
}

You can easily see the difference by creating a new .ps1 file, using the above code, the second example will auto-format the alignment in the dsc resource, the first won't.

If you need anything else, I'm happy to provide it!

Attached Logs

I've not attached logs - problem seems easily reproducible, can add later if really needed.

Environment Information

Visual Studio Code

Name Version
Operating System Windows_NT x64 10.0.17134
VSCode 1.28.1
PowerShell Extension Version 1.9.0

PowerShell Information

Name Value
PSVersion 5.1.17134.228
PSEdition Desktop
PSCompatibleVersions 1.0 2.0 3.0 4.0 5.0 5.1.17134.228
BuildVersion 10.0.17134.228
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

Visual Studio Code Extensions

Visual Studio Code Extensions(Click to Expand)
Extension Author Version
asciidoctor-vscode joaompinto 0.15.1
better-comments aaron-bond 2.0.2
code-settings-sync Shan 3.1.2
code-spell-checker streetsidesoftware 1.6.10
dark-plus-material vangware 1.4.3
gitconfig sidneys1 2.0.0
markdown-all-in-one yzhang 1.6.0
markdown-checkbox PKief 1.3.0
material-icon-theme PKief 3.6.0
mssql ms-mssql 1.4.0
PowerShell ms-vscode 1.9.0
theme-bluloco-light uloco 2.6.4
theme-monokai-pro-vscode monokai 1.1.8
theme-panda tinkertrain 1.3.0
vsc-material-theme Equinusocio 2.4.2
vscode-markdownlint DavidAnson 0.20.0
vscode-mysql formulahendry 0.3.0
vscode-theme-onelight akamud 2.1.0
@rjmholt
Copy link
Contributor

rjmholt commented Oct 15, 2018

Hi @chrisshearing, thanks for opening such a detailed issue.

Our formatting is handled by the PSScriptAnalyzer project. It looks like a similar request already exists here: PowerShell/PSScriptAnalyzer#1029.

I could imagine this being tricky to implement though, since the context to know that the dot-sourced file represents a DSC resource only exists in the file with the configuration. But it sounds like a generic alignment rule would suffice there.

Have a read through that PSScriptAnalyzer issue and if it doesn't suit you, the best solution is probably to open a new PSScriptAnalyzer issue in that repo.

@sfcmgr
Copy link
Author

sfcmgr commented Oct 15, 2018

Hi @rjmholt , thanks for your reply and information on where I should be directing the issue report. I didn't think to check the PSScriptAnalyzer project, but it's obvious now you've mentioned it, so apologies for that!

I think my issue is slightly different from the one you found and linked, the DSC resource default behaviour should be to align the contents, however it's not registering it's a DSC resource because it's only a partial config,

I shall copy most of this and open a new issue on the PSScriptAnalyzer project, linking back to here.

Thanks again,

@rjmholt
Copy link
Contributor

rjmholt commented Oct 15, 2018

@chrisshearing No need to apologise for anything -- it's an implementation detail. But that's the point of discussing it in the issue I suppose. Anyway, I've updated the issue templates to be more explicit.

As I say, I'm not sure how simple this will be, since the only way for PSSA to know that your dot-sourced file is a DSC resource is to traverse the dot-source in the parent file (your DSC resource could just be another function call). But it seems to me like a generic formatter alignment rule would work quite well here anyway.

@rjmholt
Copy link
Contributor

rjmholt commented Oct 16, 2018

I'm going to close this here due to the specificity of the issue and it being handled by PSSA. If it transpires that we need to change something, we can reopen.

@rjmholt rjmholt closed this as completed Oct 16, 2018
@bergmeister
Copy link
Contributor

@rjmholt I answered in the PSSA repo but just FYI:
The behaviour that the issue creator described is because the default of the VS Code setting of the PowerShell extension powershell.codeFormatting.alignPropertyValuePairs is set to true by default. To get the different formatting without the equals signs being aligned, one need to set the VS Code setting powershell.codeFormatting.alignPropertyValuePairs to false. This setting is a direct mapper to the AlignAssignmentStatement configuration

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

No branches or pull requests

3 participants