[PowerShell]NuGetからパッケージをダウンロードする
経緯
社内の大幅組織変更の予定のため、EXCELでADのユーザー情報を一括で登録できるように検討したところ、ClosedXMLを使ってPowerShellからEXCELを操作できるという記事を見つけました。
@miyamiyaさんの記事
PowerShell で ClosedXML を使って Excel ファイルを作成する
ただ、ClosedXML
とMicrosoft Open XML Format SDK
は、GitだけでなくNugetにもあるのでダウンロードと配置の手間を省くため、PowerShellでNugetパッケージを取得する方法にしました。
環境
Windows 10 Pro 1703
Windows PowerShell ISE
Powershellコマンド
- スクリプトを実行すると、ダウンロードすることができます。
try
{
# パッケージプロバイダにNugetを追加
Install-PackageProvider -Name Nuget
# Nugetからパッケージ名を検索して、インストール実行
Find-Package -Name DocumentFormat.OpenXml -Source https://www.nuget.org/api/v2 -RequiredVersion 2.5.0 | Install-Package
Find-Package -Name ClosedXML -Source https://www.nuget.org/api/v2 -RequiredVersion 0.76.0 | Install-Package
# パッケージのインストール確認
Get-Package -ProviderName Nuget
}
catch [Exception]
{
Write-Host $_.Exception.Message
}
~~
- '-Source https://www.nuget.org/api/v2` をつけていないとエラーでダウンロードできません。
- ダウンロードされると、
C:\Program Files\PackageManagement\NuGet\Packages
に依存関係を含めてフォルダが生成されています。 かなりのファイルがダウンロードされるので、若干時間がかかります。- 依存関係が面倒だったので、バージョンを指定するように修正(2018/03/13)
まとめ
PowerShellにNuGetが登録されていれば
Find-Package -Name <パッケージ名> -Source https://www.nuget.org/api/v2
でNuGetパッケージの検索を行い、 パイプラインでインストール指定を行うことでそのままダウンロードが行えます。
Find-Package -Name <パッケージ名> -Source https://www.nuget.org/api/v2 | Install-Package
追記1.
'-Source https://www.nuget.org/api/v2` をつけていないとエラーになるか書いてある記事がありました。
Set-PackageSource
を使わなくてよかった。
危なく開発環境を壊すところでしたw
追記2.
- 依存関係が面倒だったので、スクリプトを変更しました。
ClosedXML -Version 0.76.0
DocumentFormat.OpenXml -Version 2.5.0
このバージョンであれば、二つのDLLの指定で行けそうです。
[Reflection.Assembly]::LoadFile("C:\Program Files\PackageManagement\NuGet\Packages\DocumentFormat.OpenXml.2.5\lib\DocumentFormat.OpenXml.dll")
[Reflection.Assembly]::LoadFile("C:\Program Files\PackageManagement\NuGet\Packages\ClosedXML.0.76.0\lib\net40-client\ClosedXML.dll")
$workBook = new-object ClosedXML.Excel.XLWorkbook
$workSheet = $workBook.Worksheets.Add("Sheet1")
$worksheet.Cell("A1").Value = "Hello world";
$workBook.SaveAs("c:\tmp\helloworld.xlsx")