首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用powershell替代icacls.exe

用powershell替代icacls.exe
EN

Stack Overflow用户
提问于 2020-04-05 20:09:39
回答 1查看 2K关注 0票数 2

我想用Powershell命令替换以下CMD命令:

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

我也知道如何使用Icacls来完成这个任务,但是我认为有一种更好的方法可以用PowerShell来实现。

如果有人能在这方面帮助我,我会很高兴的。-)谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-04-05 21:56:02

内置的帮助文件,为您提供这方面的指导。

Set-Acl更改指定项的安全描述符,如文件或注册表项。

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

还有其他模块通过微软的PowerShellGallery.com,您也可以利用。

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

所以,你所展示的

代码语言:javascript
复制
# 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更改指定项(如文件或注册表项)的安全描述符,以匹配您提供的安全描述符中的值。 若要使用Set-Acl,请使用Path或InputObject参数标识要更改其安全描述符的项。然后,使用AclObject或SecurityDescriptor参数提供具有要应用的值的安全描述符。Set-Acl应用所提供的安全描述符。它使用AclObject参数的值作为模型,并更改项的安全描述符中的值以匹配AclObject参数中的值。 参数-AclObject指定具有所需属性值的ACL。Set-Acl更改由Path或InputObject参数指定的项的ACL,以匹配指定的安全对象中的值。 可以将Get-Acl命令的输出保存在变量中,然后使用AclObject参数传递变量,或者键入Get-Acl命令。 表1类型:对象位置:1默认值: None接受管道输入: True (ByValue)接受通配符: False

所以,你只要做这样的事.如上述例子所示

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

代码语言:javascript
复制
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 

PropagationFlags.None

下面是一些简洁的PowerShell代码,可以通过修改文件夹现有的ACL (访问控制列表)向其应用新的权限。

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

https://stackoverflow.com/questions/61048814

复制
相关文章

相似问题

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