这是我的代码,其中包含了相关部分:
Get-ChildItem -LiteralPath $somepath -Directory | ForEach-Object {
Step $_.FullName
}
function Step {
Param([string]$subfolder)
$folders = Get-ChildItem -LiteralPath $subfolder -Directory -ErrorVariable $HasError -ErrorAction SilentlyContinue
if ($HasError) {
Write-Host $_.FullName "|" $HasError.Message
return
} else {
$hasError, $inactive = FolderInactive $_.FullName
if ($hasError) {
#do nothing
} else {
if ($inactive) {
SetFolderItemsReadOnly $_.FullName
}
}
}
if ($folders) {
$folders | ForEach-Object {
Step $_.FullName
}
}
}
function SetFolderItemsReadOnly {
Param([string]$Path)
$files = Get-ChildItem -LiteralPath $Path -File -ErrorAction Stop
foreach ($file in $files) {
try {
Set-ItemProperty -LiteralPath $file.FullName -Name IsReadOnly -Value $true
} catch {
Write-Host $file.FullName " | " $_.Exception.Message
}
}
}
我在 SetFolderItemsReadOnly
函数中使用 Set-ItemProperty
会出现一些错误,即
异常设置“IsReadOnly”:“拒绝访问路径 . ”
这是由于一些安全权限 . 但是在终端中打印出这个错误后,我也会收到一个巨大的红色错误:
Cannot overwrite variable false because it is read-only or constant.
At pathtoscript:55 char:5
+ $folders = Get-ChildItem -LiteralPath $subfolder -Directory -ErrorVariable ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (false:String) [], SessionStateUnauthorizedAccessException
+ FullyQualifiedErrorId : VariableNotWritable
为什么会出现此错误?
1 回答
正如@DavidBrabant指出的那样,参数
-ErrorVariable
只需要变量的名称,而不是前导$
. 此外,此变量的目的不是布尔指示器是否发生错误(PowerShell已经通过automatic variable$?
提供此信息),而是接收实际的错误对象 .来自documentation: