使用invoke-webrequest时,Powershell返回HTML代码而不是Excel文件

时间:2015-01-15 20:10:03

标签: html powershell

我正在尝试创建一个从Sharepoint站点下载Excel文件的脚本。这是脚本:

$FilePath = "https://example.com/SPREAD_SHEET.xlsx"

Invoke-WebRequest $FilePath -OutFile c:\temp

该脚本下载一些HTML源代码而不是下载Excel文件。我认为这是由于我们的SSO解决方案。如果我在Web浏览器中手动浏览到该URL,则会打开Excel文件,而不是提示我输入用户名/密码。

我正在试图弄清楚如何创建一个标头来提供我的凭据来调用webrequest,但我正在努力。

以下是下载HTML的摘录:

<form   name=""Login""  action=""/gmgameosso/UI/Login?AMAuthCookieGAMEp=AQIC5wM2LY4SfcwsKN671oA8AxdFBbOl8C3K7VVzjpS%2Bu3k%3D%40AAJTSQACMDIAAlMxAAIwNg%3D%3D%23""  method=""post"">"
<script> elmCount = 3; </script>"
<input name=""IDToken0"" type=""hidden"">"
<input name=""IDToken1"" type=""hidden"">"
<input name=""IDToken2"" type=""hidden"">"
<input name=""IDButton"" type=""hidden"">"

<input type=""hidden"" name=""goto"" value=""L1NTT1JlZGlyZWN0L21ldGFBbGlhcy9nbS9nYW1lL2lkcD9SZXFJRD1pZC0wMGY3N2ExMC04OWI4LTQzMTYtOGI0Yi05ZWZhYTZmMzdmZjA="">"
<input type=""hidden"" name=""gotoOnFail"" value="""">"
<input type=""hidden"" name=""SunQueryParamsString"" value=""QU1BdXRoQ29va2llR0FNRXA9QVFJQzV3TTJMWTRTZmN3c0tONjcxb0E4QXhkRkJiT2w4QzNLN1ZWempwUyt1M2s9QEFBSlRTUUFDTURJQUFsTXhBQUl3Tmc9PSMmcmVhbG09L2dtL2dhbWUmZm9yd2FyZD10cnVlJnNlcnZpY2U9bGRhcFNlcnZpY2Umbm9uZT0mc3BFbnRpdHlJRD1odHRwczovL2FkZnMuZ20uY29tL2FkZnMvc2VydmljZXMvdHJ1c3Q="">"
<input type=""hidden"" name=""encoded"" value=""true"">"
<input type=""hidden"" name=""dateStr"" value=""1420830736215"">"
<input type=""hidden"" name=""pageTimeOut"" value=""300"">"
<input type=""hidden"" name=""gx_charset"" value=""UTF-8""></form>"

2 个答案:

答案 0 :(得分:0)

你可以这样做:

$web = New-Object Net.WebClient

$web.DownloadFile("http://www.MyHost.com/Links.png", "C:\test.png");

答案 1 :(得分:0)

您必须为-OutFile指定完整的文件路径,或将其留空以使用当前位置。

如果您对网站使用集成Windows身份验证,则可以尝试使用-UseDefaultCredentials。

$FilePath = "https://example.com/SPREAD_SHEET.xlsx"
Invoke-WebRequest $FilePath -OutFile "c:\temp\Spread Sheet.xlsx" -UseDefaultCredentials

如果您未在站点上使用集成Windows身份验证,则可以使用-SessionVariable参数,解析您为登录页面返回的html,填写登录字段并使用Invoke-Webrequest发送带有该功能的POST登录信息进行身份验证。然后,您可以使用该WebSession对象发送更多请求。请参阅Example 2 for the Invoke-WebRequest帮助。在那里有一个完整的登录FaceBook的例子。