2011-01-14 8 views
15

私の雇用場所には気質の高いプロキシサーバがあり、これはしばしばナゲットパッケージのウィンドウを使用不可能にします(同じことはナゲットのコマンドラインにも当てはまります)。私は最も頻繁に使用するパッケージをネットワーク共有上のローカルミラーにコピーし始めましたが、これを手動で行うのは面倒です。私はパッケージを自動的にダウンロードするためにpowershellを使って実験しましたが、いくつかのパッケージ以上を表示するodata URIを得ることはできません。たとえば、次のクエリを実行します。公式のナゲットパッケージリポジトリをミラーリングする

$feed = [xml]$webClient.DownloadString("http://feed.nuget.org/ctp2/odata/v1/Packages?$filter=startswith(Title,'O') eq true&$top=100") 

「O」で始まるタイトルを持つ上位100個のパッケージを返しますが、パッケージは返されません。奇妙なことに、これはhttp://feed.nuget.org/ctp2/odata/v1/Packagesを打つことによって返されるパッケージのデフォルトリストにあるパッケージ名でうまく動作します。私はを推測しています。ページングのいくつかの種類があります。ここでは、最初のページだけをクエリしています。パラメータで遊んでも、次のページに切り替えることができないようです...

他に誰かがこれをやろうとしましたか?他の誰かがナゲットを使ってタイムアウト/悪い要求に気付いたのですか?

答えて

9

ジョンギャロウェイは、リポジトリ全体をダウンロードするPSスクリプトを掲載しました。私はいくつかのマシンでそれを使用して、それは私にとって素晴らしい作品です。

http://weblogs.asp.net/jongalloway/downloading-a-local-nuget-repository-with-powershell

+0

これはすばらしい答えでした。私はpsスクリプトを使いました。後でNuget.Downloaderを使いました。しかし、今日私は、両方が働いていないことを発見しました。あなたはこの質問の更新された答えを持っていますか? –

2

文字列を二重引用符で囲む場合は注意が必要です。

PS> "?$filter=startswith(Title,'O') eq true&$top=100" 
?=startswith(Title,'O') eq true&=100 

PS> "?`$filter=startswith(Title,'O') eq true&`$top=100" 
?$filter=startswith(Title,'O') eq true&$top=100 

バックスティックでドル記号をエスケープしてください。

私は正しいURLでサイトを照会しようとしましたが、結果のエントリが返されませんでした。だからまだ運がないし、サービスに何か問題があるかもしれない。

3

私の提案は、あなたがこれを行うことができ、単にプロキシ機能でNew-ODataServiceProxyあるいはダグ・フィンケのPSOdata project

を使用することです:

New-ODataServiceProxy http://packages.nuget.org/v1/FeedService.svc/ NuGet 
# Chain up calls to AddQueryOption (please excuse my line wrapping): 
$NuGet.Packages.AddQueryOption('$filter',"startswith(Title,'O') eq true" 
      ).AddQueryOption('$top','3') | 
Format-Table Id, Version, Authors, Description -Wrap -Auto 
関連する問題