gpt4 book ai didi

powershell - 如何删除这些别名

转载 作者:行者123 更新时间:2023-12-03 14:34:26 24 4
gpt4 key购买 nike

我正在尝试从库更新 PSFTP 模块。我用过 Remove-Module ,但这三 (3) 个别名仍然存在。如何在安装当前 PSFTP 模块之前删除它们?

PS C:\src\t\ftp> Get-Command *ftp*

CommandType Name Version Source
----------- ---- ------- ------
Alias Move-FTPItem 1.6.1.2 PSFTP
Alias Receive-FTPItem 1.6.1.2 PSFTP
Alias Send-FTPItem 1.6.1.2 PSFTP
Function Get-SFTPChildItem 2.0.2 Posh-SSH
Function Get-SFTPContent 2.0.2 Posh-SSH
...

PS C:\src\t\ftp> Remove-Item -Path Alias:Move-FTPItem
Remove-Item : Cannot find path 'Alias:\Move-FTPItem' because it does not exist.
At line:1 char:1
+ Remove-Item -Path Alias:Move-FTPItem
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Alias:\Move-FTPItem:String) [Remove-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

附加信息

我不知道如何 PSFTP上了这台机器。使用 Uninstall-Module ,即使在以管理员身份运行下,也不起作用。如何正确卸载此模块?
PS C:\Windows\system32> Uninstall-Module -Name PSFTP
PackageManagement\Uninstall-Package : No match was found for the specified search criteria and module names 'PSFTP'.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:2157 char:21
+ ... $null = PackageManagement\Uninstall-Package @PSBoundParameters
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Microsoft.Power...ninstallPackage:UninstallPackage) [Uninstall-Package], Exception
+ FullyQualifiedErrorId : NoMatchFound,Microsoft.PowerShell.PackageManagement.Cmdlets.UninstallPackage

模块目录确实存在于机器上。
C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSFTP

最佳答案

Remove-Module卸载模块,但不会将其从文件系统中删除。

$PSModuleAutoLoadingPreference默认情况下( All ),这意味着 该模块及其命令仍可被发现 ,即使模块当前未加载(导入)。

碰巧的是,这个特定的模块只导出别名,这就是为什么只有它们出现在 Get-Command *ftp* 的输出中的原因。 .

虽然 Get-Command能够从当前未加载(导入)的模块中找到别名,此类别名在 Alias: 中不存在驱动器并尝试使用 Remove-Item Alias:<name> 删除它们或者,更直接地,Remove-Alias <name>失败。

如果你想要 卸载模块 在安装新版本之前 - 假设你已经从 PowerShell Gallery 安装它,正如你所说(见下面的更新) - 使用 Uninstall-Module .

也就是说,为了更新已安装的模块 , 只是 使用 Update-Module .
注意这个执行并排安装 ,但是:虽然最新版本确实生效,但之前的版本会保留,如果需要,需要手动删除。

如果未从 PowerShell 库安装模块 , 需要手动删除其文件夹 :

  • 确保没有其他模块依赖要删除的模块 .
  • 查找模块的依赖项 ,即依赖于它的其他模块,使用,例如(我以模块 PackageManagement 为例,它有模块 PowerShellGet 作为依赖):
    Get-Module -ListAvailable |
    Where-Object { $_.RequiredModules.Name -contains 'PackageManagement' }
  • 但是请注意,可能存在也依赖于该模块的脚本,并且此类使用将更难以检测(缺少在所有脚本中搜索 #requires -Module 指令、 using -module statementsImport-Module 调用,或简单地调用依赖于自动加载模块的模块命令)。
  • 执行逆操作,即到 查找模块的依赖项 ,如果有(给定模块本身依赖的模块),使用,例如:
  • (Get-Module -ListAvailable PowerShellGet).RequiredModules (如果没有依赖就没有输出),
  • 类似地,正如@lit(OP)指出的那样,您可以在线查询 PowerShell 库中可用的模块以获取其依赖项;例如。:Find-Module -IncludeDependencies PowerShellGet (这将首先列出模块本身,然后是其依赖项)。
  • 根据模块的安装位置,您可能需要管理员权限才能删除 (高级 session )。
  • C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSFTP 绝对是这种情况.
    注意,作为第三方模块,PSFTP不应该安装在那里,因为 C:\Windows\System32\WindowsPowerShell\v1.0\Modules ( $PSHOME\Modules ) 是为系统模块(PowerShell 附带的模块)保留的。
  • 一旦您确认删除模块文件夹是安全的,请使用以下命令(删除 -WhatIf 以执行实际删除):
    Remove-Item -Recurse -Force -WhatIf C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSFTP


  • 确定模块的位置(安装文件夹):
  • 按模块名称 (例如, PSFTP ):
    Split-Path (Get-Module -ListAvailable PSFTP).Path
  • -ListAvailable确保即使当前未导入该模块,也能找到该模块,但前提是它位于 $env:PSModulePath 中列出的目录之一中。 .
  • 相反,如果模块当前已导入,但位于非标准目录中,则您最需要忽略 -ListAvailable为了找到它。
  • 一个模块的多个版本可能被安装并因此被退回;首先列出具有最高版本号的那个。


  • 通过命令的名称 由模块导出(例如, Send-FTPItem ):
    Split-Path (Get-Command Send-FTPItem).Module.Path
  • Get-Command查找包含模块当前是否已导入的命令。
  • 如果当前加载(导入)包含具有该名称的命令的模块,则返回其路径。
  • 否则,如果安装了多个模块版本,则报告有效的一个,即版本号最高的那个。
  • 关于powershell - 如何删除这些别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50752029/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com