在PowerShell中执行icacls以授予对域计算机的文件共享的访问权限



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

这就是我正在尝试的:

$ComputerAccount = "domainmyServer$"
$Folder = "\TestServerTestSharefolder1"
$rule = $ComputerAccount+':(M),(OI),(CI)'
$resICacls = Invoke-Expression "icacls $folder /grant $rule"

我收到这个错误消息:

调用表达式:第1行字符:83+。。。ant Domain\myServer$:(M),(OI),(CI)+~~变量引用无效。"$"后面没有有效的变量名性格请考虑使用${}来分隔名称。在c:\Binary\testacl.ps1:12 char:26+$resICacls=调用表达式"icacls$folder/grant$rule"+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+类别信息:ParserError:(:)[调用表达式],ParseException+FullyQualifiedErrorId:InvalidVariableReference,Microsoft.PowerShell.Commands.InvokeExpressionCommand

我尝试了逃离$的不同变体,但没有找到解决方案。有人知道怎么做吗?

尝试使用呼叫运算符(&)或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
调用表达式-命令:icacls foldername /grant groupName:"(CI)(OI)M"

这很好用。所以我想,如果您将命令放入单引号(即'')中,它会起作用。例如:

$ComputerAccount = "domainmyServer$"
Invoke-Expression -Command:"icacls $ComputerAccount /grant GroupName:'(CI)(OI)M'"

最新更新