Подтвердить что ты не робот

Powershell ps1 file "не распознается как командлет, функция, операционная программа или файл script".

Я сделал функцию Powershell только сейчас и сохранил ее в файле ps1. Однако, когда я пытаюсь выполнить его изнутри powershell, он не будет работать.

Я уже изменил настройки для запуска неподписанного кода, введя эту команду:

set-executionpolicy remotesigned

Функция такова:

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

Что он делает, так это создать текстовый файл, в котором перечислены все пути к определенному файлу.
Я поместил его непосредственно в c:\и назвал файл listAllPaths, также как и функцию.

Когда я ввел следующую команду внутри Powershell:

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

Я получаю сообщение об ошибке:

Термин "listAllPaths.ps1" не является признанный как командлет, функция, оперативной программы или файла script. Проверьте этот термин и повторите попытку.

Я пробовал несколько вещей, и я честно не знаю, как заставить это работать? Я ожидаю, что файл будет создан по данному пути, c:\в этом примере. Этот файл имеет имя testingPDF.txt и содержимое, сгенерированное этим.

Может кто-то сказать мне, что я забываю здесь.

И нет, Google не отвечает на все. Пробовал это один уже. Я бы не пришел и не попросил об этом здесь, если бы я не пробовал онлайн-поисковые системы.

4b9b3361

Ответ 1

Это типичная ошибка на многих платформах, где ваш путь к среде не включает ваш текущий каталог. поэтому, когда вы выполняете свой script (или команду или программу и т.д.), среда выполнения выглядит повсюду, кроме текущего/рабочего каталога.

Попробуйте

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

EDIT: Прочитав ваши комментарии, я собираюсь предложить вам попробовать это. Я на самом деле не проверял логику вашего PS script. Я просто пытаюсь сначала выполнить ваш script.

Попробуйте отредактировать свой script, как показано ниже, и выполните, как указано выше.

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

listAllPaths

Ответ 2

Я мог бы отключиться от базы, но разве ваш script определяет функцию, а не выполняет ее? Возможно, вам нужно "указать" script:

. .\listallpaths.ps1

... так что теперь определена ваша функция listallpaths.

Ответ 3

Если вы замените "function listallpaths" параметром и избавитесь от окружающего {}, как это.

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

У вас будет файл script, который вы можете вызвать по мере необходимости.

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

Как упоминал Мэт, объявив эту функцию, когда вы вызвали script, она создала бы эту функцию и вышла бы. PowerShell script - это в основном функция, хранящаяся в файле (без окружающих скобок.. они подразумеваются), где сама функция хранится в памяти.