我需要知道是否有办法扩展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)作为变量名称的一部分?一种反向反向转义字符?
答案 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
它是否特别漂亮或可读,可能不是。它确实有效!