我希望有人可以解释这一点,因为它一直让我分心。
我有一个脚本,如果路径存在,它将通过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)
答案 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的启动类型更改为自动,则应解决此问题。