【问题标题】:Powershell Reverse Escape CharacterPowershell 反向转义字符
【发布时间】:2013-11-19 16:44:56
【问题描述】:

我需要知道是否有办法扩展 PowerShell 变量,同时不删除下一个字符。

我有的是命令:

"iCacls $Destination /GRANT domain\$userN:(OI)(CI)(M) /t" | Invoke-NativeExpression

Invoke-NativeExpression 函数如下所示:

    function Invoke-NativeExpression
{
    param (
   [Parameter(Mandatory=$true,ValueFromPipeline=$true,Position=0)]
   [string]$Expression
    )

    process
    {
        $executable,$arguments = $expression -split ' '
        $arguments = $arguments | foreach {"'$_'"}
        $arguments = $arguments -join ' '
        $command = $executable + ' ' + $arguments

      if ($command)
        {
            Write-Verbose "Invoking '$command'"
            Invoke-Expression -command $command
        }
    }
}

此方法适用于非变量组,例如domain\Admins:perms 很好。

有没有办法让 PowerShell 接受 $UserN: 而不将 :(OI)(CI) 作为变量名的一部分?一种反向反向转义字符?

【问题讨论】:

    标签: powershell escaping


    【解决方案1】:

    在名称周围使用{},如下所示:

    "${UserN}:(OI)(CI)(M)"
    

    【讨论】:

    • 非常感谢,不幸的是我发现了另一个“黑客”并使用了它。我喜欢你和@mjolinor 的方法并标记了它们。但由于我使用我的 hack 作为我的解决方案,我将标记为答案。
    【解决方案2】:

    解决这个问题的几种不同方法:

    子表达式:

    "iCacls $Destination /GRANT domain\$($userN):(OI)(CI)(M) /t" 
    

    格式字符串:

    'iCacls $Destination /GRANT domain\{0}:(OI)(CI)(M) /t' -f $UserN 
    

    【讨论】:

      【解决方案3】:

      我有一个破解它的想法,并在我发布后立即工作。数字!

      我所做的是:

      $uUserN = ":(OI)(CI)(M) /t"
      "iCacls $Destination /GRANT domain\$userN$uUserN" | Invoke-NativeExpression
      

      它是否特别漂亮或可读,可能不是。但它确实有效!

      【讨论】:

      • 当然,背靠背变量会起作用,因为$ 不是变量名的有效字符。也就是说,从周围文本中描述变量名称的规定方法是在变量的可选范围和名称部分周围使用{}
      • 是的。一旦我看到你的解决方案,它就会回到我身边......我整个早上都在它周围跳舞似乎很愚蠢,我把它归咎于我一直在努力的这些新更新脚本的所有其他挑战!不管。在考虑了我更喜欢你的解决方案之后,我会接受它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 2021-06-20
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多