我正在尝试更改文件列表的访问权限(递归):
$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
字符串,但我不知道如何更改它。
答案 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")