PowerShell / PowerShell/PSScriptAnalyzer
Cannot import PSScriptAnalyzer 1.24.0 with PowerShell 7.4.5 or earlier
まだ誰も着手していません。
- 主要言語
- C#
- スター
- 2.2k
- フォーク
- 414
- 平均マージ
- 13時間 1分
- マージ済み PR(30日)
- 2
説明
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.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
提供された PowerShell 7.4.5 の Docker コマンドで失敗を再現し、PowerShell 7.4.6+ および PSScriptAnalyzer 1.23.0 と比較してください。PSScriptAnalyzer.psm1 の 34 行目から開始し、System.Management.Automation アセンブリ参照周辺のモジュール読み込みパスを調査してください。影響を受ける PowerShell バージョンで PSScriptAnalyzer 1.24.0 のインポートが正常に完了し、期待されるコマンドがエクスポートされれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- powershell
- 領域
- tooling
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 38/100