在Powershell中,您可以直接将文件下载到字符串中吗,而不是从Web请求中下载CSV文件来驱动?我经常从USGS数据库中提取地震数据,该数据库将数据输出为可下载的CVS文件。问题是每天要提取数据,而当提取数年的数据时,我最终要提取一千个或更多文件,然后将它们通过管道传输在一起。如果我可以直接下载到字符串中,那么可以通过在内存中完成所有操作来消除一千个或更多文件所需的读写文件时间。
用于提取文件的代码的基本部分是:
$U = $env:userprofile
$Location = "Region_Earthquakes"
$MaxLat = "72.427"
$MinLat = "50.244"
$MaxLon = "-140.625"
$MinLon = "-176.133"
$yearspulled = 1
$ts = New-TimeSpan -Days 1
$Today = Get-Date
$StartDate = [datetime](((Get-Date -format "yyyy") - $yearspulled + 1).ToString() + "-01-01 00:00:00")
While ($StartDate -le $Today)
{$EndDate = $Startdate + $ts
$Start = $StartDate.ToString("yyyy-MM-dd HH:mm:ss")
$FileDate = $StartDate.ToString("yyyy_MM_dd")
$End = $EndDate.ToString("yyyy-MM-dd HH:mm:ss")
$url = "http://earthquake.usgs.gov/fdsnws/event/1/query.csv?starttime=$Start&endtime=$End&minmagnitude=-1.00&maxmagnitude=10.00&maxlatitude=$MaxLat&minlatitude=$MinLat&maxlongitude=$MaxLon&minlongitude=$MinLon&eventtype=earthquake&orderby=time"
$output = "$U\DownLoads\$Location" + "_$FileDate.csv"
(New-Object System.Net.WebClient).DownloadFile($url, $output)
Write-Output "Date pulled for $Start"
$Startdate = $Startdate + $ts}
答案 0 :(得分:0)
如有疑问,请阅读documentation。 System.Net.WebClient
类具有一种方法DownloadString()
,可以完全满足您的要求。
WebClient.DownloadString方法
命名空间:System.Net
程序集:System.dll,netstandard.dll,System.Net.WebClient.dll,System.Net.dll以字符串形式下载请求的资源。 可以将下载的资源指定为包含URI的字符串或Uri。
强调我的。
$s = (New-Object System.Net.WebClient).DownloadString($url)