Powershell 如何删除这些别名
我正在尝试从库中更新PSFTP模块。我使用了Powershell 如何删除这些别名,powershell,Powershell,我正在尝试从库中更新PSFTP模块。我使用了删除模块,但这三(3)个别名仍然存在。在安装当前PSFTP模块之前,如何删除它们 PS C:\src\t\ftp> Get-Command *ftp* CommandType Name Version Source ----------- ----
删除模块
,但这三(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
)是为系统模块(随PowerShell附带的模块)保留的$PSHOME\Modules
- 确认删除模块文件夹是安全的后,使用以下操作(删除
以执行实际删除):-WhatIf
- 对于
确定模块的位置(安装文件夹):
- 按模块名称(例如,
):PSFTP
确保即使当前未导入模块,也能找到该模块,但前提是该模块位于-ListAvailable
中列出的目录之一$env:PSModulePath
- 相反,如果模块当前已导入,但驻留在非标准目录中,则为了找到它,您通常会省略
-listavable
- 一个模块可以安装多个版本,因此可以返回;首先列出版本号最高的模块
- 通过模块导出的命令名(例如,
):发送FTPItem
查找当前是否导入了包含模块的命令Get命令
- 如果当前加载(导入)了包含该名称的命令的模块,则返回其路径
- 否则,如果安装了多个模块版本,则会报告有效版本,即版本号最高的版本
删除项-路径别名: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