Powershell 2:如何消除重复的帮助条目?

Powershell 2:如何消除重复的帮助条目?

我经常拨打这样的电话:

get-help <some-command>

在 Powershell 2 中。对于许多(但不是全部)这些命令,我​​都没有看到帮助条目的内容。相反,我得到了重复项,并且只显示帮助对象本身:

[PS2]> get-help remove-distributiongroup | more

Name                              Category  Synopsis
----                              --------  --------
Remove-DistributionGroup          Cmdlet    Use the Remove-DistributionGroup...
Remove-DistributionGroup          Cmdlet    Use the Remove-DistributionGroup...

作为一个完全的 PS 新手,我通过做类似以下的事情来解决这个问题:

[PS2]> $var = get-help remove-distributiongroup
[PS2]> $var[0] | get-member
... Output ...
[PS2]> $var[0].Parameters |more
... Part of the documentation ...
[PS2]> $var[0].Synopsis |more
... Another part of the documentation ...

几个问题。

  • 我的 Windows 管理员同事知道如何删除重复条目吗?我只是一个 Unix 人。
  • 如果没有的话,有没有更简单的方法来获得我需要的东西,而不是上面我想出的复杂的破解方法?

谢谢!

[更新[:

尝试了 pk 的建议,但遗憾的是没有奏效。这是通过 select -unique 管道传输时的输出:

Name                              Category  Synopsis
----                              --------  --------
Get-DistributionGroup             Cmdlet    Use the Get-DistributionGroup cm...

答案1

下面的脚本对我有用,可以删除 Get-Help 中的重复条目:

$sys32Help = Get-ChildItem -Path "C:\Windows\System32\WindowsPowerShell\v1.0\en-US\" -Filter {*help*}
$sys32ModHelp = Get-ChildItem -Path "C:\Windows\System32\WindowsPowerShell\v1.0\Modules" -Filter {*help*} -Recurse -File
$compare = Compare-Object -ReferenceObject $sys32Help -DifferenceObject $sys32ModHelp -Property name -IncludeEqual
$compEQ = $compare | where sideIndicator -eq == | Select name | %{ $_.Name }
$sys32ModHelp | ?{ $_.Name -in $compEQ } | %{ Remove-Item -Path $_.FullName -Force -ErrorAction SilentlyContinue}

答案2

这可能是由于加载了重复的 PS Snapins 造成的。如果您在 Exchange 管理 Shell 中,然后加载 Exchange 2010 管理单元(可能在脚本中?),您将看到这些重复的 get-help 响应。在运行 EMS 时,运行 get-pssnapin 并检查 E2010 单元。如果存在,请使用 remove-pssnapin 将其卸载。

看 ”Get-Help 产生重复主题“获取更多信息。

答案3

  1. 切勿在 powershell 中使用“more”。more 使用默认格式化程序(format-table 也使用该格式化程序)。
  2. 如果您使用了 Format-list 命令行,您就会发现 get-help 返回一个具有“pssnapin”属性或“modulename”属性的对象。

默认格式化程序可能会产生误导,但 format-list 或使用 get-member 命令行会列出所有属性。我敢打赌,如果您使用用户格式重新运行命令,您将获得:[PS2]> get-help remove-distributiongroup | select name,synopsis,modulename,pssnapin

Name                      Category  Synopsis                            PsSnapin
----                      --------  --------                            --------
Remove-DistributionGroup  Cmdlet    Use the Remove-DistributionGroup... ASnapin
Remove-DistributionGroup  Cmdlet    Use the Remove-DistributionGroup... AnotherSnapin

(以上输出不是真实的)但它的核心是您能够看到哪个模块具有重复的命令。

它实际上并不是重复的,因为您可以调用每个命令,例如 Asnapin\Remove-DistributionGroup 或 AnotherSnapin\Remove-DistributionGroup 来使用其他版本:)

答案4

我遇到过一些情况,有人尝试使用 Exchange 2010、2013 运行 Get-Help 命令,结果得到的是重复的 cmdlet 列表,而不是实际的帮助内容。这很可能是由于运行了加载 Microsoft.Exchange.Management.PowerShell.E2010 的 PSSnapin 的脚本。您可以执行以下操作来删除此特定条目以及其他重复条目:

要快速绕过该问题:

赶紧跑:Get-Help <cmdlet name> -Category 'Function' -full

例子:

Get-Help Get-MailboxFolderPermission -Category 'Function' -full

否则,要获取更多信息并解决问题:

此命令显示与该命令相关的帮助条目数据并且还将返回我们稍后需要的管理单元名称:

Get-Help Get-Mailbox | Select Name,PSSnapIn

此命令显示该命令的完整命令相关数据:

Get-Command Get-Mailbox | Select Name,CommandType

检查此输出中的 CommandType。您可能会看到其中一个命令类型列为 Cmdlet,而另一个列为 Function。发生这种情况很可能是因为在某个时候手动或通过运行的脚本添加了 Exchange 管理单元。由于 Exchange 管理 shell 根据需要设置 shell,因此不应加载该管理单元,因此应将其删除。

使用此命令来删除管理单元:

Remove-PSSnapin -Name <name of snapin from 1st command above>

例子:

Remove-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010

这将删除管理单元并保留启动 Exchange 命令行管理程序时加载的各个功能。

相关内容