我有一个在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