首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件夹权限设置

文件夹权限设置
EN

Stack Overflow用户
提问于 2014-08-05 22:38:18
回答 2查看 561关注 0票数 0

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

代码语言:javascript
复制
$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

错误消息:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-05 23:06:32

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

我用我的虚拟服务器上的一个文件夹测试了这一点,使用了下面的代码(这是有效的),所以您也许可以篡改代码并让它工作:

代码语言:javascript
复制
$acl=(Get-Item \\core\testshare$).GetAccessControl('Access')
$acl | Set-Acl -Path \\core\changeacl

您的代码建议您可能需要在一台以上的服务器上执行此操作,您可以完成的任务是在代码之前加上如下内容:

代码语言:javascript
复制
$servers = Get-Content C:\Servers.txt
ForEach ($server in $servers)
{
    $acl=(Get-Item \\core\testshare$).GetAccessControl('Access')
    $acl | Set-Acl -Path "$server\Team"
}
票数 0
EN

Stack Overflow用户

发布于 2014-08-08 09:21:18

谢谢蓝调,我已经创建了这样的命令,它运行得很好。要保留访问控制列表和所有者权限,我们需要使用新对象System.Security.Principal.NTAccount("domainname","ownername")

代码语言:javascript
复制
$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}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25149472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档