【问题标题】:Automatic variable broken with PowerShell 4PowerShell 4 破坏了自动变量
【发布时间】:2014-07-21 22:27:30
【问题描述】:

使用 PowerShell 2,我可以正确使用 $$ 变量

PS > $PSVersionTable.PSVersion.Major
2

PS > Convert-Path 'Program Files'
C:\Program Files

PS > Convert-Path $$
C:\Program Files

但是使用 PowerShell 4 相同的命令会产生错误

PS > $PSVersionTable.PSVersion.Major
4

PS > Convert-Path 'Program Files'
C:\Program Files

PS > Convert-Path $$
Convert-Path : Cannot find path 'C:\'Program Files'' because it does not exist.

如何将此示例与 PowerShell 4 一起使用?

about_Automatic_Variables

【问题讨论】:

    标签: variables powershell


    【解决方案1】:

    您可以使用Invoke-Expression 来扩展字符串。

    PS > Convert-Path 'Program Files'
    C:\Program Files
    
    PS > Convert-Path (Invoke-Expression $$)
    C:\Program Files
    

    使用别名:

    PS > cvpa (iex $$)
    C:\Program Files
    

    您甚至可以使用它来创建您自己的自动变量。在这里,我使用4,因为它与$ 在同一个键上。

    将其放入您的个人资料中:

    $Global:4 = 0
    $null = Set-PSBreakpoint -Variable 4 -Action {
            $global:4 = Invoke-Expression $$} -Mode Read
    

    然后就可以运行了:

    PS > Convert-Path 'Program Files'
    C:\Program Files
    
    PS > Convert-Path $4
    C:\Program Files
    

    【讨论】:

      【解决方案2】:

      一种方法是:

      Convert-Path 'Program Files'
      
      Convert-Path ($$ -replace "`'", '')
      

      评论后编辑:

       Convert-Path ($$ -replace "^`'|`'$", '')
      

      仅替换 $$ 开头和结尾的单引号

      【讨论】:

      • 试试看,我现在无法测试
      • 如果路径是ProgramFiles',这将失败。
      猜你喜欢
      • 2017-04-06
      • 2022-01-08
      • 1970-01-01
      • 2013-04-16
      • 2021-03-28
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多