Powershell 使用icacls设置文件夹权限

Powershell 使用icacls设置文件夹权限,powershell,permissions,icacls,Powershell,Permissions,Icacls,我很尴尬,我不得不问这个问题,但由于powershell中icacls的语法显然发生了变化,我似乎无法汇编一个工作命令 我想做什么: icacls $MyFolder /inheritance:r /grant: $Domain\Env:Username:(OI)(CI)F /T /grant: SYSTEM:(OI)(CI)F /T 我想删除特定文件夹中的所有权限,然后添加“当前登录用户”和“系统”以获得完全控制权。但不是管理员或其他任何人 我所拥有的: icacls $MyFolder /

我很尴尬,我不得不问这个问题,但由于powershell中
icacls
的语法显然发生了变化,我似乎无法汇编一个工作命令

我想做什么:

icacls $MyFolder /inheritance:r /grant: $Domain\Env:Username:(OI)(CI)F /T /grant: SYSTEM:(OI)(CI)F /T
我想删除特定文件夹中的所有权限,然后添加“当前登录用户”和“系统”以获得完全控制权。但不是管理员或其他任何人

我所拥有的:

icacls $MyFolder /inheritance:r /grant: $Domain\Env:Username:(OI)(CI)F /T /grant: SYSTEM:(OI)(CI)F /T
但每次我执行命令时都会出错

(OI)(CI)/T未被识别为cmdlet或命令

我在网上读过一些技巧,用不同的引号或反勾号来表示参数,但对我来说没有任何效果


有人能告诉我我做错了什么吗?

正如您所暗示的,这里的问题不是PowerShell中的语法是
icalcs
已更改,而是PowerShell在执行带有参数的外部命令(可执行文件)时可能会出现异常行为

有几种处理参数的方法,其中之一是将参数作为字符串数组传递:

$IcalcArgs = @(
    $MyFolder,
    '/inheritance:r',
    "/grant:$Domain\$($Env:Username):(OI)(CI)F",
    "/T",
    '/grant:SYSTEM:(OI)(CI)F',
    '/T'
)

& icalcs @IcalcArgs

哇,再次感谢你的超级快速答题!这真奇怪。在这种情况下,我将使用单独的CMD脚本处理权限。如果所有内容都包含在一个脚本中,那就太好了:)我刚刚注意到在您的代码中,您还将
Env:username
放在了您可能指的
$Env:username
的位置(它还需要包含在
$()
中)。仅供参考。对于“正常”变量,应避免使用like
$args
的名称。我还建议使用将数组传递给命令。不应该对可执行文件产生影响,但是如果不使用参数数组,函数或脚本块的行为会有所不同。