PowerShell Test-Path不适用于参数参数

时间:2016-11-16 10:18:45

标签: powershell parameters ps1

在我的分析中,为什么我的脚本不起作用,我可以找到一些解决一些基本部分的解决方案(也在Stackoverflow的帮助下),但是仍然存在一个我无法找到解决方案的问题。

当我创建一个临时目录变量$ PARAM_TEMP并使用Test-Path检查时,一切正常(目录是否存在)。但是在下一部分中,当我对arguments-parameter $ PARAM_DESTINATION使用相同的技术时,语句结果是错误的(我已经找到了添加单引号的提示 - 在此之后,至少脚本运行没有错误)。 当我在Windows资源管理器中在控制台中测试我的测试输出时,它会找到目录(因此它肯定存在)

这是我的脚本BeforeInstallationScript2.ps1:

的内容
#
# BeforeInstallationScript2.ps1
#
param(
        [Parameter(
                    Mandatory=$true,
                    Position=0,
                    HelpMessage='Path to targetDir')]
        [string] $PARAM_DESTINATION
)
"1st Argument: $PARAM_DESTINATION"

# create temporary directory if not exists
$PARAM_TEMP=$env:TEMP+"\MyApp"
"temporary Directory: $PARAM_TEMP"
if(!(Test-Path -Path "$PARAM_TEMP" )){
    "temp-dir does NOT exist and will be created"
    New-Item -ItemType directory -Path $PARAM_TEMP
} else {
    "temp-dir exist"
}

# create Timestamp-variable for saving configs  
$a = Get-Date
$DATETIME= "" + $a.Year + $a.Month + $a.Day +  $a.Hour + $a.Minute
"Timestamp: $DATETIME"

# if there exists already a myApp-Installation, copy config-files
"Parameter-Path=: $PARAM_DESTINATION"
"exists? = " + (Test-Path "'$PARAM_DESTINATION'" )
if((Test-Path -Path "'$PARAM_DESTINATION'" )) {
    "param-path exists"

    if((Test-Path -Path "'$PARAM_DESTINATION\configuration\MyApp.conf'" )) {
        "copy file to $PARAM_TEMP\$DATETIME-MyApp.conf"
        Copy-Item "$PARAM_DESTINATION\configuration\MyApp.conf" "$PARAM_TEMP\$DATETIME-MyApp.conf"
    }
} else {
    "not existing, no files to copy/save"
}

我在powershell中的这个脚本得到如下输出:

PS X:\MyApp-Setup> C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -Version 2.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -File ".\BeforeInstallationScript2.ps1" "C:\Program Files (x86)\Internet Explorer"
1st Argument: C:\Program Files (x86)\Internet Explorer
temporary Directory: C:\Users\ixmid\AppData\Local\Temp\MyApp
temp-dir does NOT exist and will be created


    Verzeichnis: C:\Users\USER\AppData\Local\Temp


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        16.11.2016     11:01            MyApp
Timestamp: 20161116111
Parameter-Path=: C:\Program Files (x86)\Internet Explorer
exists? = False
not existing, no files to copy/save


PS X:\MyApp-Setup>

如您所见,首先Test-Path工作正常,并创建丢失的目录。但在第二部分它不能正常工作。 任何建议,为什么第二个(和第三个)测试路径语句工作错误?

完成:执行脚本的第二个输出(当MyApp-directory现在存在时)如下所示:

1st Argument: C:\Program Files (x86)\Internet Explorer
temporary Directory: C:\Users\USER\AppData\Local\Temp\MyApp
temp-dir exist
Timestamp: 201611161113
Parameter-Path=: C:\Program Files (x86)\Internet Explorer
exists? = False
not existing, no files to copy/save

1 个答案:

答案 0 :(得分:3)

您同时使用"引号和'引号。如果你想要变量,在这种情况下$PARAM_DESTINATION,要扩展,你只需要使用双引号。所以:"$PARAM_DESTINATION"

阅读有关双引号和单引号的更多信息 http://windowsitpro.com/blog/single-quotes-vs-double-quotes-powershell-whats-difference