在不设置静态文件路径的情况下,从与powershell脚本相同的目录中安装.MSI文件



我有一个在Powershell中使用的脚本,但我需要该脚本能够找到动态安装应用程序所需的文件,因为用户可以将文件夹复制到计算机上的任何文件夹。目前我有下面的代码集,我想我的问题是,如果脚本和安装文件在同一个文件夹中。如何告诉powershell只在运行它的目录中查找安装文件?

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

如有任何帮助,我们将不胜感激。非常感谢。

更新,我发现我必须在脚本所在的目录中。然而,由于我们必须使用管理员凭据运行ISE,它自动默认为C:\Windows\System32,因为powershell正在查找目录,无论我是否告诉它打开脚本。如果是这种情况,我如何告诉它查看脚本所在的位置,以便它能够找到所需的文件?

我在下面找到了我的答案,那就是我是如何处理我们当前的情况的。谢谢托马斯的帮助!

$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

定义一个相对路径:

$Install = ".File.msi"

如果您没有在存储脚本本身和可执行文件的目录中运行脚本,则必须确定脚本的绝对路径。使用PowerShell 3+,您可以使用$PSScriptRoot变量轻松确定存储脚本的目录。您可以这样定义$Install变量:

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

非常感谢大家的帮助!我偶然发现了一个完美的解决方案。

# 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

相关内容

  • 没有找到相关文章

最新更新