2014-10-30 71 views
3

我想知道如何在powershell脚本中使用icacls来设置针对例如计算帐户的文件共享的权限。域\ myServer上$在Powershell中执行icacls以授予对域计算机的文件共享的访问权限

这就是我想:

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

I got this error message: 

invoke-expression : At line:1 char:83 
+ ... ant Domain\myServer$:(M),(OI),(CI) 
+     ~~ 
Variable reference is not valid. '$' was not followed by a valid variable name character. Consider using ${} to delimit the name. 


At c:\Binary\testacl.ps1:12 char:26 
+    $resICacls = invoke-expression "icacls $folder /grant $rule" 
+       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ParserError: (:) [Invoke-Expression], ParseException 
    + FullyQualifiedErrorId : InvalidVariableReference,Microsoft.PowerShell.Commands.InvokeExpressionCommand 

我试图逃避$的不同变体,但没有找到解决办法。 任何人都有一个提示如何做到这一点?

谢谢!

回答

3

尝试使用代替Invoke-Expression呼叫操作员(&)或cmd /c

& 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 
0

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

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

$ComputerAccount = "domain\myServer$" 
Invoke-Expression -Command:"icacls $ComputerAccount /grant GroupName:'(CI)(OI)M'" 
相关问题