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

Ulr*_*ski 5 permissions powershell share icacls

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

这是我正在尝试的:

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

我收到此错误消息:

调用表达式:在线:1字符:83
+ ... ant Domain \ 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

我尝试了转义的不同变体,$但没有找到解决方案。任何人都有提示如何执行此操作?

Ans*_*ers 6

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

& icacls $folder /grant $rule
Run Code Online (Sandbox Code Playgroud)
cmd /c icacls $folder /grant $rule
Run Code Online (Sandbox Code Playgroud)

或使用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
Run Code Online (Sandbox Code Playgroud)