Пожалуйста, см: get-help Remove-Module -full
-FullyQualifiedName [<String[]>]
Removes modules with names that are specified in the form of
ModuleSpecification objects (described by the Remarks section of Module
Specification Constructor (Hashtable) on MSDN). For example, the
FullyQualifiedName parameter accepts a module name that is specified in the
format @{ModuleName = "modulename"; ModuleVersion = "version_number"} or
@{ModuleName = "modulename"; ModuleVersion = "version_number"; Guid =
"GUID"}. ModuleName and ModuleVersion are required, but Guid is optional.
You cannot specify the FullyQualifiedName parameter in the same command as a
Name parameter; the two parameters are mutually exclusive.
Примечание:
FullyQualifiedNam e принимает имя модуля, указанное в формате @ {ModuleName = "modulename"; ModuleVersion = "номер_версия"}
Исходя из этого, следующие должна быть то, что вы после:
Remove-Module -FullyQualifiedName @{ModuleName = "Azure"; ModuleVersion = "1.0.2"}
Improved Ответа (редактировать)
ли больше расследования по этому вопросу , и есть некоторые причуды при удалении с использованием ModuleVersion
(который может быть string
или [version]
).
Если вы укажете ModuleVersion
, Remove-Module
удалит все соответствующие модули с этой версией и более.
Чтобы получить явное совпадение, вы также должны пройти guid
.
Get-Module 'Azure' | where {([string]($_.Version)).StartsWith('1.0.2')} | Remove-Module
Поскольку это очень много, я предлагаю добавить функцию в свой профиль, чтобы сделать это проще.
function Remove-ModuleWithVersion
{
param (
[Parameter(Mandatory=$true)]
[string]
$Module,
[Parameter(Mandatory=$true)]
[string]
$VersionToMatch
)
Get-Module $Module | where {([string]($_.Version)).StartsWith($VersionToMatch)} | Remove-Module -Verbose
}
и называют как:
Remove-ModuleWithVersion 'Azure' '1.0.2'
Тестирование и анализ
я мог бы также рассказать, как я испытал это, чтобы прийти к моему заключению. Я оставлю некоторые подробности читателю для самоисследования ...
Создайте два модуля и экспортируйте функцию из каждого, используя различные имена функций, чтобы упростить тестирование.
D: \ Test \ modtest \ v1 \ ModTest.psd1 с версии 1.1.0.1
D: \ Test \ modtest \ v1 \ ModTest.psm1
function Show-Hello1
{
"Hello v1.1"
}
Export-ModuleMember -Function Show-Hello1
D: \ Test \ modtest \ v2 \ ModTest.psd1 с версией 1.2.0.2
D: \ test \ modtest \ v2 \ ModTest.psm1
function Show-Hello2
{
"Hello v1.2"
}
Export-ModuleMember -Function Show-Hello2
Создать функцию для загрузки модулей, вызов экспортируемых функций, показать модули перед тем, удалите модуль, используя параметры, указанные, показать модули после.
function Invoke-LoadAndRemove($minor, $useString, $guid = $null)
{
"`n------`n$($minor), $($useString), '$($guid)'"
"`nimport modules..."
ipmo D:\test\modtest\v1\ModTest.psd1 -Force #-Verbose
ipmo D:\test\modtest\v2\ModTest.psd1 -Force #-Verbose
"call exported functions..."
Show-Hello1
Show-Hello2
"modules before..."
Get-Module *mod*
if ($useString)
{
$ver = "1.$minor.0.$minor"
}
else
{
$ver = [version]::new(1, $minor, 0, $minor)
}
"`nremoving version: $ver, -> $($ver.GetType()), useGuid=$($useGuid)"
if ($useGuid)
{
Remove-Module -FullyQualifiedName @{ModuleName = "ModTest"; ModuleVersion = $ver} -Verbose
}
else
{
Remove-Module -FullyQualifiedName @{ModuleName = "ModTest"; ModuleVersion = $ver; Guid = $guid} -Verbose
}
"modules after..."
Get-Module *mod*
"done."
}
вызова различные способы, чтобы продемонстрировать, как работает Remove-Module ...
Invoke-LoadAndRemove 2 $true
Invoke-LoadAndRemove 1 $true
Invoke-LoadAndRemove 2 $false
Invoke-LoadAndRemove 1 $false
Invoke-LoadAndRemove 1 $false 'b213dea3-4ae3-4fde-a9c6-0ac4a8d1890c'
Invoke-LoadAndRemove 2 $true '02fdc44a-2c32-4f7b-8573-b1317b03269a'
Это часть, где я оставляю читателю для дальнейшего анализа вывода для проверки выводы этой статьи.
Это сказало, это было то, что я заметил, что заставило меня исследовать дальше:
modules before...
Script 1.2.0.2 ModTest Show-Hello2
Script 1.1.0.1 ModTest Show-Hello1
removing version: 1.2.0.2, -> string, useGuid=
VERBOSE: Performing the operation "Remove-Module" on target "ModTest (Path: 'D:\test\modtest\v2\ModTest.psm1')".
VERBOSE: Removing the imported "Show-Hello2" function.
modules after...
Script 1.1.0.1 ModTest Show-Hello1
done.
------
modules before...
Script 1.2.0.2 ModTest Show-Hello2
Script 1.1.0.1 ModTest Show-Hello1
removing version: 1.1.0.1, -> string, useGuid=
VERBOSE: Performing the operation "Remove-Module" on target "ModTest (Path: 'D:\test\modtest\v2\ModTest.psm1')".
VERBOSE: Performing the operation "Remove-Module" on target "ModTest (Path: 'D:\test\modtest\v1\ModTest.psm1')".
VERBOSE: Removing the imported "Show-Hello2" function.
VERBOSE: Removing the imported "Show-Hello1" function.
modules after...
done.
Обратите внимание, что при удалении 1.2.0.2, он работает, как ожидалось. При удалении 1.1.0.1 удаляются как 1.1.0.1, так и 1.2.0.2!
Похоже, что тип справки 'String []' неверен. Фактический тип - 'ModuleSpecification []'. Один из конструкторов 'ModuleSpecification' принимает хеш-таблицу. –
@RomanKuzmin, он примет либо 'string', либо' [version] ', но ваш комментарий заставил меня провести некоторое дополнительное тестирование, и я узнал немало. См. Улучшенный ответ. Спасибо за отзывы, которые привели к этому гораздо лучшему, более точному ответу. –