PowerShell里使用HttpWebRequest

PowerShell有个强大的地方,就是和DotNet做了深度整合,可以直接在PowerShell脚本里调用DotNet的类库。这样做的一个好处便是,如果你已经有一定的C#的基础,你将会发现PowerShell非常容易上手。

举个实际的例子,在写脚本实现系统环境自动化安装和配置时,一个常见的需求是从官方网站自动下载最新的软件版本,然后用命令行方式安装。关于http下载,用C#实现自动化可以直接用HttpWebRequest实现,在PowerShell下实现起来基本类似。下面代码演示了如何用PowerShell从微软官方的SilerLight下载地址http://go.microsoft.com/fwlink/?LinkID=149156下载最新的SilverLight,并且保存到本地的c:temp文件夹。

$webRequest = [System.Net.HttpWebRequest]::Create("http://go.microsoft.com/fwlink/?LinkID=149156")
$webRequest.Method = "GET";
$webRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"

$response = $webRequest.GetResponse()
$stream = $response.GetResponseStream()

$reader = New-Object System.IO.BinaryReader($stream)
$bytes = New-Object System.Byte[] $response.ContentLength 

for ($read = 0; $read -ne $bytes.Length; $read += $reader.Read($bytes,$read,$bytes.Length - $read) ){ }
[System.IO.File]::WriteAllBytes("c:tempSilverLight.exe",$bytes);

是不是和C#的写法很像?


Comments

16 responses to “PowerShell里使用HttpWebRequest”

Leave a Reply