2009-04-18 101 views
21

Hice una función Powershell justo ahora y la guardé en un archivo ps1. Sin embargo, cuando intento ejecutarlo desde powershell, no se ejecuta.El archivo Powershell ps1 "no se reconoce como un cmdlet, función, programa operable o archivo de script".

he cambiado ya fuiste a la configuración para ejecutar código sin firmar mediante la introducción de este comando:

set-executionpolicy remotesigned 

La función es la siguiente:

Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){ 
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile 
} 

lo que hace es crear un archivo de texto en el que todos la ruta a un cierto archivo está en la lista.
Lo puse directamente bajo c: \ y nombré el archivo listAllPaths, igual que la función.

Cuando entro en el siguiente comando en el interior de Powershell:

PS> listAllPaths.ps1 c:\ *.pdf testingPDF.txt 

me sale un error diciendo:

El término 'listAllPaths.ps1' no se reconoce como un cmdlet, función, programa operable, o archivo de script. Verifique el término e intente de nuevo.

He intentado varias cosas y, sinceramente, ¿no sé cómo hacer que esto funcione? Lo que espero es que se cree un archivo en la ruta dada, c: \ en este ejemplo. Ese archivo tiene el nombre testingPDF.txt y los contenidos son los generados.

¿Puede alguien decirme lo que estoy olvidando aquí?

Y no, Google no responde todo. Intenté ese ya listo. No vendría a preguntar aquí si aún no hubiera probado los motores de búsqueda en línea.

Respuesta

10

Este es un error típico en muchas plataformas donde su ruta de entorno no incluye su directorio actual. por lo tanto, cuando ejecuta su secuencia de comandos (o comando o programa, etc.), su entorno de ejecución se ve en todas partes, excepto en su directorio actual/de trabajo.

Trate

PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt 

EDIT: Después de leer sus comentarios, voy a sugerir que pruebe este. Realmente no he verificado la lógica de tu script PS. Simplemente intento que tu script se ejecute primero.

Intente editar su secuencia de comandos como se indica a continuación, y ejecutar como se indica arriba.

Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){ 
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile 
} 

listAllPaths 
+0

Gracias, pero no funcionó. Entré en ese comando y simplemente salté sobre él. No se informó ningún error, solo una nueva línea en powershell para que ingrese los comandos. – KdgDev

+0

Ok, eso significa que el script ps se está ejecutando en realidad, pero no se devuelve ningún resultado. Intente poner algunas declaraciones impresas para verificar esto. ¿Estás seguro de que no cometiste otro error trivial? Veo que pones tu código en una función, pero ¿realmente estás llamando a la función en tu script? – Chaitan

+0

¿Llamar a la función en mi script? No soy tan experimentado con Powershell, lo que publiqué aquí es el contenido exacto de mi script, ni más ni menos. – KdgDev

7

Podría estar fuera de base aquí, pero es lo que su guión es definir una función, en lugar de ejecutarlo? Quizás necesite "originar" la secuencia de comandos:

. .\listallpaths.ps1 

... de modo que ahora se define su función "listallpaths".

+0

sí, ahora puedo simplemente escribir la función y dar parámetros. Aún así, supongo que me muevo mucho y trabajo con diferentes PC/portátiles. Incluso si todos tienen powershell, tendré que redefinir la función cada vez. Lo que realmente quiero hacer en ese caso es simplemente llamar al archivo ps1 y darle los argumentos para que haga el trabajo. – KdgDev

+0

Matt - estás en el camino correcto ... Acabo de enumerar la modificación en el script para obtener el comportamiento en tiempo de ejecución que WebDevHobo estaba buscando. –

4

Si reemplaza "listallpaths función" con el parámetro y deshacerse de los alrededores {} como esto ..

param([string]$fromFolder, [string]$filter, [string]$printfile) 
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile 

Tendrá un archivo de secuencia de comandos que se puede llamar como sea necesario.

PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt 

Como Matt aludido, al declarar la función, cuando llamó el guión, que crearía la función y luego salir. Un script de PowerShell es básicamente una función almacenada en un archivo (sin los paréntesis que lo rodean ... están implícitos), donde la función en sí misma se almacenaría en la memoria.

+0

+1 - esa parece ser una forma mucho más limpia de hacerlo. –

Cuestiones relacionadas