PowerShell 2.0 y "El término 'Param' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa operable"

Estoy ejecutando Windows 7 RTM. PowerShell 2.0 está instalado de forma predeterminada. Estoy usando el excelente Windows ISE de PowerShell para editar mis guiones. Tengo el siguiente script:

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

Guardo el script como SayItAgain.ps1. Cuando intento ejecutar este script desde el shell interactivo así:

./SayItAgain -p "Hello"

Recibo el siguiente error:

El término 'Param' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa operable. Verifique la ortografía del nombre, o si se incluyó una ruta, verifique que la ruta sea correcta y vuelva a intentarlo.

At C:\users\cius\Code\powershell\SayItAgain.ps1:2 char:6
+ Param <<<< ($destination)
    + CategoryInfo          : ObjectNotFound: (Param:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

¿Es este un problema conocido o simplemente lo estoy usando mal?

preguntado el 22 de agosto de 09 a las 01:08

Me pregunto si el error real está en una línea diferente del script. Dice que está llamando ./SayItAgain.ps1 pero el error dice que está llamando a FindAndCopyFiles.ps1. ¿Hay más código que puedas compartir? A veces, los errores pueden apuntar en la dirección equivocada. El error puede estar en otra parte. -

Ah, me disculpo por la inconsistencia. Creé SayItAgain como un ejemplo simple para rastrear el problema. Copié el error equivocado, el del guión original. Explicaré esto en mi apéndice. -

4 Respuestas

Si param($p) no es la primera línea en su secuencia de comandos que puede causar el error Param.

Asegúrate de que tu param($p) es la primera línea.

Respondido 21 ago 18, 15:08

Lo más probable es que este sea el problema, pero la primera línea no comentada sería suficiente. - Keith Hill

Mientras que la respuesta aceptada por Jon Ingle habría resuelto su problema. Creo que es muy probable que este sea el problema de los 'parámetros' que otros programadores habrían enfrentado y que se haya proporcionado la solución exacta. Gracias @David. - naveen vijay

¡Si tan solo el mensaje de error pudiera haber mencionado esto! - robar

Todavía me sorprende que "debe ser la primera línea del archivo" es una solución de referencia que persiste en los nuevos idiomas. Dado que solo puede haber una única "primera línea", parece un truco. - aaaaaa

He resuelto el problema. He corregido la descripción del problema para que sea precisa.

La fuente del problema es que estaba usando incorrectamente la palabra clave Param varias veces. El uso correcto es declarar múltiples parámetros dentro de una sola declaración de Param como la siguiente:

Param($p, $d)

Este uso se explica en el artículo de la Ayuda de Windows PowerShell "about_Functions".

Respondido el 19 de junio de 19 a las 01:06

Ejecutando este script,

cls

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

Write-Host "Url: $Url"  

Tengo el mismo error

El término 'param' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa operable. Verifique la ortografía del nombre, o si se incluyó una ruta, verifique que la ruta sea correcta y vuelva a intentarlo.

Cuando comenté el cls en la parte superior funcionó,

#cls 

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

Write-Host "Url: $Url"

contestado el 10 de mayo de 11 a las 23:05

No puede haber nada más que espacios en blanco o comentarios antes del uso de la palabra clave param, razón por la cual recibió el error. - tim roberts

También tuve este "tipo" de problema, pero no pude ejecutar ninguno de mis scripts de ps1. Solución: cambie la codificación de UTF-8 (o que tienes) para ANSI. Quizás también ayude a alguien.

Respondido el 09 de Septiembre de 19 a las 20:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.