Замените icacls.exe на PowerShell - PullRequest
       0

Замените icacls.exe на PowerShell

1 голос
/ 05 апреля 2020

Я хочу заменить следующую команду CMD на команду Powershell:

Icacls.exe "%SystemDrive%\xxx" /grant *S-X-X-XX-XXX:(CI)(OI)(F) /t /c

Я также знаю, как это сделать с Icacls, но я думаю, что есть более хороший способ сделайте это с помощью PowerShell.

Я был бы рад, если бы кто-то мог помочь мне в этом отношении. :-) Спасибо.

1 Ответ

2 голосов
/ 06 апреля 2020

Встроенные файлы справки предоставляют руководство для этого.

Set-Acl Изменяет дескриптор безопасности указанного элемента, такого как файл или раздел реестра.

# Get specifics for a module, cmdlet, or function
(Get-Command -Name Get-Acl).Parameters
(Get-Command -Name Get-Acl).Parameters.Keys
<#
# Results

Path
InputObject
LiteralPath
Audit
AllCentralAccessPolicies
Filter
Include
Exclude
...
#>
Get-help -Name Get-Acl -Examples
<#
# Results

Get-Acl C:\Windows

Get-Acl -Path "C:\Windows\k*.log" | 
Format-List -Property PSPath, Sddl

Get-Acl -Path "C:/Windows/k*.log" -Audit | 
ForEach-Object { $_.Audit.Count }

Get-Acl -Path "HKLM:\System\CurrentControlSet\Control" |
Format-List

Get-Acl -InputObject (Get-StorageSubsystem -Name S087)
#>
Get-help -Name Get-Acl -Full
Get-help -Name Get-Acl -Online


(Get-Command -Name Set-Acl).Parameters
(Get-Command -Name Set-Acl).Parameters.Keys
<#
# Results

Path
InputObject
LiteralPath
AclObject
CentralAccessPolicy
ClearCentralAccessPolicy
Passthru
Filter
Include
Exclude
...
#>
Get-help -Name Set-Acl -Examples
<#
# Results

$DogACL = Get-Acl -Path "C:\Dog.txt"

Set-Acl -Path "C:\Cat.txt" -AclObject $DogACL

Get-Acl -Path "C:\Dog.txt" | 
Set-Acl -Path "C:\Cat.txt"

$NewAcl = Get-Acl File0.txt

Get-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | 
Set-Acl -AclObject $NewAcl
#>
Get-help -Name Set-Acl -Full
Get-help -Name Set-Acl -Online

Существуют и другие модули через Microsoft PowerShellGallery.com, которые вы также можете использовать.

Find-Module -Name '*acl*', '*ntfs*' | 
Format-Table -AutoSize
<#
# Results

Version     Name                    Repository Description                                                                                                                                 
-------     ----                    ---------- -----------                                                                                                                                 
1.0.1       ACL-Permissions         PSGallery  A couple of ACL utilities, for repairing c...
1.30.1.28   ACLReportTools          PSGallery  Provides Cmdlets for reporting on Share ACLs.                                                                                               
1.7         ACLHelpers              PSGallery  Modules to help work with ACLs (Access Control Rights)                                                                                      
1.0.1.0     ACLCleanup              PSGallery  A set of tools to help you clean your files...
0.1.2       ACLTools                PSGallery  Module for managing NTFS Acls on files and folders                                                                                          
...
0.4         FileAclTools            PSGallery  Tools for quickly fixing file system ACLs                                                                                                   
...                                                                                                  
4.2.6       NTFSSecurity            PSGallery  Windows PowerShell Module for managing file ...
1.4.1       cNtfsAccessControl      PSGallery  The cNtfsAccessControl module contains DSC re...
1.0         NTFSPermissionMigration PSGallery  This module is used as a wrapper to the popular ...
#>

Итак, за то, что вы показываете

# Review current settings
Get-Acl -Path $env:SystemDrive | 
Format-List -Force
<#
# Results

Path   : Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32
Owner  : NT SERVICE\TrustedInstaller
Group  : NT SERVICE\TrustedInstaller
Access : CREATOR OWNER Allow  268435456
         NT AUTHORITY\SYSTEM Allow  268435456
         NT AUTHORITY\SYSTEM Allow  Modify, Synchronize
         BUILTIN\Administrators Allow  268435456
         BUILTIN\Administrators Allow  Modify, Synchronize
         BUILTIN\Users Allow  -1610612736
         BUILTIN\Users Allow  ReadAndExecute, Synchronize
         NT SERVICE\TrustedInstaller Allow  268435456
         NT SERVICE\TrustedInstaller Allow  FullControl
         APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES Allow  ReadAndExecute, Synchronize
         APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES Allow  -1610612736
         APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES Allow  ReadAndExecute, Synchronize
         APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES Allow  -1610612736
Audit  : 
Sddl   : O:S-1-5-80-956008885-34...
#>

Описание

Командлет Set-Acl изменяет дескриптор безопасности указанного элемента, такого как файл или раздел реестра, в соответствии со значениями в дескрипторе безопасности, который вы используете. supply.

Чтобы использовать Set-Acl, используйте параметр Path или InputObject, чтобы определить элемент, дескриптор безопасности которого вы хотите изменить. Затем используйте параметры AclObject или SecurityDescriptor для предоставления дескриптора безопасности, значения которого вы хотите применить. Set-Acl применяет предоставленный дескриптор безопасности. Он использует значение параметра AclObject в качестве модели и изменяет значения в дескрипторе безопасности элемента, чтобы соответствовать значениям в параметре AclObject.

Параметры -AclObject Указывает ACL со значениями требуемого свойства. Set-Acl изменяет ACL элемента, заданного параметром Path или InputObject, чтобы соответствовать значениям в указанном объекте безопасности.

Вы можете сохранить выходные данные команды Get-Acl в переменной и затем использовать AclObject параметр для передачи переменной или введите команду Get-Acl.

ТАБЛИЦА 1 Тип: Положение объекта: 1 Значение по умолчанию: Нет Принимать входные данные из конвейера: True (ByValue) Принимать подстановочные знаки: False

Итак, вы просто делаете что-то вроде этого ... согласно приведенным выше примерам

$AclSettings = 'WhatEverSettingsYouWant'
Set-Acl -Path $env:SystemDrive -AclObject $AclSettings

Аналогичный вопрос о StackOverflow находится здесь:

Настройка Флаги наследования и распространения с set-acl и Powershell

Далее приведено следующее руководство:

Вот страница MSDN, описывающая флаги и результат их различные комбинации. https://msdn.microsoft.com/en-us/library/ms229747 (v = vs.100) .aspx

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 

PropagationFlags.None

Вот краткий код PowerShell для применения новых разрешений к папке путем изменения существующего ACL-списка (Список контроля доступа).

# Get the ACL for an existing folder
$existingAcl = Get-Acl -Path 'C:\DemoFolder'

# Set the permissions that you want to apply to the folder
$permissions = $env:username, 'Read,Modify', 'ContainerInherit,ObjectInherit', 'None', 'Allow'

# Create a new FileSystemAccessRule object
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permissions

# Modify the existing ACL to include the new rule
$existingAcl.SetAccessRule($rule)

# Apply the modified access rule to the folder
$existingAcl | Set-Acl -Path 'C:\DemoFolder'
<#
Each of the values in the $permissions variable list pertain to the parameters of this constructor for the FileSystemAccessRule class.
#>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...