【问题标题】:Folder Permission settings文件夹权限设置
【发布时间】:2014-09-28 17:51:55
【问题描述】:

我正在执行以下命令以在远程服务器中创建文件夹。我在设置新文件夹(F 盘中的团队)权限时收到访问控制列表的错误消息,您能帮我解决这个问题吗?

$acl=Get-Acl "\\9018\F$\Team Data"$path=md "F:\Team" | set-acl -aclobject $acl
Invoke-Command -ComputerName (Get-Content C:\Server.txt) -ScriptBlock {
param($acl,$path)
} -ArgumentList $acl,$path

错误信息:

set-acl : The security identifier is not allowed to be the owner of this object.
At F:\folder.ps1:2 char:26
+ $path=md "F:\Team" | set-acl -aclobject $acl
+                          ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (F:\CDS Team:String) [Set-Acl], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.SetAclCommand

【问题讨论】:

    标签: powershell permissions directory


    【解决方案1】:

    Get-ACL 将获得对象的所有安全权限,因此当您通过管道将其传递给 Set-ACL 时,您可能会告诉它设置所有权限。

    你可以尝试改变

    $acl=Get-Acl "\9018\F$\Team Data"$path=md "F:\Team"

    $acl=(Get-Item "\9018\F$\Team Data").GetAccessControl('Access') | Set-ACL -Path F:\Team

    我使用下面的代码(有效)在我的虚拟服务器上的一个文件夹中对此进行了测试,所以也许你可以修改代码并让它工作:

    $acl=(Get-Item \\core\testshare$).GetAccessControl('Access')
    $acl | Set-Acl -Path \\core\changeacl
    

    您的代码表明您可能需要为不止一个服务器执行此操作,您可以做的是在您的代码之前放置一个 foreach

    $servers = Get-Content C:\Servers.txt
    ForEach ($server in $servers)
    {
        $acl=(Get-Item \\core\testshare$).GetAccessControl('Access')
        $acl | Set-Acl -Path "$server\Team"
    }
    

    【讨论】:

      【解决方案2】:

      谢谢 Bluecakes,我已经创建了这样的命令,它工作正常。要保留访问控制列表和所有者权限,我们需要使用 New-Object System.Security.Principal.NTAccount("domainname", "ownername")

      $j=Invoke-Command -ComputerName (Get-Content F:\ExchServerlist.txt) -ScriptBlock {md   "F:\Team"} -asjob
      $servers = Get-Content F:\ExchServerlist.txt
      ForEach ($server in $servers)
      {
      $ChkFile = "\\$server\f$\Team" 
      $FileExists = Test-Path $ChkFile
      If ($FileExists -eq $True) 
      {
      Write-Host "File Exists/Created in $server"
      Write-Host "Waiting to complete" $server
      $objUser = New-Object System.Security.Principal.NTAccount("domainname", "ownername")
      $objfile =  Get-Acl "\\9018\f$\Team Data"
      $objFile.SetOwner($objUser)
      $path = Set-Acl -aclobject $objFile -path "\\$server\f$\Team"
      Invoke-Command -ComputerName $server -ScriptBlock {param($objUser,$objfile,$path)} -ArgumentList $objuser,$objfile,$path -asjob
      }
      else {$j | wait-job -Timeout 30}
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-18
        • 2023-03-28
        • 2017-10-05
        • 2013-12-22
        • 2012-03-02
        • 2012-09-04
        • 1970-01-01
        • 2010-09-19
        相关资源
        最近更新 更多