icacls拒绝用户名

时间:2016-06-17 21:46:29

标签: windows powershell icacls

我正在尝试更改文件列表的访问权限(递归):

$global:unc = "\\.\"   # unc-format
$files = Get-ChildItem c:\Users\loli\test\ -Filter *.txt -Recurse -Force |
         % { $_.FullName }
$username = Read-Host

giveAccess $files $username

function giveAccess ( $files, $username ) {
    foreach ( $file in $files) {
        icacls ($unc+$dat) /grant $username:F
    }
}

不幸的是,我收到了错误:

icacls : Ungültiger Parameter: "/grant"
In Zeile:9 Zeichen:13
+             icacls ($unc+$dat) /grant $username:F
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Ungültiger Parameter: "/grant":String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

显然它抱怨$username字符串,但我不知道如何更改它。

1 个答案:

答案 0 :(得分:4)

$username:F与其他PowerShell语法发生冲突;名称中带冒号的变量已具有含义。它是一个特定的PSProvider或范围,例如$variable:PSHome是一个环境变量,$global:myCounter是一个全局范围变量。

$username:F是一个变量名称,未设置,因此评估为$null并且icacls会抱怨。

通过以某种方式将两件事分开来解决这个问题:

icacls foo.txt /grant "$($username):F"

icacls foo.txt /grant $username":F"

icacls foo.txt /grant ($username + ":F")