Как я могу вызвать файл из той же папки, в которой я нахожусь (в сценарии) - PullRequest
15 голосов
/ 22 февраля 2012

Я хотел бы вызвать сценарий B из сценария A без указания полного пути. Я пробовал с

.\scriptb.ps1

но это не работает. Мне действительно нужно указывать весь путь?

(извините за этот довольно простой вопрос, но Google не мог помочь мне!)

Ответы [ 8 ]

16 голосов
/ 20 ноября 2015

Я использую переменную powershell, у которой есть простое имя, чтобы вспомнить, для чего она.

$PSScriptRoot\scriptb.ps1
9 голосов
/ 22 февраля 2012

можно использовать $MyInvocation следующим образом:

$executingScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$scriptPath = Join-Path $executingScriptDirectory "scriptb.ps1"
Invoke-Expression ".\$scriptPath" 
4 голосов
/ 22 февраля 2012

Как насчет этого:

& $pwd\scriptb.ps1
0 голосов
/ 05 марта 2019

В книге Payette Posh in Action говорится, что это работает: ${c:File.txt}

Он описывает это как:

«Вернуть содержимое файла File.txt из текущей рабочей каталог на диске C: ».

Напротив, ${c:\File.txt} говорит,

«Получить файл File.txt из корня диска C:».

Что хорошо для Windows. Я нахожусь на Linux и пытаюсь выяснить, как превратить тот же трюк.

Так рад, что могущество вернулось в мою жизнь.

0 голосов
/ 31 августа 2018

В PS 3 и выше используйте $PSScriptRoot переменную:

& $PSScriptRoot\config.ps1
0 голосов
/ 08 сентября 2016

Я столкнулся с этим вопросом после того, как обнаружил, что выполнение сценария Powershell из командного файла вызвало ошибку «include», например .\config.ps1.

Один из способов заставить это работать:

$configFullPath = "$($pwd)\config.ps1"
Write-Host "Config file full path = $configFullPath"

#force is required just to make sure that module is not used from cache
Import-Module -Force $configFullPath
0 голосов
/ 20 ноября 2015

Внутри вашего основного сценария, сценарий A:

$thisScriptDirectoryPath = Split-Path -parent $MyInvocation.MyCommand.Definition

$utilityScriptName = "ScriptB.ps1"
$utilityScript = (Join-Path $thisScriptDirectoryPath $utilityScriptName)

$result = . $utilityScript "SomeParameter"
0 голосов
/ 22 февраля 2012

. \ - относительный путь.Это относительно того, где вы сейчас находитесь.Например, если вы находитесь в c: \, но вызываете скрипт d: \ 1.ps1, тогда. \ Будет диск c:

Есть еще несколько хитростей.Вы можете изменить свое местоположение из скрипта, используя cd, например,

. \ Будет работать так, как вы хотите, если вы перейдете к месту, где физически находится файл, и запустите его оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...