Get-Module-ListAvailable: Proč nebo jak jsou moduly, tištěné v oddílech rozdělených podle Adresáře?

0

Otázka

Když jsem si "Get-Module-ListAvailable", powershell bude tisknout 169 moduly. Například:

    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...

Když jsem se zachytit tento v poli: "$m = Get-Module-ListAvailable" Zdá se mi to jako jednoduché pole, ale také otisky v těchto sekcích.

Jak se to dělá?

Tam se zdá být "Adresář" nemovitosti na PSModuleInfo objekty.

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

Nejlepší odpověď

4

Powershell mít vlastní formátování motoru. Kdykoli použijete rutinu, výstupní seznam System.Management.Automation.PSModuleInfo objekty.

Před tiskem objekt "raw", Powershell zkontrolujte, zda je předdefinované formátování k dispozici pro daný typ a pokud ano, platí to. To, co vidíte, je výsledek této transformace.

Až PS 5.1, to bylo provedeno prostřednictvím formátování konfigurační soubor, definovaný jako *.ps1xml soubory. Z PS6.0 a novější, předdefinované formáty jsou nyní obsaženy přímo ve zdrojovém kódu, ale stále můžete vytvořit další soubory formátu podle potřeby.

Můžete zobrazit vložený typ formátu pomocí Get-FormatData rutinu.

Pokud máte zájem v Get-Module rutiny konkrétně, podívejte se na (Get-FormatData -TypeName System.Management.Automation.PSModuleInfo).FormatViewDefinition. Uvidíte něco jako toto:

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

To znamená, že všechny objekty tohoto typu mají zvláštní pokyny pro to, jak by to mělo výstup jeho objekt. V tom případě se to zahrnuje seskupení podle cesty a zobrazení konkrétních sloupců (ModuleType, Verze, Jméno, ExportedCommands). Powershell nevybral k zobrazení těchto vlastností sama o sobě, to dostal své instrukce z předem definovaného typu na co se má zobrazit.

V případě PSModuleInfo typ, můžeme vidět, že tam je 3 vlastní zobrazení pro daný typ. Jeden pro zobrazení tabulky (což je výchozí nastavení na obrázku), jeden pro seznam a široký, což pokyn, co zobrazit při použití Format-List a Format-Wide.

Z MS doc

Formát zobrazení pro objekty, které jsou vráceny pomocí příkazů (rutin, funkce a skripty) jsou definovány pomocí formátování soubory (ve formátu.ps1xml soubory). Některé z těchto souborů jsou poskytována PowerShell definovat formát zobrazení pro ty objekty vrácené PowerShell-za předpokladu, příkazy, jako Systém.Diagnostika.Proces objekt vrácený Dostat-Proces rutiny. Nicméně, můžete také vytvořte si vlastní formátování souborů přepsat výchozí nastavení formáty zobrazení, nebo můžete napsat vlastní formátování souboru definovat zobrazení objektů vrátil o své vlastní příkazy.

PowerShell používá data v těchto formátovacích souborů určit, co zobrazí se a jak se zobrazí data formátována. Zobrazené data mohou zahrnovat vlastnosti objektu nebo hodnoty skriptu.

Můžete si vytvořit své vlastní soubory (*.ps1xml) a zahrnout je do své moduly nebo nahrát je ve vašem relací změnit jak výstup je zobrazen.

Můžete také přidat formátování na výstup funkce definováním výchozí displej nastaven (aka jaké vlastnosti by měly být zobrazeny).

Například, si tuto jednoduchou funkci:


  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
  }

Bez jakékoli výchozí displej nastaven, by získat své standardní výstup všechny uvedené vlastnosti.

enter image description here

S výchozí displej nastaven přidal, tady je nový výstup.

enter image description here

Oba výstupy udělat, obsahuje stejné informace, ale konzole mají speciální formátování je aplikován na to ukázat jen to, co je nejdůležitější, užitečné, atd...

Můžete použít formátování pohledů:

  • Obarvení výstupu
  • Vytvořit stromy
  • Změnit výstup, na základě stavu
  • Přidat virtuální vlastnosti
  • definovat šířku sloupce
  • definovat zobrazené sloupce název
  • atd...

Odkazy:

Formátování Souboru Přehled

4Sysops - Formátování objektu výstup v prostředí Powershell s Formátu.ps1xml soubory

Aktualizace-FormatData

2021-11-24 00:29:40
1

Důvod, že Get-Module ukazuje výsledek ve skupinách je proto, že je výchozí formát pro Module objekty kdykoli PowerShell zobrazí je uživateli. To není specifická vlastnost Get-Module rutiny jako takové.

To je výhodné, zařízení obecně, protože pak můžete použít rutiny prostředí, jako jsou Sort-Object a Where-Object třídit a filtrovat výsledky a pak mít výsledky zobrazeny ve skupinách poté.

V následujícím příkladu, výsledky jsou filtrovány a pak zobrazeny ve skupinách. Význam je, že ani Get-Module ani Where-Object je si vědom, že konečný výsledek bude zobrazen ve skupinách; oni jen jednat s objekty.

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                          ...

Můžete vidět, co PowerShell je na tom v tomto konkrétním případě při pohledu na výchozí formátování kódu pro moduly na GitHub. Příslušné části je GroupByScriptBlock volání (s menšími přeformátování snížit délku čáry):

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)

        ...

Když PowerShell ukazuje řadu objektů modulu pro uživatele pomocí výchozího formátu, to bude spustit skript, blok v GroupByScriptBlock na každý objekt nejprve vypracovat seskupení.

2021-11-23 21:29:07

V jiných jazycích

Tato stránka je v jiných jazycích

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