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-это в основном функция, хранящаяся в файле (без окружающих фигурных скобок.. они подразумеваются), где сама функция будет храниться в память.