0

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

$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 参数:“/grant”
在 Zeile:9 Zeichen:13
+ icacls ($unc+$dat) /grant $用户名:F
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (Ungültiger 参数: "/grant":String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

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

4

1 回答 1

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")
于 2016-06-17T23:35:36.190 回答