Сохраняет ли «Set-Content» в PowerShell права доступа к файлам? - PullRequest
0 голосов
/ 14 сентября 2018

Я планирую обновить некоторые файлы через PowerShell.Сохранит ли Set-Content права доступа (ACL) или мне придется явно резервировать и восстанавливать эти права?

1 Ответ

0 голосов
/ 15 сентября 2018

Set-ContentAdd-Content) и Out-File / > (>>) не воссоздают существующий целевой файл, они заменяют (добавить к) его содержимое , поэтому его ACL сохраняются .

Вы можете проверить это с помощью следующего примера кода:

Push-Location $env:TEMP

Remove-Item tmp.txt -EA SilentlyContinue

# Create file 'tmp.txt with default ACL.
'original content' | Set-Content tmp.txt

# Modify the ACL to allow the Guests groups read access.
$acl = Get-Acl tmp.txt
$acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule Guests, Read, Allow))
Set-Acl tmp.txt $acl

'ACL *before* Set-Content:'
(Get-Acl tmp.txt).Access.IdentityReference | Out-Host


# Use Set-Content to replace the existing content.
'new content' | Set-Content tmp.txt

# Verify that the file's ACL hasn't changed.
'ACL *after* Set-Content:'
(Get-Acl tmp.txt).Access.IdentityReference | Out-Host

Remove-Item tmp.txt

Выше приведено что-то вроде следующего, показывающее, что пользовательский ACL был сохранен даже после замены содержимого файла на Set-Content:

ACL *before* Set-Content:

Value
-----
BUILTIN\Guests
NT AUTHORITY\SYSTEM
BUILTIN\Administrators
WS1\jdoe


ACL *after* Set-Content:

Value
-----
BUILTIN\Guests
NT AUTHORITY\SYSTEM
BUILTIN\Administrators
WS1\jdoe
...