PowerShell脚本返回“远程服务器返回错误:(401)未经授权”

时间:2020-01-25 13:43:30

标签: powershell sharepoint

我想从“共享”点下载所有文件,并找到了有用的资源:https://social.technet.microsoft.com/Forums/en-US/7b8a27f9-ae0e-443e-a4a4-8c1cb2ee3429/downloading-files-in-sharepoint-online-powershell?forum=sharepointdevelopment,并按照步骤

Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"  
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"  

$userName = "myemail@web.com" 
$siteCollectionUrl = "https://web.sharepoint.com" 
$webUrl = $siteCollectionUrl + "/sites" 
$docLibraryTitle = "Application" 
$destinationLocalFolder = "C:\test" 
#------------------------------------------------ 
Import-Module C:\SPOMod\SPOMod20160326.psm1 
#------------------------------------------------ 
 Connect-SPOCSOM -Username $userName -Url $webUrl 

#Download document function 
function HTTPDownloadFile ($serverFileLocation, $downloadPath) 
{  
    #create secure password 
    $sPassword = $password | ConvertTo-SecureString -AsPlainText -Force 

    $webClient = New-Object System.Net.WebClient  
    $webClient.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userName, $sPassword) 
    $webClient.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") 

    [System.Uri]$destinationUri = [System.Uri]$serverFileLocation 

    Write-Host "Downloading" $serverFileLocation "as" $downloadPath 

    $webClient.DownloadFile($destinationUri, $DownloadPath) 
    $webClient.Dispose() 
} 

#------------------------------------------------ 
#Get files (not dirs) 
$listItems = Get-SPOListItems -ListTitle $docLibraryTitle -IncludeAllProperties $true -Recursive | where {$_.FsObjType -eq 0} 

#Iteration on all files in doc. library 
foreach ($item in $listItems) 
{ 
    [string]$sourceDirectory = $item.FileDirRef 
    [string]$sourceFileName = $item.FileLeafRef 
    [String]$sourceFileUrl = $siteCollectionUrl + $item.FileRef 

    #create destination directory 
    [string]$destinationDirectory = $destinationLocalFolder + $sourceDirectory 
    $destinationDirectory = $destinationDirectory.Replace("/","\") 
    if (!(Test-Path -path $destinationDirectory)) 
    { 
        New-Item -path $destinationDirectory -type directory  
    } 

    #download current version document 
    [string]$destinationFilePath = $destinationDirectory + "\" + $sourceFileName 
    HTTPDownloadFile $sourceFileUrl $destinationFilePath 
} 

脚本查找所有文件,但尝试下载时: 错误:

Exception calling "DownloadFile" with "2" argument(s): "The remote server returned an error: (401) Unauthorized."
At C:\Users\SHAREPOINT.ps1:28 char:5
+     $webClient.DownloadFile($destinationUri, $DownloadPath)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

请帮助。

1 个答案:

答案 0 :(得分:0)

测试脚本:

Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" 

$userName = "user@xxx.onmicrosoft.com" 
$siteCollectionUrl = "https://xxx.sharepoint.com" 
$webUrl = $siteCollectionUrl + "/sites/lee" 
$docLibraryTitle = "MyDoc4" 
$destinationLocalFolder = "C:\test" 
#------------------------------------------------ 
Import-Module C:\Lee\Script\SPOMod\SPOMod20160326.psm1 
#------------------------------------------------ 
Connect-SPOCSOM -Username $userName -Url $webUrl 

#Download document function 
function HTTPDownloadFile ($serverFileLocation, $downloadPath) 
{  
    #create secure password 

    #$sPassword=$global:Password

    $webClient = New-Object System.Net.WebClient  
    $webClient.Credentials = $global:ctx.Credentials
    $webClient.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") 
    #$webClient.Headers.Add("User-Agent: Other");
    [System.Uri]$destinationUri = [System.Uri]$serverFileLocation 

    Write-Host "Downloading" $serverFileLocation "as" $downloadPath 

    $webClient.DownloadFile($destinationUri, $DownloadPath) 
    $webClient.Dispose() 
} 

#------------------------------------------------ 
#Get files (not dirs) 
$listItems = Get-SPOListItems -ListTitle $docLibraryTitle -IncludeAllProperties $true -Recursive | where {$_.FsObjType -eq 0} 

#Iteration on all files in doc. library 
foreach ($item in $listItems) 
{ 
    [string]$sourceDirectory = $item.FileDirRef 
    [string]$sourceFileName = $item.FileLeafRef 
    [String]$sourceFileUrl = $siteCollectionUrl + $item.FileRef 

    #create destination directory 
    [string]$destinationDirectory = $destinationLocalFolder + $sourceDirectory 
    $destinationDirectory = $destinationDirectory.Replace("/","\") 
    if (!(Test-Path -path $destinationDirectory)) 
    { 
        New-Item -path $destinationDirectory -type directory  
    } 

    #download current version document 
    [string]$destinationFilePath = $destinationDirectory + "\" + $sourceFileName 
    HTTPDownloadFile $sourceFileUrl $destinationFilePath 
}