PowerShell / PowerShell/PSScriptAnalyzer

formatting partial / dot sourced ps1 dsc scripts

未关闭
#1,081 7 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

Area - Formatter
主要语言
C#
星标
2.2k
派生
414
平均合并
13 小时 1 分钟
30 天内合并 PR
2

描述

Steps to reproduce

I originally opened this on the vscode-powershell#1583 project, but I've been directed to open an issue here directly.

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"
    }
}

I can provide a bit more information when I'm back in the office tomorrow if any is needed, but I wanted to make sure I'd opened the issue since I was aware.

Expected behavior

Registry DisableLocalMachineRunOnce {
    Ensure    = "Present"
    Key       = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
    Force     = $true
    ValueName = "DisableLocalMachineRunOnce"
    ValueType = "DWord"
    ValueData = "1"
}

Actual behavior

Registry DisableLocalMachineRunOnce {
    Ensure = "Present"
    Key = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
    Force     = $true
    ValueName = "DisableLocalMachineRunOnce"
    ValueType = "DWord"
    ValueData = "1"
}

Environment data

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

(Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() }

I'm using PSScriptAnalyzer as part of vscode-powershell using the current version.

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

使用独立的 DisableLocalMachineRunOnce.ps1 资源复现 PSScriptAnalyzer 中 formatter 的行为,并将其与所提供配置示例中的同一资源进行比较。首先跟踪 formatter 如何识别 dot-sourced 文件中的 DSC 资源;当独立资源按照预期行为所示对齐 Ensure 和其他赋值时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
powershell
领域
tooling
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。