16

私が欲しいもの

ビルド システムで使用するために、多数の PowerShell スクリプトを Nuget パッケージとして公開したいと考えています。

PowerShellGetを使用して、インストール作業とバージョン管理を行いたいと考えています。

これらのスクリプトを Visual Studio ソリューションの一部にするのではなく、スタンドアロン スクリプトとして使用したいと考えています。

利用シーン

どのシステムでも、構成された Nuget プロバイダーを使用して、ユーザーは次を実行します。

Install-Module MyModule

その瞬間から、そのモジュールからのすべてのエクスポートは、このユーザーが永続的に利用できます。また、ユーザーはそのコマンドを再度呼び出して、それらのスクリプトのバージョンを更新することもできます。

私がしたこと

ここでパッケージの現在の状態を見つけることができます: GitHub

  1. Nuget プロバイダーをローカル Nuget サーバーに追加して構成しました

    この呼び出しを行うにはGet-PackageProvider -Name NuGet -ForceBootstrapSet-PSRepository -Name My_Nuget_Repo -SourceLocation http://my-nuget/api -InstallationPolicy Trusted

  2. によってローカルにインポートできる適切なモジュールを作成しましたImport-Module

  3. そのモジュールでNugetパッケージを作成して公開しました

問題

Install-Moduleコマンドレットでそのパッケージをインストールでき、Get-InstalledModuleリストの後半で確認できます。

ただし、利用できる機能はありません。

また、何があってInstall-Moduleも、私のパッケージからスクリプトを呼び出さないでください:

  • ScriptsToProcessから呼び出していないMyModule.psd1
  • フォルダInstall.ps1から呼び出していませんtools
  • フォルダInit.ps1から呼び出していませんtools
  • モジュールによってエクスポートされたコマンドレットは使用できず、モジュールはによってインポートできませんImport-Module

(Visual Studios からインストールした場合、同じパッケージが正しく動作しInstall-Package MyModule、スクリプトが呼び出され、PowerShell モジュールがインポートされます)。

調査

PowerShellGetに基づいているためOneGet、問題はInstall-Packageコマンドレット (コマンドレット内で呼び出されますInstall-Module) にあるようです。

Install-Package MyModuleVisual Studio からInstall.ps1実行しInit.ps1ていて、呼び出されたとき。しかし、純粋な PowerShell からの同じコマンドは何もしません。

4

1 に答える 1

31

長いリバースエンジニアリングの後、根本的な原因を見つけました

技術的な理由

nuspec ファイルにマジカル タグPSModuleを追加する必要があります。<Tags>

本当の理由

nuspec ファイルを作成したり、nuget パッケージを手動でパックしたりしないでくださいPublish-Module代わりにコマンドレットを使用してください。

適切に行う方法

powershellget-module GitHubを次のように更新しました。

  • 公開できる最小限のモジュールの例
  • ローカル フォルダーを Nuget フィードとして使用する方法
  • そのモジュールの公開、インストール、および使用
  • すべてをローカルで実行する依存関係のない参照スクリプトなので、学習できます

見てみな。

于 2015-11-03T02:25:04.893 に答える