PowerShell / PowerShell/PSScriptAnalyzer

Cannot import PSScriptAnalyzer 1.24.0 with PowerShell 7.4.5 or earlier

Đang mở
#2,106 3 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Ngôn ngữ chính
C#
Star
2.2k
Fork
414
Merge trung bình
13 giờ 1 phút
Pull request đã merge (30 ngày)
2

Mô tả

Cannot import PSScriptAnalyzer 1.24.0 with PowerShell 7.4.5 or earlier on Linux*. Attempting to do so fails with the following error:

Import-Module: Could not load file or assembly 'System.Management.Automation, Version=7.4.6.500, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. The system cannot find the file specified.

* Update: removed "on linux" since we now know this issue will occur on all platforms.

  • PSScriptAnalyzer 1.23.0 works as expected.
  • PowerShell 7.4.6+ works as expected.
    • Reproduced with 7.4.1, 7.4.2, 7.4.5.
    • Did not try with earlier versions.
  • Did not try on Windows, although it does work okay with PS 7.5.1.

Steps to reproduce

Easiest way to repro is probably via a linux container with PowerShell installed:

$cmds = @(
  'Install-Module PSScriptAnalyzer -RequiredVersion 1.24.0 -Force'
  'Import-Module PSScriptAnalyzer -PassThru'
  '$Error[0] | select *'
) -join '; '
docker run -it --rm demisto/powershell-ubuntu:7.4.5.112371 pwsh -c $cmds

In this example I am using demisto/powershell-ubuntu:7.4.5.112371 but I was also able to repeat using an older .NET SDK container (mcr.microsoft.com/dotnet/sdk:8.0.302-bookworm-slim-arm64v8) containing PowerShell v7.4.2.

Expected behavior

ModuleType Version    PreRelease Name                                ExportedCommands
---------- -------    ---------- ----                                ----------------
Script     1.24.0                PSScriptAnalyzer                    {Get-ScriptAnalyzerRule, Invoke-Formatter, Invoke-ScriptAnalyzer}

Actual behavior

Import-Module: Could not load file or assembly 'System.Management.Automation, Version=7.4.6.500, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. The system cannot find the file
specified.

ModuleType Version    PreRelease Name                                ExportedCommands
---------- -------    ---------- ----                                ----------------
Script     1.24.0                PSScriptAnalyzer

PSMessageDetails      :
Exception             : System.IO.FileNotFoundException: Could not load file or assembly 'System.Management.Automation, Version=7.4.6.500, Culture=neutral,
                        PublicKeyToken=31bf3856ad364e35'. The system cannot find the file specified.

                        File name: 'System.Management.Automation, Version=7.4.6.500, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
                           at System.Reflection.RuntimeAssembly.GetExportedTypes()
                           at System.Management.Automation.Runspaces.PSSnapInHelpers.GetAssemblyTypes(Assembly assembly, String name)
                           at System.Management.Automation.Runspaces.PSSnapInHelpers.AnalyzeModuleAssemblyWithReflection(Assembly assembly, String name, PSSnapInInfo
                        psSnapInInfo, PSModuleInfo moduleInfo, String helpFile, Dictionary`2& cmdlets, Dictionary`2& aliases, Dictionary`2& providers)
                           at System.Management.Automation.Runspaces.PSSnapInHelpers.AnalyzePSSnapInAssembly(Assembly assembly, String name, PSSnapInInfo psSnapInInfo,
                        PSModuleInfo moduleInfo, Dictionary`2& cmdlets, Dictionary`2& aliases, Dictionary`2& providers, String& helpFile)
                           at System.Management.Automation.Runspaces.InitialSessionState.ImportCmdletsFromAssembly(Assembly assembly, PSModuleInfo module)
                           at Microsoft.PowerShell.Commands.ModuleCmdletBase.LoadBinaryModule(PSModuleInfo parentModule, String moduleName, String fileName, Assembly
                        assemblyToLoad, String moduleBase, SessionState ss, ImportModuleOptions options, ManifestProcessingFlags manifestProcessingFlags, String prefix,
                        Boolean& found, String shortModuleName, Boolean disableFormatUpdates)
                           at Microsoft.PowerShell.Commands.ModuleCmdletBase.LoadModule(PSModuleInfo parentModule, String fileName, String moduleBase, String prefix,
                        SessionState ss, Object privateData, ImportModuleOptions& options, ManifestProcessingFlags manifestProcessingFlags, Boolean& found, Boolean&
                        moduleFileFound)
                           at Microsoft.PowerShell.Commands.ImportModuleCommand.ImportModule_LocallyViaName(ImportModuleOptions importModuleOptions, String name)
                           at Microsoft.PowerShell.Commands.ImportModuleCommand.ImportModule_LocallyViaName_WithTelemetry(ImportModuleOptions importModuleOptions, String
                        name)
                           at Microsoft.PowerShell.Commands.ImportModuleCommand.ProcessRecord()
                           at System.Management.Automation.CommandProcessor.ProcessRecord()
TargetObject          :
CategoryInfo          : NotSpecified: (:) [Import-Module], FileNotFoundException
FullyQualifiedErrorId : System.IO.FileNotFoundException,Microsoft.PowerShell.Commands.ImportModuleCommand
ErrorDetails          :
InvocationInfo        : System.Management.Automation.InvocationInfo
ScriptStackTrace      : at <ScriptBlock>, /root/.local/share/powershell/Modules/PSScriptAnalyzer/1.24.0/PSScriptAnalyzer.psm1: line 34
                        at <ScriptBlock>, <No file>: line 1
PipelineIterationInfo : {}

Environment data

> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      7.4.5
PSEdition                      Core
GitCommitId                    7.4.5
OS                             Ubuntu 22.04.5 LTS
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

> (Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() }
InvalidOperation: You cannot call a method on a null-valued expression.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Tái hiện lỗi bằng lệnh Docker PowerShell 7.4.5 được cung cấp và so sánh với PowerShell 7.4.6+ và PSScriptAnalyzer 1.23.0. Bắt đầu từ dòng 34 của PSScriptAnalyzer.psm1 và kiểm tra đường dẫn tải module xung quanh tham chiếu assembly System.Management.Automation. Được xem là hoàn tất khi PSScriptAnalyzer 1.24.0 được import thành công trên các phiên bản PowerShell bị ảnh hưởng và export các lệnh dự kiến.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
powershell
Lĩnh vực
tooling
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
38/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.