Das PowerShell-Modul kann nicht in einem lokalen Repo veröffentlicht werden, das von einem extern verwalteten Modul abhängig ist

446
cyborgcommando0

Ich habe ein PowerShell-Modul geschrieben und kompiliert, das im Wesentlichen ein verherrlichter Wrapper des ActiveDirectory-Moduls ist. Mein Modul hat auch eine richtige Modul-Manifest-Datei. Ich habe auch ein PSRepository erstellt, das auf einem Server gehostet wird. Dort möchte ich dieses Modul hosten.

Wenn ich den folgenden Befehl ausführen:

Publish-Module -Name ADWrap -Repository MyRepo -Tags ActiveDirectory -Force -Verbose 

Ich erhalte diesen Fehler:

Publish-PSArtifactUtility: PowerShellGet kann die Modulabhängigkeit 'ActiveDirectory' des Moduls 'ADWrap' im Repository 'MyRepo' nicht auflösen. Stellen Sie sicher, dass das abhängige Modul 'ActiveDirectory' im Repository 'MyRepo' verfügbar ist. Wenn dieses abhängige Modul 'ActiveDirectory' extern verwaltet wird, fügen Sie es dem Eintrag ExternalModuleDependencies im Abschnitt PSData des Modulmanifests hinzu.
Bei C: \ Program Files \ Windows \ Modules \ PowerShellGet \ 1.0.0.1 \ PSModule.psm1: 1227 Zeichen: 17
+ Publish-PSArtifactUtility -PSModuleInfo $ Module `
+ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Kategorie-Info: InvalidOperation: (:) [Publish-PSArtifactUtility ], InvalidOperationException
+ FullyQualifiedErrorId: UnableToResolveModuleDependency, Publish-PSArtifactUtility

Es gibt nicht viele Informationen zum ExternalModuleDependencies-Eintrag. Ich habe Google aufgesucht und diese Seiten gefunden, die hier ein bisschen geholfen haben

Nachdem ich das Modulmanifest erstellt hatte, habe ich folgende Schritte unternommen, um seine Eigenschaften zu aktualisieren:

Update-ModuleManifest -Path "\\Server\PowerShell Modules\ADWrap\Version 1.6.1\ADWrap\ADWrap.psd1" -ExternalModuleDependencies 'ActiveDirectory' 

Das hat mir den richtigen Weg gegeben, den ExternalModuleDepencies-Code einzuschließen, aber ich bekomme immer noch den Fehler. Der PrivateData-Code ist das Modulmanifest, das folgendermaßen aussieht:

# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. PrivateData = @{  PSData = @{  # Tags applied to this module. These help with module discovery in online galleries. # Tags = @()  # A URL to the license for this module. # LicenseUri = ''  # A URL to the main website for this project. # ProjectUri = ''  # A URL to an icon representing this module. # IconUri = ''  # ReleaseNotes of this module # ReleaseNotes = ''  # External dependent modules of this module ExternalModuleDependencies = 'ActiveDirectory'  } # End of PSData hashtable  } # End of PrivateData hashtable 

Ich bin mir nicht sicher, was mir fehlt, und ich habe nicht viel über diese Art von Online-Problemen gesehen, daher wäre jede Hilfe dankbar.

0

1 Antwort auf die Frage

0
cyborgcommando0

Nun, ich habe etwas Interessantes gefunden. Diese Antwort auf PowerShell.org hat gezeigt, dass die ExternalModuleDependencies-Eigenschaft (die ich mit dem Cmdlet Update-ModuleManifest generiert habe) tatsächlich falsch generiert wurde.

Ich habe das aktualisierte Modulmanifest manuell geöffnet und dies geändert:

 # External dependent modules of this module ExternalModuleDependencies = 'ActiveDirectory' 

zu diesem:

 # External dependent modules of this module ExternalModuleDependencies = @('ActiveDirectory') 

Es scheint, dass die Abhängigkeit in einem Array-Format sein muss. Warum es nicht automatisch so generiert wird, ist mir unverständlich. Ich konnte mein Modul danach veröffentlichen!