在路径中使用命名参数和空格从另一个powershell脚本调用一个powershell脚本
我已经检查了这个问题的可能重复项,但我无法用给出的答案解决我的问题 我有一个脚本install.ps1,其中有一个命名参数-setingsfile在路径中使用命名参数和空格从另一个powershell脚本调用一个powershell脚本,powershell,Powershell,我已经检查了这个问题的可能重复项,但我无法用给出的答案解决我的问题 我有一个脚本install.ps1,其中有一个命名参数-setingsfile param( [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string]$settingsFile ) Write-Host "calling $PSCommandPath with settings file
param(
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$settingsFile
)
Write-Host "calling $PSCommandPath with settings file $settingsFile"
If (!(Test-Path $settingsFile)){
Write-Host "cannot load settings[ $settingsFile ], aborting "
exit
}
...
...
我想从另一个powershell脚本调用它,但找不到给定的$settingsFile。
这是调用方脚本
Write-Host "BEGIN-------------------------------------------------------------"
$configFile = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot "..\install-data\settings.json"))
Write-Host ""$configFile""
If (Test-Path $configFile){
Write-Host "config found"
}
else{
Write-Host "config not found"
}
$argument = "-settingsFile=""$configFile"""
Write-Host "$argument"
$installFps = $($PSScriptRoot + "\scripts\install-fps\install-fps.ps1")
Write-Host """$installFps""" $argument
Write-Host "case 1: $installFps $argument"
& $installFps $argument
Write-Host "END-------------------------------------------------------------"
这里是输出
BEGIN-------------------------------------------------------------
C:\Program Files\foo\install-data\settings.json
config found
-settingsFile="C:\Program Files\foo\install-data\settings.json"
"C:\Program Files\foo\install-data\scripts\install-fps\install-fps.ps1" -settingsFile="C:\Program Files\foo\install-data\settings.json"
case 1: C:\Program Files\foo\install-data\scripts\install-fps\install-fps.ps1 -settingsFile="C:\Program Files\foo\install-data\settings.json"
calling C:\Program Files\foo\install-data\scripts\install-fps\install-fps.ps1 with settings file -settingsFile="C:\Program Files\foo\install-data\settings.json"
cannot load settings[ -settingsFile="C:\Program Files\foo\install-data\settings.json" ], aborting
END-------------------------------------------------------------
当我从powershell命令行手动调用脚本时,它可以工作,但当我将它与此脚本一起使用时,它不工作。设置文件确实存在,我可以保证这一点。似乎我的参数没有正确地传输到install.ps1脚本中,因为在我的注销中,我可以看到完整的字符串“-settingsFile=“C:\Program Files\foo\install data\settings.json”将被传输,而不仅仅是文件路径“C:\Program Files\foo\install data\settings.json”“由于路径中可能存在空格,我需要始终添加双引号
我尝试过几种方法,但都不管用 PowerShell已确定您的settingsFile变量的值为'settingsFile=“C:\Program Files\foo\install data\settings.json”“。这是因为等号。它将其视为位置参数,而不是命名参数 尝试用冒号或空格替换等号
$argument = "-settingsFile:""$configFile"""
$argument = "-settingsFile ""$configFile"""
PowerShell已确定settingsFile变量的值为“settingsFile=“C:\Program Files\foo\install data\settings.json”。这是因为等号。它将其视为位置参数,而不是命名参数 尝试用冒号或空格替换等号
$argument = "-settingsFile:""$configFile"""
$argument = "-settingsFile ""$configFile"""
问题在于您输入参数的方式:
$argument = "-settingsFile=""$configFile"""
settingsFile
是一个命名参数,但您在参数名称和值之间包含了一个=
,这是不正确的语法
这导致powershell将其解释为单个字符串-settingsFile=“C:\Program Files\foo\install data\settings.json”
,并将其发送到位置1处的参数
也就是说:
-settingsFile '-settingsFile="C:\Program Files\foo\install-data\settings.json"'
这通过错误消息中出现的参数名称显示:
无法加载设置[-settingsFile=“C:\Program Files\foo\install data\settings.json”],正在中止
很容易修复,请删除=
:
$argument = "-settingsFile ""$configFile"""
问题在于您输入参数的方式:
$argument = "-settingsFile=""$configFile"""
settingsFile
是一个命名参数,但您在参数名称和值之间包含了一个=
,这是不正确的语法
这导致powershell将其解释为单个字符串-settingsFile=“C:\Program Files\foo\install data\settings.json”
,并将其发送到位置1处的参数
也就是说:
-settingsFile '-settingsFile="C:\Program Files\foo\install-data\settings.json"'
这通过错误消息中出现的参数名称显示:
无法加载设置[-settingsFile=“C:\Program Files\foo\install data\settings.json”],正在中止
很容易修复,请删除=
:
$argument = "-settingsFile ""$configFile"""
您可以尝试使用转义引号代替三重引号:
$argument=“-settingsFile=`“$configFile`”
尝试了它,但得到了相同的结果。您可以尝试使用转义引号代替三重引号:$argument=“-settingsFile=`$configFile`”
尝试过,但在相同的结果中解决了问题。如您所说,我对其进行了更改,但仍不起作用。日志输出为:无法加载设置[-settingsFile“C:\Program Files\PaperDynamics\install data\settings.json”],正在中止,因此仍将其解释为一个参数,但现在没有等号。有什么想法吗?不知道在安装fps.ps1中发生了什么,我无法进一步诊断,你能用这个更新你的问题吗?我像你说的那样更改了它,但它仍然不起作用。日志输出为:无法加载设置[-settingsFile“C:\Program Files\PaperDynamics\install data\settings.json”],正在中止,因此仍将其解释为一个参数,但现在没有等号。有什么想法吗?在不知道如何安装fps.ps1的情况下,我无法进一步诊断,你能用这个更新你的问题吗。