Пробелы Powershell в пути скрипта - PullRequest
0 голосов
/ 02 июля 2018

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

C:\Users\me\Desktop\BoB : The term 'C:\Users\me\Desktop\BoB' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try 
again.
At line:1 char:1
+ C:\Users\me\Desktop\BoB Tools\folderScannerV0.4.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Users\jteit\Desktop\BoB:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Функция:

function run-scanner { "& 'C:\Users\me\Desktop\BoB Tools\folderScannerV0.4.ps1'" | Invoke-Expression }

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

В идеале мне бы хотелось, чтобы эта функция позволяла мне запускать сценарий для папок, которые мне нужны, без изменения рабочего каталога (каждый сценарий работает с определенным набором файлов, которые находятся в статическом расположении, но некоторые из них используют $ PWD, чтобы получить папки в папке). Например, в моем файле $ profile у меня есть эта функция: function go-to-temp {cd "C:\Users\me\Desktop\Bob Tools\To be Formatted\Temp"}, которую я запускаю, прежде чем выполнить вышеуказанный скрипт. Я бы хотел, чтобы они были объединены в одну команду без изменения рабочего каталога (что сделало бы функцию go-to-temp избыточной.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Нет причин запускать ваш скрипт через Invoke-Expression.

Если ваш сценарий не использует $PWD, вы сможете выполнить его с помощью оператора вызова: &. Как упоминалось в другом постере, вы можете использовать точечный источник (.), если вам нужны переменные, которые генерирует скрипт, , но при этом все глобальные объекты (псевдонимы, переменные, функции) будут импортированы в вашу текущую область, Если действительно полагается на $PWD, вы можете использовать Start-Process с -WorkingDirectory, чтобы избежать изменения своего местоположения.

function Start-Scanner {
    & "$HOME\Desktop\BoB Tools\folderScannerV0.4.ps1"
}

или

function Start-Scanner {
    $startArgs = @{
        FilePath         = "$PSHOME\powershell.exe"
        ArgumentList     = '-File', "`"$HOME\Desktop\BoB Tools\folderScannerV0.4.ps1`""
        WorkingDirectory = "$HOME\Desktop\BoB Tools"
        NoNewWindow      = $true
        Wait             = $true
    }
    Start-Process @startArgs
}
0 голосов
/ 02 июля 2018

Вы можете просто использовать точечный источник для этого:

function run-scanner { . 'C:\Users\me\Desktop\BoB Tools\folderScannerV0.4.ps1' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...