得到模块-ListAvailable:为什么或如何都是模块印在部分通过的目录?

0

的问题

当我做的"模块-ListAvailable"文将印169模块。 例如:

    Directory: C:\Program Files (x86)\Microsoft SQL Server\150\Tools\PowerShell\Modules


ModuleType Version    Name                                ExportedCommands                                                               
---------- -------    ----                                ----------------                                                               
Manifest   15.0       SQLPS                               {Backup-SqlDatabase, Save-SqlMigrationReport, Invoke-PolicyEvaluation, Resto...


    Directory: C:\Users\user\Documents\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands                                                               
---------- -------    ----                                ----------------                                                               
Script     3.0.1      DotNetVersionLister                 Get-STDotNetVersion                                                            
Script     1.4.7      PackageManagement                   {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}         
Script     2.2.5      PowerShellGet                       {Find-Command, Find-DSCResource, Find-Module, Find-RoleCapability...}          
Script     2.2.16     VSSetup                             {Get-VSSetupInstance, Select-VSSetupInstance}                                  


    Directory: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands                                                               
---------- -------    ----                                ----------------                                                               
Script     1.3.1      Configuration                       {Import-Configuration, Export-Configuration, Get-StoragePath, Add-MetadataCo...

当我捕获到这一阵列:"$m=Get-Module-ListAvailable" 它似乎只是一个简单的阵列,但它也将在这些部分。

这是怎么做?

没有,甚至似乎是一个"目录"财产上的PSModuleInfo的对象。

powershell
2021-11-23 19:46:21
2

最好的答案

4

Powershell有其自己的格式发动机。 只要你使用,命令,你输出一个列表中的 System.Management.Automation.PSModuleInfo 对象。

之前印刷的对象"原始"文件检查是否有一个预定的格式提供的类型如果是这样,应用它。 你看到的是结果的转变。

最PS5.1,这样做是通过格式化配置文件,定义如*.ps1xml文件。 从PS6.0和更新的、预定义的格式现在包括直接的源代码,但仍可以创造额外的格式文件作为必要的。

你可以查格式类型的使用 Get-FormatData 令程式.

如果你有兴趣的 Get-Module cmdlet具体地说,检查出来的 (Get-FormatData -TypeName System.Management.Automation.PSModuleInfo).FormatViewDefinition. 你会看到这样的事情:

Name   Control
----   -------
Module System.Management.Automation.TableControl
Module System.Management.Automation.WideControl
Module System.Management.Automation.ListControl

这意味着任何对象的类型具有特别说明关于种方式,它应该输出它的对象。 在这种情况下,它包括分组通过的道路并显示具体列(ModuleType,版本,名称、ExportedCommands). Powershell没有选择了显示这些属性本身,它得到了它的指示从预定什么类型来显示。

在这种情况下的 PSModuleInfo 类型,我们可以看到,有3个自定义的意见的类型。 一个表中查(这是默认所示),一个列表,其中指示该怎么表演的时候你使用 Format-List & Format-Wide.

从MS医生

这显示格式的目的是返回的命令 (cmdlet、职能和脚本)的定义是通过使用格式化 文件(格式。ps1xml文件)。 几个这些文件的提供 PowerShell定义的显示格式为那些返回的对象,通过 PowerShell提供的命令,例如系统。诊断。过程 对返回的通过得到处理指令程式. 但是,你也可以 创建你自己定格式文件复盖默认 显示格式或者你可以写一个定格式文件的定义 显示返回的对象通过自己的命令。

PowerShell使用的数据在这些格式的文件,确定什么 显示和如何显示的数据格式化。 显示的 数据可以包括对象的属性或价值的一个脚本。

你可以创建自己的文件(*。ps1xml),包括他们在自己的模块或装载它们在你的会议,以修改方式的输出显示。

你还可以添加格式的输出功能的定义显示默认设置(又名是什么性质应该显示)。

例如,采取这一简单的功能:


  Function Get-EmployeesInfos() {
    $Output = @(
        
        [PSCustomObject]@{
            FirstName            = 'RObert'
            LastName             = 'Samson'
            SocialSecurityNumber = '123 344 555'
            Age                  = '32'
            Salary               = '100000'
        },
        
        [PSCustomObject]@{
            FirstName            = 'Pablo'
            LastName             = 'Morrison'
            SocialSecurityNumber = '123 345 555'
            Age                  = '22'
            Salary               = '10000'
        }


    )
    
    # Default display set
    $defaultDisplaySet = 'FirstName', 'LastName'
    $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet', [string[]]$defaultDisplaySet)
    $Output | Add-Member MemberSet PSStandardMembers ([System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet)) -Force
    return $Output


    return $Output
  }

没有任何显示默认设定,你会得到你的标准输出的所有性质列出。

enter image description here

与显示默认设定加,这是新的输出。

enter image description here

这两种产出做的就包含相同的信息,但是控制台有一个特殊的格式应用于它只显示了什么是最重要、有用,等等。

你可以使用格式的意见:

  • 上色输出
  • 创建树
  • 输出变化的基础条件
  • 添加虚拟的性质
  • 定义列宽度
  • 定义显示列标题
  • 等等...

参考文献:

格式文件,概述

4Sysops-格式对象出在使用的格式。ps1xml文件

更新FormatData

2021-11-24 00:29:40
1

的原因 Get-Module 是表示的结果 团体 是因为这是默认的格式 Module 对象,每当PowerShell显示了他们的用户。 它不是一个具体的特征 Get-Module cmdlet如此。

这是便利设施的一般因为你可以再使用的cmdlet如 Sort-ObjectWhere-Object 排序和过滤器的结果和随后有结果所示的团体之后。

在下面的例子,结果是过滤后所示的团体。 的重要意义的是,既没有 Get-Module 也不 Where-Object 知道最终的结果将显示在组;他们只是处理对象。

PS> Get-Module -ListAvailable | Where-Object Name -Match Read

    Directory: C:\program files\powershell\7\Modules

ModuleType Version    PreRelease Name
---------- -------    ---------- ----
Script     2.1.0                 PSReadLine                          ...
Binary     2.0.3                 ThreadJob                           ...

    Directory: C:\Program Files\WindowsPowerShell\Modules

ModuleType Version    PreRelease Name
---------- -------    ---------- ----
Script     2.0.0      beta2      PSReadline                          ...

你可以看到什么directory域服务对象(或属在这一特定情况下由看 默认格式码,用于模块 在想. 有关的部分是 GroupByScriptBlock 呼吁(与微小的重新格式化,以减少线路长度):

yield return new FormatViewDefinition("Module",
    TableControl.Create()
        .GroupByScriptBlock(@"
            Split-Path -Parent $_.Path | ForEach-Object {
                if([Version]::TryParse((Split-Path $_ -Leaf), [ref]$null)) {
                    Split-Path -Parent $_
                } else {
                    $_
                }
            } | Split-Path -Parent", customControl: sharedControls[0])
        .AddHeader(Alignment.Left, width: 10)

        ...

当PowerShell显示了一系列模块的对象用户使用的默认格式,它将运行该脚本块 GroupByScriptBlock 在每个对象的第一个工作分组。

2021-11-23 21:29:07

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................