Získajte-Modul -ListAvailable: Prečo a ako sú moduly vytlačené v bodoch rozdelený do Adresára?

0

Otázka

Keď som si "Get-Modul -ListAvailable", powershell bude tlač 169 modules. Naprí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...

Keď som sa zachytiť toto v poli: "$m = Get-Modul -ListAvailable" Zdá sa, ako len jednoduchý rad, ale to tiež tlačí v týchto sekciách.

Ako to urobiť?

Tam nie je ani zdajú byť "Adresár" nehnuteľnosti na PSModuleInfo objekty.

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

Najlepšiu odpoveď

4

Powershell mať vlastné formátovanie motora. Vždy, keď použijete že cmdlet, budete výstup zoznamu System.Management.Automation.PSModuleInfo objekty.

Pred tlačou objektu "raw", Powershell skontrolujte, či je preddefinované formátovanie k dispozícii pre typ a ak áno, použite ju. To, čo vidíte, je výsledok toho, že transformácia.

Až do PS 5.1, bolo to cez formátovanie konfiguračných súborov, definovaná ako *.ps1xml súbory. Z PS6.0 a novšie, preddefinované formáty sú teraz zahrnuté priamo v zdrojovom kóde, ale stále môžete vytvoriť ďalšie súbory formátu, ako je potrebné.

Môžete si pozrieť načítaný typ formátu pomocou Get-FormatData cmdlet.

Ak máte záujem o v Get-Module cmdlet špeciálne, pozrite sa na (Get-FormatData -TypeName System.Management.Automation.PSModuleInfo).FormatViewDefinition. Uvidíte niečo ako toto:

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

To znamená, že každá objekty tohto typu majú špeciálne pokyny týkajúce sa spôsobom, že by to malo výstup objektu. V tomto prípade ide o zoskupovanie podľa cestu a zobrazovanie jednotlivé stĺpce (ModuleType, Verziu, Názov ExportedCommands). Powershell nemal rozhodli zobrazovať tieto vlastnosti sám o sebe, to dostal jeho pokynov z preddefinovaných typ na čo sa má zobraziť.

V prípade PSModuleInfo typ, môžeme vidieť, že tam je 3 vlastné názory na typ. Jeden pre zobrazenie tabuľky (ktorá je predvolená zobrazené), jeden pre zoznam a široký, ktorý poučí, čo zobraziť pri používaní Format-List & Format-Wide.

Z MS doc

Formát zobrazenia objektov, ktoré sú vrátené príkazy (rutín, funkcie a skripty) sú definované pomocou formátovania súbory (formát.ps1xml súbory). Viaceré z týchto súborov sú poskytované PowerShell na definovanie formátu zobrazenia pre tých objektov, ktoré vráti PowerShell-za predpokladu, príkazy, ako Systém.Diagnostika.Proces objekt vrátil Get-Proces cmdlet. Však, môžete tiež vytvorte si vlastné formátovanie súborov, ak chcete prepísať predvolené formáty zobrazenia alebo môžete napísať vlastné formátovanie súborov, ak chcete definovať zobrazenie objektov vrátené vlastné príkazy.

PowerShell používa údaje v týchto formátovanie súbory určiť, čo na displeji sa zobrazí a ako sa zobrazené údaje je naformátovaný. Zobrazené dáta môžu obsahovať vlastnosti objektu alebo hodnota skriptu.

Môžete vytvoriť svoje vlastné súbory (*.ps1xml) a zahrnúť ich do svojej moduly alebo načítať ich do svojej relácie zmeniť spôsob, akým výstup sa nezobrazí.

Môžete tiež pridať formátovanie výstupu funkcie definovaním predvolené zobrazenie nastavené (aka, aké vlastnosti by mali byť zobrazené).

Napríklad, aby tento jednoduchý funkcia:


  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 predvolené zobrazenie nastavené, ktorý by ste si váš štandardný výstup všetky uvedené vlastnosti.

enter image description here

S predvolené zobrazenie nastavené pridané, tu je nové výstup.

enter image description here

Oba výstupy robiť obsahuje rovnaké informácie, ale konzoly majú špeciálne formátovanie použité na to, aby zobraziť iba to, čo je najdôležitejšie, užitočné, atď...

Môžete použiť formátovanie zobrazenia:

  • Vyfarbenie výstup
  • Vytvoriť stromy
  • Zmeniť výstup na základe stavu
  • Pridať virtuálne vlastnosti
  • definovať šírku stĺpca
  • definovať zobrazí stĺpec názov
  • atď...

Odkazy:

Formátovanie Súbor Prehľad

4Sysops - Formátovanie objektov výstup v Powershell s Formáte.ps1xml súbory

Update-FormatData

2021-11-24 00:29:40
1

Z dôvodu, že Get-Module ukazuje výsledok v skupinách je preto, že je predvolený formát pre Module objekty vždy, keď PowerShell ukazuje im, aby používateľ. To nie je špecifické funkcie Get-Module cmdlet ako také.

To je pohodlné zariadenia vo všeobecnosti, pretože potom môžete pomocou rutiny cmdlet ako Sort-Object a Where-Object zoradiť a filtrovať výsledky a potom sa výsledky sú uvedené v skupinách neskôr.

V nasledujúcom príklade, výsledky sú filtrované a potom zobrazený v skupinách. Význam je, že ani jedna Get-Module ani Where-Object je si vedomý toho, že konečný výsledok sa zobrazí v skupinách; oni len vysporiadať s objektmi.

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 vidieť, čo PowerShell je na tom v tomto konkrétnom prípade pri pohľade na predvolené formátovanie kódu pre moduly na GitHub. Príslušná časť je GroupByScriptBlock hovoru (s drobnými preformátovanie na zníženie dĺžka riadok):

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)

        ...

Keď PowerShell zobrazuje pole modul objekty užívateľa pomocou predvoleného formátu, to bude spustiť skript bloku v GroupByScriptBlock na každý objekt najprv pracovať zoskupenia.

2021-11-23 21:29:07

V iných jazykoch

Táto stránka je v iných jazykoch

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