使用变量调用icacls时参数无效

时间:2013-06-10 08:04:01

标签: powershell powershell-ise

当我在Powershell ISE中运行此脚本时:

[System.Threading.Thread]::CurrentThread.CurrentCulture = 'en-us'
$folder = Read-Host 'Dove sono le cartelle degli utenti?'
$name = Read-Host 'Specificare la cartella dell utente?'
takeown /f $folder\$name /r /d Y
icacls $folder\$name /t /c /grant T135837TS:F /q
icacls $folder\$name /grant ([String]($name.replace(".V2",""))):F /t /c /q

我收到此错误:

icacls : Invalid parameter "npac001"
At line:1 char:1
+ icacls $folder\$name /grant ([String]($name.replace(".V2",""))):F /t /c /q
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (Invalid parameter "npac001":String) [],  RemoteException
+ FullyQualifiedErrorId : NativeCommandError

npac001是必须拥有权限的用户。

1 个答案:

答案 0 :(得分:0)

您的问题是icacls没有将用户和访问保护规则(:f)视为一个参数。

尝试在以下部分放置单引号:

 icacls $folder\$name /grant '([String]($name.replace(".V2","")))':F /t /c /q

尝试创建访问保护规则,然后再将其提供给icacls,例如:

$user = ([String]($name.replace(".V2","")))
$rule = "'$user':f"
icacls "C:\folder" /grant $rule /t /c /q

注意:在给定的访问类型之前,用户周围引用单引号,例如:f。因此$rule在传递给icacls之前应该看起来像这样。 "'npac001':f"