我想知道如何在 PowerShell 脚本中使用 icacls
来设置计算机帐户的文件共享权限,例如域\我的服务器$。
这就是我正在尝试的:
$ComputerAccount = "domain\myServer$"
$Folder = "\\TestServer\TestShare\folder1"
$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 字符:26
+ $resICacls = Invoke-Expression "icacls $folder/grant $rule"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ParserError: (:) [Invoke-Expression], ParseException
+ FullQualifiedErrorId : 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
关于powershell - 在 PowerShell 中执行 icacls 以授予对域计算机的文件共享的访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26648685/