pondělí 11. ledna 2010

Hrátky s parametry

[EN: Autotranslation]

Dnes jsem si hrál s modulem PSRemoteRegistry od Shaye Levyho. Testoval jsem různé parametry a napadlo mě, vypsat si tabulku, kde v řádkách budou vylistované funkce a ve sloupcích jednotlivé parametry. Vznikl mi následující výtvor:



Poté mě napadlo udělat malou statistiku pro standardní cmdlety. Nevím, jestli je to užitečné, ale já jsem se při tvorbě skriptu i výsledků dobře bavil :)

  • Počet cmdletů v modulech Microsoft.*: 236
  • Počet parametrů použitých v těchto cmdletech: 449
  • Počet kombinací cmdlet/parametr: 3491
  • Parametry, které jsou dostupné pro každý cmdlet: Zde určitě nikoho nepřekvapí (pokud ano, Get-Help about_CommonParameters je váš přítel pro následujících 10 minut :), že jsou to takzvané Common Parameters: Verbose, Debug, WarningAction, WarningVariable, ErrorAction, ErrorVariable, OutVariable, OutBuffer. Vyskytují se - ano, hádáte správně - 236x.
  • Další v pořadí jsou: Confirm, WhatIf (85), Force (68), Name (67), InputObject, Credential (54), Path (52). Ostatní parametry se vyskytují méně než 50x.
  • Parametrů, které se vyskytují pouze u jednoho cmdletu je 270.
  • Cmdlet s největším počtem parametrů: New-ModuleManifest (38)
  • Další v pořadí: Invoke-Command (28), New-PSSessionOption (28), Get-WSManInstance (28), Get-WmiObject (26), Set-WmiInstance, Invoke-WmiMethod (25).
  • Nejméně parametrů: Get-Culture, Get-Transaction, Get-Host, Get-PSCallStack, Get-UICulture, Exit-PSSession, Stop-Transcript, Get-WSManCredSSP (8).
Určitě bych mohl pokračovat dále, ale myslím, že tohle pro přehled stačí. Pokud chcete dělat vlastní výzkumy, zde je kód:




  1. function Get-CommandParameter {   

  2.   

  3.     param (   

  4.         [Parameter(   

  5.             ValueFromPipeline=$true,   

  6.             ValueFromPipelineByPropertyName=$true  

  7.         )]         

  8.         [string[]]$Name=""  

  9.     )   

  10.        

  11.     PROCESS {   

  12.            

  13.         foreach ($c in $Name) {   

  14.   

  15.             # receive all parameters   

  16.             $cParams = (Get-Command $c).Parameters.Keys   

  17.                

  18.             # process every parameter and create object   

  19.             foreach ($p in $cParams) {   

  20.            

  21.                 $psObj = New-Object PSObject -Property @{   

  22.                     Command=$c  

  23.                     Parameter=$p  

  24.                 } # psObj        

  25.                    

  26.                 $psObj         

  27.             } # foreach $p   

  28.         } # foreach $c     

  29.     } # PROCESS   

  30. # function Get-CommandParameter  


Použití je poté následující:
PS C:\> $a = Get-Command -CommandType cmdlet Get-CommandParameter
PS C:\> $a.Count
3491

Žádné komentáře: