Powershell 如何删除这些别名

Powershell 如何删除这些别名,powershell,Powershell,我正在尝试从库中更新PSFTP模块。我使用了删除模块,但这三(3)个别名仍然存在。在安装当前PSFTP模块之前,如何删除它们 PS C:\src\t\ftp> Get-Command *ftp* CommandType Name Version Source ----------- ----

我正在尝试从库中更新PSFTP模块。我使用了
删除模块
,但这三(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
是如何进入这台机器的。使用
卸载模块
,即使在以管理员身份运行的情况下,也不起作用。如何正确卸载此模块

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 item,如下所示:

Remove-Item alias:\aliasname
例如:


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

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

碰巧,这个特定模块只导出别名,这就是为什么它们只显示在
Get Command*ftp*
的输出中

虽然
Get命令
能够从当前未加载(导入)的模块中查找别名,但是
Alias:
驱动器中不存在此类别名,并尝试使用
remove Item Alias:
或更直接地说,
remove Alias
将其删除失败

如果您想在安装新版本之前卸载模块,请使用。

也就是说,要更新已安装的模块,只需使用。
请注意,此执行并行安装,但是:虽然最新版本生效,但保留以前的版本,需要手动删除(如果需要)


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

  • 确保没有其他模块依赖于要删除的模块

    • 查找模块的依赖项,即依赖于它的其他模块,请使用,例如(我使用模块
      PackageManagement
      作为示例,其中模块
      PowerShellGet
      作为依赖项):

      • 但是,请注意,可能有脚本也依赖于此模块,这样的使用将更难检测(在所有脚本中搜索
        #requires-Module
        指令、
        使用-Module语句
        导入模块
        调用,或仅调用依赖于自动加载模块的模块命令)
    • 要执行反向操作,即查找模块的依赖项(如果有)(给定模块本身依赖的模块),请使用,例如:

      • (获取模块-列出可用的PowerShellGet)。RequiredModules
        (如果没有依赖项,将不会有输出)
      • 类似地,正如@lit(OP)所指出的,您可以在线查询PowerShell Gallery中可用的模块的依赖项;例如:
        查找模块-IncludeDependencies PowerShellGet
        (这将首先列出模块本身,然后列出其依赖项)
  • 根据模块的安装位置,您可能需要管理权限才能删除(提升的会话)

    • 对于
      C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSFTP

      请注意,作为第三方模块,
      PSFTP
      不应该安装在那里,因为
      C:\Windows\System32\WindowsPowerShell\v1.0\Modules
      $PSHOME\Modules
      )是为系统模块(随PowerShell附带的模块)保留的

    • 确认删除模块文件夹是安全的后,使用以下操作(删除
      -WhatIf
      以执行实际删除):


确定模块的位置(安装文件夹):

  • 按模块名称(例如,
    PSFTP
    ):

    • -ListAvailable
      确保即使当前未导入模块,也能找到该模块,但前提是该模块位于
      $env:PSModulePath
      中列出的目录之一
    • 相反,如果模块当前已导入,但驻留在非标准目录中,则为了找到它,您通常会省略
      -listavable
    • 一个模块可以安装多个版本,因此可以返回;首先列出版本号最高的模块
  • 通过模块导出的命令名(例如,
    发送FTPItem
    ):

    • Get命令
      查找当前是否导入了包含模块的命令
    • 如果当前加载(导入)了包含该名称的命令的模块,则返回其路径
    • 否则,如果安装了多个模块版本,则会报告有效版本,即版本号最高的版本

您会注意到,OP已经尝试了
删除项-路径别名:Move FTPItem
,但未成功。另外请注意,还有一个专用的
删除别名
cmdlet。非常感谢。实际上,我很不安,在网上找到了一个手动删除模块目录的示例。
Get module-Name PSFTP
返回$null.I fou查找目录并使用
删除项-路径'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP'-Recurse-Force
将其删除。该操作似乎成功。我是否造成了任何损坏?如何确定是否有任何其他模块依赖于给定模块?识别模块依赖关系
查找模块-包含依赖关系-命名电源shellget
@lit:卸载后
Get-Module -ListAvailable |
  Where-Object { $_.RequiredModules.Name -contains 'PackageManagement' }
Remove-Item -Recurse -Force -WhatIf C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSFTP
Split-Path (Get-Module -ListAvailable PSFTP).Path
Split-Path (Get-Command Send-FTPItem).Module.Path