【发布时间】:2011-06-30 15:22:37
【问题描述】:
我正在尝试设置一个 powershell 脚本来获取加密密钥。该公司将其发布在一个网站上,并希望我们每 6 个月手动获取一次,但是,我很懒惰而且健忘。所以我写了一个脚本来为我做这件事,我将安排每 3 个月左右运行一次。这是我目前所拥有的:
$url ="http://www.theirwebsite.com/pgp/corp07272011Public.asc"
$client = new-object System.Net.WebClient
$proxy = New-Object System.Net.WebProxy("http://OurProxy:80")
$proxy.UseDefaultCredentials = $true
$client.proxy = $proxy
$client.DownloadFile( $url, ".\CorpPublicKey.asc" )
这适用于他们当前的密钥。 但是,我正在下载的文件使用日期作为其名称的一部分。当 2011 年 7 月 27 日到来时,新密钥可能会以 2011 年 1 月 27 日或类似名称命名。
所以这可能是一个简单的 .NET 问题,但我如何找到网站上的哪些文件?还是有更好的方法来解决这个问题?
编辑:好的,我没有提到的一个花絮是这个文件链接到一个已知的网站。 Soooo ...理论上我可以解析网页的链接,并使用它来查找文件名。当/如果我把它全部整理好时,我会发布代码。
编辑,部分 Deux
所以我想出了这个。
1) 您不能简单地在网络服务器上列出文件。这就是网站管理员发布文件树的原因。或者,您可以让蜘蛛爬取网站上的所有链接。
2) 知道网站上总会有指向我的目标的链接,我获取网页,找到链接/文件名,然后可以下载文件。
3) 这样做的正确方法是将其解析为 xml,然后在锚标记中搜索我与 Xpath 或其他东西的链接。
4) 但这很烦人,所以我只是对 .asc 文件进行正则表达式并将其称为完成。
$url ="http://www.theirwebsite.com/pgp/"
$client = new-object System.Net.WebClient
$proxy = New-Object System.Net.WebProxy("http://ourproxy:80")
$proxy.UseDefaultCredentials = $true
$client.proxy = $proxy
$webstring = $client.DownloadString( $url)
$webstring -match "aspecifcname.*asc"
$matches[0]
$url ="http://www.theircompany.com/pgp/" + $matches[0]
"url: " + $url
#Huh, we need to use the full path for downloading this file. .\ didn't cut it
$client.DownloadFile( $url, "C:\Program Files (x86)\theirCompany\savedKey.asc" )
【问题讨论】:
-
可以返回一个目录下的文件列表
-
@harryovers:对不起,宝贝。如何列出网站的文件?或者如何将网站视为目录?