我正在尝试使用'dsacls'
命令修改powershell脚本中的servicePrincipalName权限。
我将所有动态参数作为脚本参数。
当我使用我收到的参数变量形成命令时,脚本无效。字符串操作有一些我缺少的东西。
$perStr ='"' + $strDN + '"' + ' /G ' + $DomainNetBIOSName + '\' + $SQLUser + ':RPWP;"servicePrincipalName"'
$ret = dsacls ${perStr}
上面给出了一个错误:
Invalid DN Syntax
当我使用硬编码值运行时,运行正常。
答案 0 :(得分:1)
当我很难构造用于外部可执行文件的字符串时,我倾向于构建整个命令,然后使用Invoke-Expression
来运行它。像这样:
$perStr = '& dsacls --% "{0}" /G {1}\{2}:RPWP;"servicePrincipalName"' -f $strDN, $DomainNetBIOSName, $SQLUser
$ret = Invoke-Expression -Command $perStr
--%
将告诉它停止解释超出该点的事情,因此它将所有参数完全视为类型并将它们传递给命令。看看它是否适合您,如果不是,您可能需要查看$perStr
的内容,以确保它适合您。