[PS]使用 PowerShell 下载文件

[ 2014/02/24 13:05 | by gOxiA ]

powershell_logo

使用 PowerShell 下载文件

        前段时间部署了一个基于 Windows Server 2012 R2 的 Server Core 环境,在实际使用中会遇到需要从网站上下载文件的问题,因为 Server Core 并未提供 IE,所以下载就不是那么方便了。还好在 PowerShell 下可以调用 System.Net.WebClient 来实现下载。即:

$client = New-Object “System.Net.WebClient”

$client.DownloadFile(“http://www.maytide.net/info.txt”,”D:\info.txt”)

        虽然上述的脚本实现了从一个 URL 下载文件到本地,但是实际调用起来会感觉很麻烦。因为每次都要输入很长的脚本命令才能完成一个下载。gOxiA 在编程方面也没什么天赋,实属一菜鸟,参考了以前的脚本写了一个粗糙的下载脚本,其功能是执行脚本后提示输入 URL 的地址,然后再输入本地存储的文件路径,最后执行下载,并根据结果判断是否下载完毕。

        脚本中涉及了一些基本的命令代码,其中 Write-Host 用于输出提示文本;Read-Host 用于记录用户输入的数据;调用下载、下载地址、本地存储都使用变量,最后用 Test-Path 对下载的文件进行检查,并使用 if...else 进行判断。下面就是整个脚本的内容:

#清屏
Clear
#脚本基本信息提示
Write-Host
Write-Host PowerShell Download Tools Script.
Write-Host
#输入下载资源地址,赋予变量 $url
Write-Host Please enter URL address of download sources! -ForegroundColor Red
$url= Read-Host "Enter the URL..."
Write-Host
#输入文件存储路径,赋予变量 $local
Write-Host Please enter the local store path! -ForegroundColor Green
$local= Read-Host "Enter the store path..."
#调用下载,赋予变量 $dl
$dl= New-Object "System.Net.WebClient"
#执行下载
Write-Host
Write-Host Downloading... Please wait!!!
$dl.DownloadFile("$url","$local")
Write-Host
#将路径检查命令赋予变量 $result
$result=Test-Path $local
#对 $result 结果进行判断,如果是 True 表示下载完成,否则失败
if($result -eq $True)
{
    Write-Host Result status: Completed!!! -ForegroundColor Green
}
else
{
    Write-Host Result status: Failed!!! -ForegroundColor Red
}

        执行效果如下图:

image

ws2012r2-logo

从初始 ServerCore 模式向 FullServer 转换

        还记得 12年12月 gOxiA 与大家分享的两篇关于 Windows Server 2012 运行模式的文章“HOWTO:切换至 Windows Server 2012 的 Minimal Server 模式”、“Windows Server 2012 的四种运行界面模式”,介绍了 Windows Server 2012 如何在几个运行界面模式下进行转换。当时的测试都是基于初始 FullServer 模式进行的,即:带有 GUI 的服务器完整模式。所以当我们执行模式转换时并不会遇到问题,如果 Windows Server 初始安装时是 ServerCore 模式,那么当我们要向 Minimal 或 FullServer 转换时就会遇到错误,如下图所示:

1

        出现这个错误的原因是以前的 Windows 版本中,即使禁用了某个服务器角色或功能,相应的二进制文件仍会保留在磁盘上,占用着磁盘空间,当然这一特性也使我们在日后重复安装角色或功能时而无需提供安装源。但在 Windows Server 2012 中则又有所改变,用户不仅可以禁用某个角色或功能,还可以完全删除相应的文件。即:要完全删除某个角色或功能时,在 Uninstall-WindowsFeature 中使用 –Remove 参数。

        正因为如此,当 Windows Server 初始安装选择的是 ServerCore 模式时,一些角色或功能的二进制文件并未存储在当前系统中,所以当使用常规命令行进行安装时便会出现错误。所以我们需要在执行 Install-WindowsFeature 时使用 –source 参数指定安装源。完整的命令行参考如下:

Install-WindowsFeature server-gui-mgmt-infra –source wim:d:\sources\install.wim:2

2

3

        其中,结尾“:2”为 Install.wim 映像索引 2,即 Windows Server 2012 R2 Standard,与本例初始安装的系统版本对应,如果需要确认 WIM 文件的信息,可以参考如下命令行:

dism /get-wiminfo /wimfile:d:\sources\install.wim

        查阅 TechNet Library 管理服务器核心服务器 资料,发现在 1.5 转换成“完全安装”模式 小节中提到如果希望使用 Windows 更新而不是某个 WIM 文件作为源,则只需要为 Install-WindowsFeature 使用 –Restart 参数,安装时便会自动从微软官方站点获取更新文件。(PS:有意思的方式,-Restart 可是重启参数啊!!!)不过实际测试此种方式并不实用,网络速度是最大的瓶颈!

4

        解决了一个小小的问题,却积累了多个经验!

分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]