2009-08-22 8 views
28

Ich verwende Windows 7 RTM. Powershell 2.0 ist standardmäßig installiert. Ich benutze die ausgezeichnete Windows PowerShell ISE, um meine Skripte zu bearbeiten. Ich habe folgendes Skript:Powershell 2.0 Param Schlüsselwortfehler

Param($p) 
Param($d) 
echo $p $d 

Ich speichere das Skript als SayItAgain.ps1. Wenn ich versuche, dieses Skript aus der interaktiven Shell zu laufen wie folgt:

./SayItAgain -p "Hello" 

ich folgende Fehlermeldung empfangen:

The term 'Param' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling o 
f the name, or if a path was included, verify that the path is correct and try again. 
At C:\users\cius\Code\powershell\SayItAgain.ps1:2 char:6 
+ Param <<<< ($destination) 
    + CategoryInfo   : ObjectNotFound: (Param:String) [], CommandNotFoundException 
    + FullyQualifiedErrorId : CommandNotFoundException 

Ist das ein bekanntes Problem oder bin ich benutze es einfach falsch?

+0

, wenn die aus dem cls an der Spitze bemerkte ich frage mich, Der tatsächliche Fehler liegt in einer anderen Zeile des Skripts. Sie sagen, dass Sie ./SayItAgain.ps1 aufrufen, aber der Fehler besagt, dass Sie FindAndCopyFiles.ps1 aufrufen. Gibt es noch mehr Code, den Sie teilen können? Manchmal können Fehler Sie in die falsche Richtung weisen. Der Fehler kann anderswo sein. –

+0

Ah, ich entschuldige mich für die Inkonsistenz. Ich habe SayItAgain als ein einfaches Beispiel erstellt, um das Problem aufzuspüren. Ich habe den falschen Fehler kopiert, den aus dem ursprünglichen Skript. Ich werde das in meinem Nachtrag erklären. –

Antwort

26

Ich habe das Problem gelöst. Ich entschuldige mich für meine unvollständigen und widersprüchlichen Informationen. Ich habe die Beschreibung des Problems korrigiert, um es korrekt zu machen. Ich danke Ihnen für Ihre Hilfe.

Die Ursache des Problems ist, dass ich das Schlüsselwort Param mehrmals falsch verwendet habe. Die korrekte Verwendung ist es, mehrere Parameter innerhalb einer einzigen Param Erklärung wie folgt zu erklären:

Param($p, $d) 

Diese Nutzung wird erklärt in der Windows Powershell-Hilfe-Artikel „about_Functions“.

49

Ist Ihr Parameter ($ p) die erste Zeile in Ihrem Skript? Wenn dies nicht der Fall ist, kann dies den Param-Fehler verursachen. Stellen Sie sicher, dass Ihr Parameter ($ p) die erste Zeile ist.

+1

Dies ist höchstwahrscheinlich das Problem, aber die erste nicht kommentierte Zeile wäre ausreichend. –

+0

Während die akzeptierte Antwort von Jon Ingle sein Problem gelöst hätte. Ich denke, das ist höchstwahrscheinlich das Problem der "Params", mit denen andere Programmierer konfrontiert werden würden, und die genaue Lösung wird gegeben. Danke @David. –

+0

wenn nur die Fehlermeldung das hätte erwähnen können! – rob

1

dieses Skript laufen,

cls 

param([string]$Url, [string]$Template="CMSPUBLISHING#0") 

Write-Host "Url: $Url" 

ich den gleichen Fehler bekam

The term 'param' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Als ich es funktionierte,

#cls 

param([string]$Url, [string]$Template="CMSPUBLISHING#0") 

Write-Host "Url: $Url" 
+5

Es kann nichts anderes als Leerzeichen oder Kommentare vor der Verwendung des Schlüsselworts param geben, weshalb Sie den Fehler erhalten haben. –

Verwandte Themen