PowerShell 在命令中使用引号中的变量

PowerShell using a variable in quotes within a command

提问人:Rakha 提问时间:12/15/2017 最后编辑:Peter MortensenRakha 更新时间:9/3/2023 访问量:10393

问:

我有这个有效的(三重双引号不是一个错误;它的工作原理完全是这样的)——专注于部分:Start-Process

Start-Process powershell -Credential $cred -WorkingDirectory "$lettre_disque" -ArgumentList '-noprofile -command &{Start-Process """D:\WD Drive Unlock.exe""" -verb runas}'

现在我只是尝试用一个名为包含完全相同文本 () 的变量替换字符串。D:\WD Drive Unlock.exe$chemin_fichierD:\WD Drive Unlock.exe

我在努力:

"""$chemin_fichier"""

""$chemin_fichier""

"$chemin_fichier"

""""$chemin_fichier""""

没有任何效果...

如何显示该变量?这个命令非常令人困惑。什么是正确的组合?我必须逃避什么还是?

PowerShell 引用变量 扩展

评论

0赞 EBGreen 12/15/2017
-ArgumentList ('-noprofile -command &{Start-Process “”“D:\WD Drive Unlock.exe”“” -verb runas}' -f $chemin_fichier)
0赞 Rakha 12/15/2017
我的目标是删除 D:\WD...由于字母是可变的,正确的路径存储在 $chemin_fichier 中,我如何放置 $chemin_fichier 以替换该字符串?比如 : -ArgumentList ('-noprofile -command &{Start-Process “”“$chemin_fichier”“”
1赞 EBGreen 12/15/2017
呜呜......没有完成编辑: -ArgumentList ('-noprofile -command &{Start-Process “”“{0}”“” -verb runas}' -f $chemin_fichier)

答:

1赞 Maximilian Burszley 12/15/2017 #1

我会使用溅射将您的命令分解成碎片:

$chemin_fichier = 'D:\WD Drive Unlock.exe'

$ArgList = @{
    FilePath = 'powershell'
    Credential = $cred
    WorkingDirectory = $lettre_disque
    ArgumentList = @(
        '-NoProfile'
        '-Command'
        "`"Start-Process -FilePath '$chemin_fichier' -Verb runas`""
    )
}
Start-Process @ArgList

没有必要将命令包装在脚本块中。

评论

0赞 Rakha 12/15/2017
非常感谢你,是的,使用单行命令是一场噩梦。不过,这种语法是硬核的,哈哈。总有一天我会习惯的,非常感谢。
1赞 Maximilian Burszley 12/15/2017
@Rakha 是的,一开始处理参数是很粗糙的。Start-Process
1赞 yu yang Jian 10/7/2019 #2

我使用一个带有类似参数的命令,该命令将替换为空字符串。逃到 或 很关键,你应该试一试。测试和修改以确保脚本正常工作:store:Schema="abcd""""""""

powershell -Command "$varStr='store:Schema=""abcd""""'; $filePath='%~dp0SomeFolder\SomeFile.txt'; (gc $filePath) -replace $varStr, '' | Out-File $filePath"