除非已通过Windows资源管理器打开,否则无法打开sharepoint路径

时间:2016-04-06 15:38:41

标签: powershell sharepoint unc

我希望有人可以解释这一点,因为它一直让我分心。

我有一个脚本,如果路径存在,它将通过UNC路径将它创建的报告保存到sharepoint文档库,否则它将保存到网络驱动器位置的UNC路径作为后备。

我注意到使用test-path进行检查,保存(通过msexcel COM对象)或尝试使用invoke-item在Windows资源管理器中打开文件夹只有在我已经访问过sharepoint时才有效网站(通过网络浏览器 Windows资源管理器),因为PC上次登录(我正在运行Windows 7企业服务包1 - 64位版本)。

如果自上次登录后我还没有手动进行sharepoint,test-path返回false,其他方法会导致ItemNotFoundException,例如

ii : Cannot find path '\\uk.sharepoint.mydomain.local\sites\mycompany\myteam\Shared Documents\Reports' because it does not exist.
At line:1 char:1
+ ii '\\uk.sharepoint.mydomain.local\sites\mycompany\myteam\Shared Document ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (\\uk.sharepoint...\Reports:String) [Invoke-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.InvokeItemCommand

代码示例区域:

$LANPath = "\\myserver\myshare\teamdirs\scriptdir"
$SharepointPath = "\\uk.sharepoint.mydomain.local\sites\mycompany\myteam\Shared Documents\Reoprts"
$ScriptPath = $LANPath + "\bin"
If (Test-Path $SharepointPath) {$BasePath = $SharepointPath;write-host "Using sharepoint to save reports"} else {$BasePath = "$LANPath\Reports";write-host "Using LAN to save reports - sharepoint not accessible"}

$_|select -expandproperty HTMLBody | Out-File $($BasePath + "\Eml_body.html")
    Write-Host "Reformating HTML"
    $html = New-Object -ComObject "HTMLFile";
    $source = Get-Content -Path ($BasePath + "\Eml_body.html") -Raw;

以及从我的COM对象中保存Excel电子表格时:

$workbook._SaveAs($fileout,[Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook,$Missing,$Missing,$false,$false,[Microsoft.Office.Interop.Excel.XlSaveAsAccessMode]::xlNoChange,[Microsoft.Office.Interop.Excel.XlSaveConflictResolution]::xlLocalSessionChanges,$true,$Missing,$Missing)

2 个答案:

答案 0 :(得分:0)

您应该能够使用System.Net.WebClient对象来访问SharePoint文件位置。

$client = New-Object System.Net.WebClient

WebClient.Credentials属性的documentation表明,在这种情况下,默认凭据可能是针对ASP.NET服务器端进程而不是当前用户的凭据:

  

如果WebClient类正在中间层应用程序(例如ASP.NET应用程序)中使用,则DefaultCredentials属于运行ASP页面的帐户(服务器端凭据)。通常,您可以将此属性设置为代表其发出请求的客户端的凭据。

因此,您可能需要手动设置凭据。你可以用纯文本插入它们......

$client.Credentials = New-Object System.Net.NetworkCredential("username","pswd","domain")

...或者您可以提示当前用户提供凭据。

$client.Credentials = Get-Credential

这是一个抓取文件并将其内容写入屏幕的示例:

$client = New-Object System.Net.WebClient
$client.Credentials = Get-Credential

$data = $client.OpenRead("http://yoursharepointurl.com/library/document.txt")
$reader = New-Object System.IO.StreamReader($data)
$results = $reader.ReadToEnd()
Write-Host $results
$data.Close()
$reader.Close()

答案 1 :(得分:0)

我知道这是一个旧帖子,但对于那些搜索,请查看此链接:https://www.myotherpcisacloud.com/post/Sometimes-I-Can-Access-the-WebDAV-Share-Sometimes-I-Cant!

由于SharePoint通过WebDav公开其共享,因此您需要确保WebClient服务正在您从中访问路径的计算机上运行。浏览器中的路径浏览会自动启动服务,而命令行方法则不会。

如果您将WebClient的启动类型更改为自动,则应解决此问题。