2009-04-18 34 views
21

Ho creato una funzione PowerShell proprio ora e l'ho salvata su un file ps1. Tuttavia, quando provo ad eseguirlo da PowerShell, non verrà eseguito.Il file Powershell ps1 "non è riconosciuto come cmdlet, funzione, programma eseguibile o file di script."

ho giá cambiato le impostazioni per l'esecuzione di codice non firmato inserendo questo comando:

set-executionpolicy remotesigned 

La funzione è questo:

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

ciò che fa è creare un file di testo in cui tutti i percorsi di un certo file sono elencati.
L'ho messo direttamente in c: \ e ho chiamato il file listAllPaths, uguale alla funzione.

Quando entro il seguente comando all'interno PowerShell:

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

ottengo un errore che dice:

Il termine 'listAllPaths.ps1' non è riconosciuto come un cmdlet, una funzione, programma eseguibile o file di script. Verifica il termine e riprova.

Ho provato diverse cose e sinceramente non so come farlo funzionare? Quello che mi aspetto è che un file venga creato sul percorso specificato, c: \ in questo esempio. Quel file ha il nome testingPDF.txt e il contenuto è il generato.

Qualcuno può dirmi cosa sto dimenticando qui.

E no, Google non risponde a tutto. Ho provato quello già. Non verrei a chiederlo qui se non avessi già provato i motori di ricerca online.

risposta

10

Si tratta di un errore tipico su molte piattaforme in cui il percorso dell'ambiente non include la directory corrente. così quando esegui lo script (o il comando o il programma, ecc.), il tuo ambiente di runtime appare ovunque tranne la tua directory corrente/di lavoro.

Prova

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

EDIT: Dopo aver letto i vostri commenti, ho intenzione di suggerire di provare questo. Non ho effettivamente verificato la logica del tuo script PS. Sto solo cercando di far eseguire il tuo script prima.

Prova a modificare lo script come indicato di seguito ed esegui come sopra.

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

listAllPaths 
+0

Grazie, ma non ha funzionato. Ho inserito questo comando e l'ho appena superato. Nessun errore segnalato, solo una nuova riga in PowerShell per me per immettere i comandi su. – KdgDev

+0

Ok, quindi significa che lo script ps è in realtà in esecuzione, ma non viene restituito alcun output. Prova a inserire alcune dichiarazioni di stampa per verificarlo. Sei sicuro di non aver fatto un altro errore banale? Vedo che hai inserito il tuo codice in una funzione, ma stai effettivamente chiamando la funzione nel tuo script? – Chaitan

+0

Chiamando la funzione nel mio script? Non sono così esperto di Powershell, quello che ho postato qui è il contenuto esatto del mio script, né più né meno. – KdgDev

7

potrei essere fuori base qui, ma è che lo script è definire una funzione, invece di eseguirlo? Forse è necessario "dare origine" allo script:

. .\listallpaths.ps1 

... in modo che ora la funzione "listallpaths" sia definita.

+0

sì, ora posso semplicemente digitare la funzione e fornire i parametri. Tuttavia, suppongo che mi muovo molto e lavori con PC/laptop diversi. Anche se tutti hanno PowerShell, dovrei ridefinire la funzione ogni volta. Quello che voglio veramente fare in questo caso è chiamare il file ps1 e dargli gli argomenti e farlo funzionare. – KdgDev

+0

Matt: sei sulla strada giusta .. Ho appena elencato la modifica allo script per ottenere il comportamento di runtime che WebDevHobo cercava. –

4

Se si sostituisce "listallpaths funzione" con param e sbarazzarsi del circostante {} come questo ..

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

Si avrà un file di script che è possibile chiamare come richiesto.

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

Come Matt alluso, dichiarando la funzione, quando hai chiamato lo script, si creerebbe la funzione e quindi uscire. Uno script PowerShell è fondamentalmente una funzione memorizzata in un file (senza le parentesi intorno ... sono implicite), dove la funzione stessa verrebbe archiviata in memoria.

+0

+1: sembra essere un modo molto più pulito per farlo. –

Problemi correlati