如何在跨域的 powershell 中处理文件访问授权?

问题描述 投票:0回答:1

我正在开发一个从网络域控制器启动的 Powershell 脚本,它访问每个工作站上每个用户的本地文档文件夹。我需要做的就是列出文档目录的内容以及任何子目录的内容。初始访问运行良好,我能够读取用户文档目录的所有项目,但是一旦我开始访问子目录,我就会遇到 UnauthorizedAccessException 错误,并且我没有看到明显的原因为什么。

Add-Content : Access to the path '\\***-021.****.local\c$\Users\*******\Documents\CyberLink' is denied.
At C:\***\Powershell\DocuTriever\Docutriever v1.ps1:30 char:17
+                 Add-Content -Path $path "$($item.Name)"
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (\\***-021.****....ments\CyberLink:String) [Add-Content], UnauthorizedAccessException
    + FullyQualifiedErrorId : GetContentWriterUnauthorizedAccessError,Microsoft.PowerShell.Commands.AddContentCommand

(出于隐私考虑,我替换了一些名称)我可以看到错误指向 Add-Content 的使用,这意味着它仍然能够使用 Get-childitem 获取项目,但我不明白为什么命令失败。我正在访问测试路径中的名称,检查几行之前。

下面我发布了我为此使用的两个主要函数。 Get-UserDocuments 检查用户是否拥有文档,并设置输出文件。 Show-FolderContents 递归地进入文件夹,并将内容打印到 out 文件夹中。

function Get-UserDocuments($path, $user, $computerName) {
    Write-Host "Working on user $($user.name)"

    $documents = "\\$($computer.DNSHostName)\c$\Users\$($user.Name)\Documents"
    if ((Test-Path -path $documents) -and (Test-Path -path "$documents\*")) {
        $path = "$path\$($user.Name).txt"
        New-Item -Path $path -ItemType file
        Show-FolderContents -path $path -folder $documents
    }
    else {
        Write-Host "$($user.name) has no local documents"
    }
}

function Show-FolderContents($path, $folder) {
    $items = get-childitem -path $folder | Select-Object Name

    if ($items) {
        Add-Content -Path $path $folder
        foreach ($item in $items) {
            if (Test-Path -Path "$folder\$($item.name)" -PathType Container) {
                Show-FolderContents -Path "$folder\$($item.name)" -Output $path
            }
            else {
                Add-Content -Path $path "$($item.Name)"
            }
        }
        Add-Content -Path $path ""
    }
    else {
        Add-Content -Path $path "$folder is empty"
    }

}

有人知道我做错了什么,或者如何追踪错误的根源吗?

powershell directory-structure unauthorizedaccessexcepti
1个回答
0
投票

添加内容是引发错误的原因。 此 CMDLet 用于将数据回显到文件末尾。 (类似于 bash echo "value" >> file)

您实际上正在尝试使用“添加内容”命令将空值或“$folder 为空”写入当前的 $path 变量中。

GCI(Get-ChildItem)已经具有文件夹递归功能。 您可以使用该 CMDlet 极大地简化您的代码。

© www.soinside.com 2019 - 2024. All rights reserved.