2016-06-21 73 views
0

我想通过休息电话来获取文件的etag号码。我需要能够将etag编号存储到文本文件中。由于我需要在PowerShell v2.0上进行此项工作,因此我不能使用Invoke-WebRequest方法,因为它不受支持。Powershell休息电话etag

$response = Invoke-WebRequest -Uri $uri 
$response | select @{n='ETag';e={ $_.Headers.ETag }} 

我想用点网方法 -

$response = New-Object System.Net.WebClient 
$etag = $response.DownloadString($URI) 

但是我得到的垃圾输出。我运行时的输出示例$etag -

PK ÁMÕHÖnÖ™ª ? SelfDiscovery.ps1í]{sǑ￯ê¾ÃfÉD€+ñCË¡)*VE¹ 
Ú¼*ÓÅPBø)ó~õ»ôc3³;»X€ A-§P ÅÅlwO?~Ý=3ýßÿÃ[email protected]úp 
Ç°çøÂ%þìâ5ú¤#ÀŒá?á?øMwìÁ{¼šâ¿RgDð_§øJà:H…®_âßü”èñ>úý;~N£ˆ[¯¥þ•àH¢) 
òtrò•3¤©[xíU†³ð Z]¼—FwP¾CŸZ9ºH{ÄŸž3âØÃßtE¸ßJCÒöñÕã7qv5ò¯’D#ä8à‘–ËÖÐÿ{ 
È’é'ßãß)s㿈ï¥÷¹¯]C|÷'s½d]Ùñ$±Ðë9<í¼ÏXo]¶Þ9¼3¥;š¬'EÞòU²œ¯Û##I2b=¨ÝÖXWøi 
ÌΘôSôYßà»ÛðÒÈ°›8CÒâä÷O¼ÒHqOás8DY†(=Ñëà¿{ì‹'8¦ /YV±Ñ¶ÜöàçØGžOñ“-ØÅÏ 
O²Wø×ðóu–hïNà_,×>ë—fÜÌHõ(T‡?ç5ØÀ÷!ê3Ëcÿ¾Rü×.Ïù©Y¿»Hï€yßLø¿4úî°íò2Ð 
˜Ä¼Êµ–ˆî¿ñüù5ò:á»H»#ÃkÈÔ$^5V¬7$²ñü3Gß ¡]èNñˆ-ô®1ÇçqBhÐ<O9ÂFï(š«Ã0µ†áEöq 
Qãx¡\rô•ïwl¯¼ëbá<]ÚʯÇÿ­ùCNÊEH‘¥yPˆÝ-ƒùÕd•(žMÆpU•G§HGø:幟!Å'ð|_àÕ6^=Æ 

有没有人见过这个?我不知道我做错了什么,我之前使用过这个方法来进行API调用。

更新 - 感谢托尼评论,我可以得到该文件下载

$response = New-Object System.Net.WebClient 
$etag = $response.DownloadFile($URI,$file) 

但是我怎么弄的eTag?我正试图将下载的etag与call etag进行比较。如果有不同,请下载并解压缩。

+1

“PK”开头提示压缩(zip)输出。你需要解压缩它。这不可能从一个字符串,所以使用'DownloadData'或'DownloadFile'来代替。这里是一个有用的“魔法标记”列表:https://en.wikipedia.org/wiki/List_of_file_signatures – TToni

+0

@Toni谢谢,我需要能够下载该文件,以帮助通过一点帮助解决问题从 - [Technet](https://social.technet.microsoft.com/Forums/scriptcenter/en-US/00bd2230-ec02-4a91-940c-3ad252220a08/using-powershell-to-download-multiple-video-from- a-website?forum = winserverpowershell) –

回答

2

etag存储在HTTP头文件中,您使用WebClient.DownloadString方法所做的工作是下载文件并将其存储在$etag变量中。相反,请尝试使用WebResponse对象访问响应标头:

$request = [System.Net.HttpWebRequest]::Create($Uri) 
$response = $request.GetResponse() 
$etag = $response.Headers["ETag"] 
+0

谢谢你的帮助。这是完美的。 Powershell 2.0使其更难研究。 –