2013-11-19 4 views
0

Мне нужно знать, есть ли способ развернуть переменную PowerShell и одновременно не удалять следующий символ.Powershell Reverse Escape Character

Что у меня есть команда:

"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

Используйте {} вокруг имени так:

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

Спасибо, тон, к сожалению, я нашел еще один «взломать» и использовал это. Мне понравился ваш подход и @mjolinor и пометили их. Но поскольку я использовал свой взлом в качестве своего решения, я отмечу этот ответ. –

2

Несколько различных способов решить эту проблему:

Подвыражения:

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

форматной строки:

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

У меня возникла идея взломать его и работал сразу после того, как я опубликовал это. Цифры!

Что я сделал:

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

Это особенно довольно или readible, вероятно, нет. Это действительно работало!

+0

Конечно, переменные «спина к спине» будут работать, потому что '$' не является допустимым символом для имени переменной. Тем не менее, предписанный способ разграничения имени переменной из окружающего текста заключается в использовании '{}' вокруг необязательной области области & имени переменной. –

+0

Да. И как только я увидел ваши решения, он вернулся ко мне ... Кажется глупым, что я танцевал вокруг этого утра, я обвиняю его во всех других проблемах этих новых обновленных сценариев, над которыми я работаю! Несмотря на. Подумав о том, что мне нравится ваше решение лучше, и я собираюсь его принять. –