【问题标题】:icacls refuses string for usernameicacls 拒绝用户名的字符串
【发布时间】:2016-10-19 20:06:25
【问题描述】:

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

$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 的字符串,但我不知道如何更改它。

【问题讨论】:

    标签: windows powershell icacls


    【解决方案1】:

    $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-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 2014-11-02
      • 2016-08-01
      • 2015-02-28
      相关资源
      最近更新 更多