Установите MSI-файл из той же директории, что и скрипт powershell, без указания пути к файлу stati c. - PullRequest
1 голос
/ 06 апреля 2020

У меня есть скрипт, который мы используем, который находится в Powershell, однако мне нужен этот скрипт, чтобы он мог динамически находить файлы, необходимые для установки приложения, поскольку пользователи могут копировать папку в любую папку на своем компьютере. В настоящее время у меня есть код ниже, я думаю, мой вопрос, если сценарий находится в той же папке, что и файлы установки. Как мне сказать powershell просто посмотреть в каталоге, из которого он запускается, для установочных файлов?

$Install = "C:\Other Folder\File.msi"
$InstallArg = "/quite /norestart"
     Start-Process '
     -FilePath $Install '
     -ArgumentList $InstallArg '
     -PassThru | Wait-Process

Любая помощь будет принята с благодарностью. Спасибо.

Обновление, я обнаружил, что должен находиться в каталоге, в котором находится скрипт. Однако, поскольку мы должны запустить ISE с учетными данными администратора, он автоматически по умолчанию принимает значение C: \ Windows \ System32 в качестве Каталог PowerShell ищет независимо от того, скажу ли я ему открыть скрипт. Если это так, как я могу сказать ему посмотреть, где находится скрипт, чтобы он мог найти нужные ему файлы?

Ответы [ 3 ]

0 голосов
/ 06 апреля 2020

Я нашел свой ответ ниже, как я получил его для работы с нашей текущей ситуацией. Спасибо Томас за помощь!

$ScriptLocation = Get-ChildItem -Path C:\Users -Filter Untitled2.ps1 -Recurse | Select Directory
cd $ScriptLocation.Directory
$Install = ".\Install.msi"
$InstallArg = "/quite /norestart"
Start-Process '
-FilePath $Install '
-ArgumentList $InstallArg '
-PassThru | Wait-Process
0 голосов
/ 13 апреля 2020

Большое спасибо за вашу помощь всем! Я случайно наткнулся на идеальное решение.

# Set active path to script-location:
$path = $MyInvocation.MyCommand.Path
if (!$path) {
    $path = $psISE.CurrentFile.Fullpath
}
if ($path) {
    $path = Split-Path $path -Parent
}
Set-Location $path
0 голосов
/ 06 апреля 2020

Определите относительный путь:

$Install = ".\File.msi"

Если вы не запускаете сценарий в каталоге, где хранится сам сценарий и исполняемый файл, вам придется определить абсолютный путь к нему. С PowerShell 3+ вы можете легко определить каталог, в котором хранится ваш скрипт, используя переменную $PSScriptRoot. Вы можете определить вашу $Install переменную следующим образом:

$Install = Join-Path -Path $PSScriptRoot -ChildPath "File.msi"
...