Назад | Перейти на главную страницу

Powershell Set-Acl не работает

Работая над небольшим скриптом резервного копирования, я пытаюсь изменить ACL файла с помощью Set-Acl в Powershell 1 в Vista и всегда получаю следующее сообщение об ошибке:

Set-Acl : The security identifier is not allowed to be the owner of this object.

Эта ошибка сохраняется, даже если я использую минимальный сценарий:

$acl = Get-Acl $sourcepath$file
$acl |format-list
Set-Acl -path $sourcepath$file -AclObject $acl

Кто-нибудь знает причину этой ошибки? Очевидно, я не меняю владельца файла ...

BTW: в конечном итоге я хочу уменьшить все права доступа к ReadAndExecute. Может быть, есть более простой способ сделать это в Powershell?

Спасибо за вашу помощь! Ульрих

Проверь это POWERSHELL - РЕДАКТИРОВАНИЕ РАЗРЕШЕНИЙ ДЛЯ ФАЙЛА ИЛИ ПАПКИ

Из комментария к публикации:

Вы, очевидно, получаете эту ошибку, потому что пытаетесь изменить владельца объекта. По умолчанию NTFS позволяет вам установить только владельца объекта:

A: себя
B: Группа администраторов

Вот и все.

Однако, если вы администратор или оператор резервного копирования, вы можете установить его для любого пользователя, НО эта привилегия отключена по умолчанию и должна быть включена, прежде чем вы сможете это сделать. Если вам интересно - это осознанное ограничение безопасности.

Не существует конкретных способов включения этого .NET или PowerShell, но если мы покинем территорию Microsoft и посетим проект PowerShell Community Extensions, мы найдем способ ...

Я не так часто использовал PSCX, и это не продукт Microsoft, поэтому любые вопросы по ним следует направлять www.codeplex.com/PowerShellCX а не здесь, но здесь:

Загрузите и установите PSCX из www.codeplex.com/PowerShellCX

Настройте класс-оболочку для TokenPriviliege, используя следующий синтаксис:

$oTP = New-Object PSCX.Interop.TokenPriviliege

Теперь предоставьте его текущему процессу:

Set-Privilege $oTP

Теперь у вас должна быть возможность изменить владельца папки на любого пользователя.

Интересная ошибка, какой файл / путь вы используете? Это системный путь, запускали ли вы PowerShell от имени администратора (UAC)?

Ваш пример сценария обновит владельца файла, поскольку он является частью $ acl.