Powershell 本地目录中的测试路径

Powershell 本地目录中的测试路径,powershell,Powershell,考虑以下简单的路径验证: if ((Test-Path $_) -and ($_ -like "*.msi")) { $true } else { Throw "Specify correct path to installer." } 当传递路径(例如“C:\Scripts\installer.msi”时,验证将按预期工作 但是当在与安装程序相同的目录中执行时,将此参数作为路径传递:\installer.msi 验证仍然是True,但会中断安装程序 如何修

考虑以下简单的路径验证:

if ((Test-Path $_) -and ($_ -like "*.msi")) {
    $true
    }

else {
    Throw "Specify correct path to installer." 
    }
当传递路径(例如
“C:\Scripts\installer.msi”
时,验证将按预期工作

但是当在与安装程序相同的目录中执行时,将此参数作为路径传递:
\installer.msi

验证仍然是
True
,但会中断安装程序


如何修复此问题?

假设您正在使用msiexec.exe运行此安装程序,则必须传递该msi文件的完整路径才能使其正常工作

因此,您可能会这样调用msiexec:

msiexec /i $_
当你真的需要这样做的时候:

msiexec /i "$((Get-Item $_).FullName)"

你可能还想调查这个问题。它使在PowerShell中使用msi文件变得更好。

假设您正在使用msiexec.exe运行此安装程序,则必须传递该msi文件的完整路径才能使其工作

因此,您可能会这样调用msiexec:

msiexec /i $_
当你真的需要这样做的时候:

msiexec /i "$((Get-Item $_).FullName)"

你可能还想调查这个问题。在PowerShell中使用msi文件会更好。

什么叫“破坏安装程序”?除非您在某个地方更改工作目录,否则无论您指定MSI的绝对路径还是相对路径都无关紧要。它是如何破坏安装程序的?您是否隐藏了一些试图以某种方式执行安装程序的代码?如果在.\Installer.msi上返回true,则脚本的工作方式与您的完全相同。什么是“中断安装程序”?除非您在某个地方更改工作目录,否则无论您指定MSI的绝对路径还是相对路径都无关紧要。它是如何破坏安装程序的?您是否隐藏了一些试图以某种方式执行安装程序的代码?如果在.\Installer.msi上返回true,则脚本的工作方式与您的完全相同。