PowerShell / PowerShell/PSScriptAnalyzer
Cannot import PSScriptAnalyzer 1.24.0 with PowerShell 7.4.5 or earlier
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- C#
- Estrelas
- 2.2k
- Forks
- 415
- Merge médio
- 13h 1min
- PRs com merge (30d)
- 2
Descrição
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.
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Reproduza a falha com o comando Docker fornecido do PowerShell 7.4.5 e compare-a com o PowerShell 7.4.6+ e o PSScriptAnalyzer 1.23.0. Comece na linha 34 de PSScriptAnalyzer.psm1 e inspecione o caminho de carregamento do módulo em torno da referência ao assembly System.Management.Automation. A tarefa estará concluída quando o PSScriptAnalyzer 1.24.0 for importado com sucesso nas versões afetadas do PowerShell e exportar os comandos esperados.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- powershell
- Domínio
- tooling
- Tipo de issue
- Bug
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 38/100