2017-10-04 2 views
0

Ich muss etwas einfach hier fehlen.PowerShell GetHelp nur Dateiname der script.ps1-Datei zurück

Ich habe einige Hilfe Kommentare in einer meiner Funktionen in meiner ps1-Datei implementiert:

<# 
.SYNOPSIS 
Adds a file name extension to a supplied name. 

.DESCRIPTION 
Adds a file name extension to a supplied name. 
Takes any strings for the file name or extension. 

.PARAMETER Name 
Specifies the file name. 

.PARAMETER Extension 
Specifies the extension. "Txt" is the default. 

.INPUTS 
None. You cannot pipe objects to Add-Extension. 

.OUTPUTS 
System.String. Add-Extension returns a string with the extension or file name. 

.EXAMPLE 
C:\PS> extension -name "File" 
File.txt 

#> 

Wenn ich ausführen, um die Get-Help „Name Funktion“ direkt nach der Funktion und die ps1-Skript über Powershell-Fenster ausführen Ich bekomme die richtige Antwort.

Nun, ich bin mit dem Code von hier: http://ben.neise.co.uk/scriptdocumentationinmarkdown/

Das ist wohl etwas Abschriften Dokumentation der Hilfe Kommentare in meinen Skript-Dateien zu generieren. Beim Ausführen bekomme ich den Fehler:

(GenerateScriptDocumentationInMarkdown ist der Funktionsname).

Die Linie es Fehler ist die Linie, wo ich die Funktion mit einigen Dateipfade nennen:

GenerateScriptDocumentationInMarkdown -SourceScriptFolder "C:\****\testScripts" -DocumentationOutputFolder "C:\****\GeneratingMarkdownFileTest" -DocumentationIndexPath "C:\****\GeneratingMarkdownFileTest\scripts_Ps1.markdown" 

Was bedeutet die ‚Inline-Hilfe nicht für Skript gefunden‘, Fehler?

EDIT

Hier ist, wo es im Skript fehlschlägt:

$help = Get-Help $script.FullName -ErrorAction "SilentlyContinue"  
     if ($help.getType().Name -eq "String"){ 
      # If there's no inline help in the script then Get-Help returns a string 
      Write-Error -Message "Inline help not found for script $($script.FullName)" 
     } else { 

Hinweis die Bedingung geprüft wird, ob die .Name vom Typ String ist. Sieht für mich so aus, dass die Get-Hilfe meines Skripts nicht zurückgibt, was es erwartet.

Ich würde erwarten, dass die 'get-help {pathtofile.ps1}' alle Kommentare in der Skriptdatei zurückgeben würde, aber alles, was es zurückgibt, ist der Name des Skripts?

+0

Leider @BaconBits i hinzufügen, vergessen, wo sie versagt. Ich habe einen neuen Kommentar hinzugefügt. Es sieht so aus, als ob die get-help nicht die erwarteten Ergebnisse zurückgibt und nur den Namen der Skriptdateien zurückgibt. Irgendwelche Ideen ? – thatOneGuy

+0

Warte, du hast Hilfe in * einer der Funktionen * in einer Datei implementiert? Die Hilfe, die Sie versuchen, ist nicht Inline-Hilfe für ein Scriptlet? 'Get-Help' gibt nur Hilfe für das Element der obersten Ebene zurück. Sie müßten die Funktionsdefinition laden und dann 'Get-Help {Funktionsname}' ausführen, und das Skript, das Sie verwenden, ist nicht dafür gebaut. –

+0

@BaconBits danke für die Hilfe, es geschafft zu lösen. Siehe Antwort unten :) – thatOneGuy

Antwort

0

Ich habe es herausgefunden dank @Bacon Bits.

Da die Kommentare in den Funktionen waren, habe ich falsch interpretiert, was die generate-Funktion tut. Was ich tun musste, war, die Funktionen innerhalb der Skriptdatei durchzulaufen und dann die Logik der Funktionen und nicht die ganze Datei auszuführen.

So in dieser Datei nur die Funktionen zu erhalten:

$currentFunctions = Get-ChildItem function: 
     # dot source your script to load it to the current runspace 
     . $script.FullName 
     $scriptFunctions = Get-ChildItem function: | Where-Object { $currentFunctions -notcontains $_ } 

     $scriptFunctions | ForEach-Object { 
       & $_.ScriptBlock 
     } 

Dann Schleife durch und die Logik wie so laufen:

$scriptFunctions | ForEach-Object { 

     $fullName = $_.Name 
     $help = Get-Help $fullName -ErrorAction "SilentlyContinue" 
. 
. 
. 
Verwandte Themen