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

标签 powershell permissions share icacls

我想知道如何在 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/

相关文章:

powershell - 我可以以Unix方式将参数传递给Powershell函数吗?

powershell - CSV 文件生成新名称 - 调用 powershell

c# - 如何使用 C# 显示文件保存到受限位置的 UAC 提示?

c# - 使用 Azure AD Graph 客户端 API 更改用户密码的权限问题

active-directory - 我可以对从只读资源共享的 SMB 共享设置权限吗?

powershell - 这是 PowerShell 类型解析机制中的边缘案例吗?

java - 将 Java 更新到最新版本的 Powershell 脚本

sql - 如何授予数据库角色对架构的执行权限?我究竟做错了什么?

ios - 将 TableView 选定的数据分享到whatsapp

android - 如何将我的 Android 应用程序添加到共享对话框?