Я работаю над модулем PS, который зависит от SqlServer.
Вот файл манифеста модуля:
@{
ModuleVersion = "1.0.19103.11"
GUID = "59bc8fa6-b480-4226-9bcc-ec243102f3cc"
Author = "..."
CompanyName = "..."
Copyright = "..."
Description = "..."
RequiredModules = ""
ScriptsToProcess = "vsts\config.ps1"
NestedModules = @( ... )
PrivateData = @{
PSData = @{
ExternalModuleDependencies = @(
"SqlServer"
)
}
}
}
Вот команды, которые я использую для публикации модуля:
if (Get-PSRepository $PSRepositoryName -ErrorAction SilentlyContinue)
{
Unregister-PSRepository $PSRepositoryName
}
Register-PSRepository $PSRepositoryName `
-SourceLocation $NuGetRepoUrl `
-PublishLocation $NuGetRepoUrl `
-InstallationPolicy Trusted `
-PackageManagementProvider nuget
Publish-Module -Name $ModuleManifestFile -NuGetApiKey $NuGetApiKey -Repository $PSRepositoryName -Force
Проблема в том, что при установке этого модуля я получаю следующее предупреждение:
WARNING: The externally managed, dependent module 'SqlServer' is not installed on this computer. To use the current module 'xyz.PS.Core', ensure that its dependent
module 'SqlServer' is installed.
Как заставить SqlServer автоматически устанавливаться при установке этого пакета без каких-либо предупреждений.
Я попытался установить свойство RequiredModules
, но сначала не удалось опубликовать модуль, если на сборочном компьютере не установлен модуль SqlServer. Я могу установить его там, но есть ли лучший способ, не заставляя нас устанавливать пакеты на агенты сборки?
РЕДАКТИРОВАТЬ 1
Итак, я установил модуль SqlServer в агент сборки и добавил свойство RequiredModules
. Отображается то же предупреждение. Но теперь я даже не могу импортировать модуль:
Import-Module : The required module 'SqlServer' is not loaded. Load the module or remove the module from 'RequiredModules' in the file
РЕДАКТИРОВАТЬ 2
Я все еще не могу заставить его работать. Позвольте мне показать все комбинации. Во всех случаях на тестовой машине не установлен модуль SqlServer.
Попытка 1
RequiredModules = @(
@{
ModuleName = "SqlServer"
ModuleVersion = "21.1.18068"
}
)
PrivateData = @{
PSData = @{
ExternalModuleDependencies = "SqlServer"
}
}
Урожайность
C:\> Publish-Module -Name $ModuleManifestFile -NuGetApiKey $NuGetApiKey -Repository $PSRepositoryName -Force
PowerShellGet cannot resolve the module dependency 'SqlServer' of the module 'xyz.PS.Core' on the repository 'xyz-QA'. Verify that the dependent module 'SqlServer' is available in the repository 'xyz-QA'. If this dependent module 'SqlServer' is managed externally, add it to the ExternalModuleDependencies entry in the PSData section of the module manifest.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1227 char:17
+ Publish-PSArtifactUtility -PSModuleInfo $moduleInfo `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Publish-PSArtifactUtility], InvalidOperationException
+ FullyQualifiedErrorId : UnableToResolveModuleDependency,Publish-PSArtifactUtility
C:\>
Попытка 2
RequiredModules = @("SqlServer")
PrivateData = @{
PSData = @{
ExternalModuleDependencies = "SqlServer"
}
}
Урожайность
C:\> Publish-Module -Name $ModuleManifestFile -NuGetApiKey $NuGetApiKey -Repository $PSRepositoryName -Force
PowerShellGet cannot resolve the module dependency 'SqlServer' of the module 'xyz.PS.Core' on the repository 'xyz-QA'. Verify that the dependent module 'SqlServer' is available in the repository 'xyz-QA'. If this dependent module 'SqlServer' is managed externally, add it to the ExternalModuleDependencies entry in the PSData section of the module manifest.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1227 char:17
+ Publish-PSArtifactUtility -PSModuleInfo $moduleInfo `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Publish-PSArtifactUtility], InvalidOperationException
+ FullyQualifiedErrorId : UnableToResolveModuleDependency,Publish-PSArtifactUtility
C:\>
Попытка 3
PrivateData = @{
PSData = @{
ExternalModuleDependencies = "SqlServer"
}
}
(нет RequiredModules
) Выход:
C:\> Publish-Module -Name $ModuleManifestFile -NuGetApiKey $NuGetApiKey -Repository $PSRepositoryName -Force
C:\> Get-Module SqlServer -ListAvailable
C:\> Install-Module xyz.PS.Core -Scope CurrentUser -Force -AllowClobber
WARNING: The externally managed, dependent module 'SqlServer' is not installed on this computer. To use the current module 'xyz.PS.Core', ensure that its dependent module 'SqlServer' is installed.
C:\> Get-Module SqlServer -ListAvailable
C:\>
Как видите, публикация прошла успешно, но при установке модуля выдается предупреждение. И SqlServer не установлен.
Попытка 4
RequiredModules = @(
@{
ModuleName = "SqlServer"
ModuleVersion = "21.1.18068"
}
)
(без зависимостей ExternalModule) Выход:
C:\> Publish-Module -Name $ModuleManifestFile -NuGetApiKey $NuGetApiKey -Repository $PSRepositoryName -Force
The specified RequiredModules entry 'SqlServer' in the module manifest 'C:\Users\mkharitonov\AppData\Local\Temp\2144858157\xyz.PS.Core\xyz.PS.Core.psd1' is invalid. Try again after updating this entry with valid values.At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1144 char:27+ ... oduleInfo = Microsoft.PowerShell.Core\Test-ModuleManifest -Path $mani ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\mkhari...ce.PS.Core.psd1:String) [Test-ModuleManifest], DirectoryNotFoundException
+ FullyQualifiedErrorId : Modules_InvalidRequiredModulesinModuleManifest,Microsoft.PowerShell.Commands.TestModuleManifestCommand
C:\>
Попытка 5
RequiredModules = @("SqlServer")
(без зависимостей ExternalModule) Выход:
C:\> Publish-Module -Name $ModuleManifestFile -NuGetApiKey $NuGetApiKey -Repository $PSRepositoryName -Force
The specified RequiredModules entry 'SqlServer' in the module manifest 'C:\Users\mkharitonov\AppData\Local\Temp\1208648280\xyz.PS.Core\xyz.PS.Core.psd1' is invalid. Try again after updating this entry with valid values.At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1144 char:27+ ... oduleInfo = Microsoft.PowerShell.Core\Test-ModuleManifest -Path $mani ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\mkhari...ce.PS.Core.psd1:String) [Test-ModuleManifest], DirectoryNotFoundException
+ FullyQualifiedErrorId : Modules_InvalidRequiredModulesinModuleManifest,Microsoft.PowerShell.Commands.TestModuleManifestCommand
C:\>
Итак, я ничего не делаю. Пока что Powershell не может установить необходимый модуль.
Что я делаю не так?
РЕДАКТИРОВАТЬ 3
Свойство RequiredModules не работает, даже если я устанавливаю SqlServer на сборочном компьютере. Обратите внимание:
RequiredModules = @(
"SqlServer"
)
PrivateData = @{
PSData = @{
ExternalModuleDependencies = "SqlServer"
}
}
И результат:
C:\> Get-Module SqlServer -ListAvailable
Directory: C:\Users\mkharitonov\Documents\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 21.1.18102 SqlServer {Add-RoleMember, Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupListenerStaticIp, Ad...
C:\> Publish-Module -Name $ModuleManifestFile -NuGetApiKey $NuGetApiKey -Repository $PSRepositoryName -Force
PowerShellGet cannot resolve the module dependency 'SqlServer' of the module 'xyz.PS.Core' on the repository 'xyz-QA'. Verify that the dependent module 'SqlServer' is available in the repository 'xyz-QA'. If this dependent module 'SqlServer' is managed externally, add it to the ExternalModuleDependencies entry in the PSData section of the module manifest.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1227 char:17
+ Publish-PSArtifactUtility -PSModuleInfo $moduleInfo `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Publish-PSArtifactUtility], InvalidOperationException
+ FullyQualifiedErrorId : UnableToResolveModuleDependency,Publish-PSArtifactUtility
C:\>
Кажется, Powershell ищет модуль SqlServer в моем репозитории, а не в PSGallery. Я не понимаю пути. Вот репозитории PS, зарегистрированные на машине:
C:\> Get-PSRepository
Name InstallationPolicy SourceLocation
---- ------------------ --------------
PSGallery Trusted https://www.powershellgallery.com/api/v2
xyz-QA Trusted http://devstatic.xyz.com/nugetserver/nuget
C:\>
Итак, я действительно не понимаю, что я должен делать?