Powershell - 设置文件夹权限

时间:2015-11-17 14:12:48

标签: powershell

您好我想让域用户使用PowerShell对文件夹进行完全访问。我正在使用Technet和博客从研究中收集到的这组代码。我还有问题。

当我运行下面的代码时,我收到此错误:

Exception calling "SetAccessRule" with "1" argument(s): "Some or all     identity references could not be translated."
At line:13 char:1
+ $acl.SetAccessRule($accessRule)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : IdentityNotMappedException

这是我的代码:

$directory = "C:\inetpub\wwwroot\app.webservice"
$domainName = (gwmi Win32_NTDomain).DomainName
$group = 'Domain Users'
$inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
$propagation = [system.security.accesscontrol.PropagationFlags]"None"
$acl = (Get-Item $directory).GetAccessControl("Access")
$user = "{0}\{1}" -f "$domainName", $group
$user.trim()
$access = "FullControl"
$accessType = "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule -ArgumentList @("$user","$access", "$inherit", "$propagation", "$accessType")
$acl.SetAccessRule($accessRule)
set-acl $directory $acl 

我尝试用"域\域用户"替换$ user变量并且代码按预期工作。我一直无法弄清楚如何正确传递$ user变量,以便可以传递用户参数而不是硬编码。

由于

1 个答案:

答案 0 :(得分:1)

检查DomainName变量的值。如果我在这里运行相同的代码,我不仅会获得我正在运行的域,还会将所有可信域作为数组。这意味着$ user变量包含$domainName = "MyDomain"

之类的内容

如果可能,我建议将域名声明为$domainName = (gwmi Win32_NTDomain).DomainName if ($domainName -is [array]) { $domainName = $domainName[0] } 。如果您确实需要动态获取域,则需要测试数组;

$domainName = $env:USERDOMAIN

注意:我的域名按字母顺序排在第一位,因此我不知道当前域是先显示还是按字母顺序显示。您需要测试并找到适合您的解决方案。

编辑:看起来$stid = oci_parse($conn, 'begin process_order(CUST_ADDRESS_TYP(:street, :city, :state, :post_code, :country)); end;'); oci_bind_by_name($stid, ':street', "45 High Street"); oci_bind_by_name($stid, ':city', "Toronto"); oci_bind_by_name($stid, ':state', "CO"); oci_bind_by_name($stid, ':post_code', "94567"); oci_bind_by_name($stid, ':country', "CN"); 可能会发挥作用