完全路径化可执行文件时PowerShell中的“意外令牌”

时间:2010-03-01 17:28:58

标签: powershell

试图更好地理解为什么下面的第二项不起作用。第一项很简单,第二项似乎更清晰,第三项似乎不直观。

# My path includes pscp so this works.
pscp.exe -i $PRIVATE_KEY $file ${PROXY_USER}@${PROXY_HOST}:${PROXY_DIR}

# This does not work. I get unexpected token error. Why? What does that mean?
$PUTTY_PATH\pscp.exe -i $PRIVATE_KEY $file ${PROXY_USER}@${PROXY_HOST}:${PROXY_DIR}

# & is required to solve the problem.
& "$PUTTY_PATH\pscp.exe" -i $PRIVATE_KEY $file ${PROXY_USER}@${PROXY_HOST}:${PROXY_DIR}

3 个答案:

答案 0 :(得分:10)

那是因为这也被认为是一个解析错误:

"foo"\pscp.exe 

虽然您已找到正确解析:

"$PUTTY_PATH\pscp.exe"

解析为有效字符串,但正如您已经注意到的那样,字符串不会执行。您必须使用调用操作符&来调用由后面的字符串命名的命令。

答案 1 :(得分:0)

它将\作为变量名称的一部分,并抱怨因为它不合法。如果您像我一样使用这个片段,将它放入路径中的.ps1文件中,那么如果您不希望在全局PATH环境变量中使用pscp.exe,我就会转到$ putty_path。 / p>

答案 2 :(得分:0)

猜猜,但我觉得你可能会误用花括号。您是否尝试获取环境变量PROXY_USER?通常,大括号用于启动新的语句块。

$Env:PROXY_USER

此外,您可能希望将该代理信息封装在字符串中,以确保将其视为单个参数:

"$Env:PROXY_USER@$Env:PROXY_HOST:$Env:PROXY_DIR"