2009-08-14 5 views
2

Quelqu'un connaît-il un script ou un utilitaire Windows PowerShell, ou un utilitaire tiers, codeplex, script poshcode, application, etc qui peut lire et analyser un script PowerShell et détailler ce qui snappe, fournisseurs, assemblées, applets de commande, fonctions, etc, etc., le script doit être exécuté.Script Powershell qui extrait des medadata du script powershell

Merci. Bob.

Répondre

2

Commençons par le commencement: Non, je ne connais pas un tel script/utilitaire. Je soupçonne, cependant, que vous pouvez aller assez loin avec les capacités de Powershell d'analyse lui-même.

Par exemple, le script suivant:

function test {} 

test 

$content = gc $args[0] 
[System.Management.Automation.PsParser]::Tokenize($content, [ref] $null) | 
    ? { $_.Type -eq "Command" } | ft 

lui-même donné comme argument donne le résultat suivant:

 
Content     Type   Start   Length  StartLine StartColumn  EndLine  EndColumn 
-------     ----   -----   ------  --------- -----------  -------  --------- 
test     Command    20    4    3    1    3    5 
gc     Command    39    2    5    12    5    14 
?      Command   127    1    6    76    6    77 
ft     Command   157    2    6   106    6   108 

Ainsi, le type "Commande" comprend au moins les fonctions et les applets de commande. Vous pouvez disséquer davantage ceci en ne dénaturant pas ces jetons.

Cela peut probablement vous dire un peu déjà mais vient nulle part près de votre liste assez exhaustive de ce que les scripts Powershell pourraient exiger.

Mais au moins dans le cas de snap-ins ou de modules, vous avez probablement besoin d'un peu de magie pour savoir exactement ce qui est manquant.

+0

Le pspaser tokenizer. J'avais oublié ça. –

0

En fait, nous faisons plusieurs de ces services:

http://scriptcop.start-automating.com - Analyse statique en ligne/téléchargement gratuit de scripts PowerShell http://scriptcoverage.startautomating.com/ - code outil de couverture pour Powershell Scripts

Il y a aussi un outil dans le module ShowUI (Get-ReferencedCommand) qui fait exactement ce que vous voulez. Il regarde chaque commande utilisée dans une commande, et chaque commande qu'ils utilisent, pour produire une liste de toutes les commandes que vous devez inclure.

Vous l'utilisez comme: Get-ReferenedCommand -ScriptBlock { Start-MyCommand }

Hope this helps