【问题标题】:Install an .MSI file from the same directory as the powershell script without setting a static file path从与 powershell 脚本相同的目录安装 .MSI 文件,而不设置静态文件路径
【发布时间】:2020-04-06 17:49:35
【问题描述】:

我有一个我们在 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 正在查找,无论我是否告诉它打开脚本。如果是这种情况,我如何告诉它查看脚本所在的位置以便它可以找到它需要的文件?

【问题讨论】:

    标签: powershell installation windows-installer


    【解决方案1】:

    我在下面找到的答案是我如何让它适应我们目前的情况。谢谢托马斯的帮助!

    $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
    

    【讨论】:

    • 这在某些情况下可能有效。它会失败,在你的脚本被重命名之后,或者如果它没有存储在C:\Users 下的某个地方,或者如果有多个文件名为Untitled2.ps1。总之相当危险。我已针对您的问题更新了答案,您可能更喜欢这种方式。
    【解决方案2】:

    定义一个相对路径:

    $Install = ".\File.msi"
    

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

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

    【讨论】:

    • 我已经尝试过了,但我收到一个错误,提示找不到文件。
    • 我更新了我对这个案例的回答,你正在任何你想要的工作目录中运行你的脚本。
    • 哦,好吧,这样做更有意义,我们的问题是我们有一个服务台团队必须使用不同的凭据以管理员身份打开 powershell ISE,因此 Powershell 默认为 C: \WIndows\System32 这就是我之前收到错误的原因。我会尝试这种方式并报告我的发现!谢谢!
    【解决方案3】:

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

    # 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
    

    【讨论】:

      猜你喜欢
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      相关资源
      最近更新 更多