背景:
阅读新闻

get box files - recursive

  作者: 今日评论: [字体: ]
#getBoxFiles.ps1
#created by mikebai 2021/07/15 jpfocus.com

$topFolderId = "0"
$topFolderName = "BoxTop"

# https://developer.box.com/reference/get-folders-id-items/
# https://developer.box.com/reference/resources/file/#param-content_created_at
# file info props > https://developer.box.com/reference/get-files-id/#response-example
$urlTemplate = "https://api.box.com/2.0/folders/{0}/items?fields=name,id,type,created_by,created_at,modified_at,modified_by&limit=100000"

$devToken = "xxxxxxxxxxxxxxx" # you can get dev token id from > https://app.box.com/developers/console
$formatter1 = "yyyy_MM_dd"
$formatter2 = "yyyy_MM_dd__HH_mm_ss"
$formatter3 = "yyyy/MM/dd HH:mm:ss"
$scriptFolder = split-path -parent $MyInvocation.MyCommand.Definition
$tabTag = "`t"
$Headers = @{}
$Headers = @{"Authorization" = "Bearer $devToken" }
function getFiles {
    param (
        [Parameter(Mandatory = $true)]
        [ValidateNotNull()]
        [string]$parentFolderId,

        [Parameter(Mandatory = $true)]
        [ValidateNotNull()]
        [string]$parenFoldertName,

        [Parameter(Mandatory = $true)]
        [ValidateNotNull()]
        [Int32]$layerLevel
    )

    $url = $urlTemplate -f $parentFolderId
    $fileInfoList = Invoke-RestMethod -Method Get -Uri $url -Headers $Headers

    if ( $null -eq $fileInfoList -or $null -eq $fileInfoList.entries -or 0 -eq $fileInfoList.entries.Length) {
        Write-Host "not found."
        return
    }

    foreach ($fileInfo in $fileInfoList.entries) {
        $ftype = $fileInfo.type
        $fid = $fileInfo.id
        $fname = $fileInfo.name
        $created_by = $fileInfo.created_by.name;
        $modified_by = $fileInfo.modified_by.name;
      
        #todo dt convert failed
        # $created_at = $($fileInfo.created_at).ToString($formatter3)
        # $modified_at = $($fileInfo.modified_at).ToString($formatter3)
        $created_at = $fileInfo.created_at
        $modified_at = $fileInfo.modified_at

        $itemLink = ""
        $parentFolderLink = ""

        if ("folder" -eq $ftype) {
            Write-Host "item type > folder"
            $itemLink = "https://app.box.com/folder/${fid}"
            $parentFolderLink = "https://app.box.com/folder/${parentFolderId}"
        }
        elseif ("file" -eq $ftype) {
            Write-Host " item type > file"
            $itemLink = "https://app.box.com/file/${fid}"
            $parentFolderLink = "https://app.box.com/folder/${parentFolderId}"
        }
        elseif ("web_link" -eq $ftype) {
            Write-Host " item type > web_link``"
            $itemLink = "not supported"
            $parentFolderLink = "https://app.box.com/folder/${parentFolderId}"
        }
        else {
            Write-Host "unknown item type > $ftype"
            $itemLink = "https://app.box.com/file/${fid}"
            $parentFolderLink = "https://app.box.com/folder/${parentFolderId}"
        }

        $ary = @($fid, $ftype, $fname, $layerLevel.ToString(), $itemLink, $created_by, $created_at, $modified_by
            , $modified_at, $parentFolderId, $parenFoldertName, $parentFolderLink)
        
        $lineStr = $ary -join $tabTag
        $lineStr | Out-String | Out-File $csvResultFileName -Encoding utf8 -Append -NoNewline

        if ("folder" -eq $ftype) {
            getFiles -parentFolderId $fid -parenFoldertName $fname -layerLevel $($layerLevel + 1)
        }
    }
}

try {

    $dtNowStart = $(Get-Date)

    # [string]$csvResultFileName = "${scriptFolder}\\boxfiles-$($dtNowStart.ToString($formatter2)).csv"
    [string]$csvResultFileName = "${scriptFolder}\\boxfiles-$($dtNowStart.ToString($formatter1)).csv"
    $itemLink = "https://app.box.com/folder/${topFolderId}"

    $ary = @("exec time", $dtNowStart.ToString($formatter3))
    $lineStr = $ary -join $tabTag
    $lineStr | Out-String | Out-File $csvResultFileName -Encoding utf8 -NoNewline
  
    $ary = @("fid""ftype""fname""layerLevel""itemLink""created_by""created_at""modified_by""modified_at""parentFolderId""parenFoldertName""parentFolderLink")
    $lineStr = $ary -join $tabTag
    $lineStr | Out-String | Out-File $csvResultFileName -Encoding utf8 -NoNewline -Append

    $ftype = "topfolder"
    $fid = $topFolderId
    $fname = $topFolderName
    $created_by = "-"
    $created_at = "-"
    $modified_by = "-"
    $modified_at = "-"
    $layerLevel = 0;
    $itemLink = "https://app.box.com/folder/${fid}"
    $ary = @($fid, $ftype, $fname, $layerLevel, $itemLink, $created_by, $created_at, $modified_by, $modified_at, $parentFolderId, $parenFoldertName, $parentFolderLink)
    $lineStr = $ary -join $tabTag
    $lineStr | Out-String | Out-File $csvResultFileName -Encoding utf8 -NoNewline -Append
  
    getFiles -parentFolderId $topFolderId -parenFoldertName $topFolderName -layerLevel 1

    Write-Host "exec finished > $csvResultFileName"
}
catch {
    Write-Host $_.exception.message
    Write-Output $_.exception.message
}

来源:本站
录入日期:[2021/07/15 16:24:00]
收藏 推荐 打印 | 录入:mikebai | 阅读:
文章评论      
正在加载评论列表...
评论关闭