Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在路径中使用命名参数和空格从另一个powershell脚本调用一个powershell脚本_Powershell - Fatal编程技术网

在路径中使用命名参数和空格从另一个powershell脚本调用一个powershell脚本

在路径中使用命名参数和空格从另一个powershell脚本调用一个powershell脚本,powershell,Powershell,我已经检查了这个问题的可能重复项,但我无法用给出的答案解决我的问题 我有一个脚本install.ps1,其中有一个命名参数-setingsfile param( [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string]$settingsFile ) Write-Host "calling $PSCommandPath with settings file

我已经检查了这个问题的可能重复项,但我无法用给出的答案解决我的问题

我有一个脚本install.ps1,其中有一个命名参数-setingsfile

    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的情况下,我无法进一步诊断,你能用这个更新你的问题吗。