Powershell反向逃逸角色

时间:2013-11-19 16:44:56

标签: powershell escaping

我需要知道是否有办法扩展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)作为变量名称的一部分?一种反向反向转义字符?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

有几种不同的解决方法:

子表达式:

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

格式化字符串:

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

答案 2 :(得分:0)

我有一个想法来破解它,并在我发布之后立即工作。图!

我做的是:

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

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