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

Я только что сделал функцию 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 термин '.пс1 не распознано как командлет, функция, выполняемая программа или файл сценария. Проверьте термин и повторите попытку.

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

может кто-нибудь сказать мне, что я забыл здесь.

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

3 ответов


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

попробовать

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

изменить: После прочтения ваших комментариев, я собираюсь предложить вам попробовать это. Я на самом деле не проверил логику вашего скрипта ПС. Я просто пытаюсь заставить твой сценарий исполниться. первый.

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

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

listAllPaths

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

. .\listallpaths.ps1

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


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

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

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

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

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