8

我想知道如何icacls在 PowerShell 脚本中为计算机帐户(例如 Domain\myServer$)设置文件共享权限。

这就是我正在尝试的:

$ComputerAccount = "domain\myServer$"
$Folder = "\\TestServer\TestShare\folder1"
$rule = $ComputerAccount+':(M),(OI),(CI)'
$resICacls = Invoke-Expression "icacls $folder /grant $rule"

我收到此错误消息:

调用表达式:在 line:1 char:83
+ ... 蚂蚁域\myServer$:(M),(OI),(CI)
+ ~~

变量引用无效。“$”后面没有有效的变量名
特点。考虑使用 ${} 来分隔名称。
在 c:\Binary\testacl.ps1:12 char:26
+ $resICacls = 调用表达式“icacls $folder /grant $rule”
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ParserError: (:) [Invoke-Expression], ParseException
    + FullyQualifiedErrorId : InvalidVariableReference,Microsoft.PowerShell.Commands.InvokeExpressionCommand

我尝试了不同的转义变体,$但没有找到解决方案。任何人都有提示如何做到这一点?

4

2 回答 2

8

尝试使用呼叫运算符 ( &) 或cmd /c代替Invoke-Expression

& icacls $folder /grant $rule
cmd /c icacls $folder /grant $rule

或使用Get-Acl/Set-Acl更改权限:

$permissions = 'Modify'
$inheritance = 'ContainerInherit, ObjectInherit'

$acl = Get-Acl -Path $folder
$ace = New-Object Security.AccessControl.FileSystemAccessRule ($ComputerAccount, $permissions, $inheritance, 'InheritOnly', 'Allow')
$acl.AddAccessRule($ace)
Set-Acl -AclObject $acl -Path $folder
于 2014-10-30T10:32:32.267 回答
0

调用表达式-命令:icacls foldername /grant groupName:"(CI)(OI)M"

这工作正常。所以我想如果你将命令放入单引号(即'')中它会起作用。例如:

$ComputerAccount = "domain\myServer$"
Invoke-Expression -Command:"icacls $ComputerAccount /grant GroupName:'(CI)(OI)M'"
于 2017-07-05T15:55:28.017 回答