更新

时间:2016-10-03 14:50:30

标签: powershell

当我运行Update-Help时,它在powershell中失败。我没有通过代理。这是直接访问。我也在运行Powershell作为管理员。我不知道还有什么可以检查...欢迎任何建议。

这是我的版本。 $ PSVersionTable

名称值
---- -----
PSVersion 5.1.14393.187
PSEdition桌面
PSCompatibleVersions {1.0,2.0,3.0,4.0 ...}
BuildVersion 10.0.14393.187
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

PS C:\Windows> Update-Help
Update-Help : Failed to update Help for the module(s) : 
'AppBackgroundTask, AppLocker, AppvClient, Appx, AssignedAccess, BitLocker, BitsTransfer, BranchCache, CimCmdlets, ConfigCI, Defender, DirectAccessClientComponents, Dism, 
DnsClient, EventTracingManagement, International, iSCSI, ISE, Kds, Microsoft.PowerShell.Archive, Microsoft.PowerShell.Core, Microsoft.PowerShell.Diagnostics, 
Microsoft.PowerShell.Host, Microsoft.PowerShell.LocalAccounts, Microsoft.PowerShell.Management, Microsoft.PowerShell.ODataUtils, Microsoft.PowerShell.Security, 
Microsoft.PowerShell.Utility, Microsoft.WSMan.Management, MMAgent, MsDtc, MSMQ, NetAdapter, NetConnection, NetEventPacketCapture, NetLbfo, NetNat, NetQos, NetSecurity, 
NetSwitchTeam, NetTCPIP, NetworkConnectivityStatus, NetworkSwitchManager, NetworkTransition, PackageManagement, PcsvDevice, PKI, PnpDevice, PowerShellGet, PrintManagement, 
PSDesiredStateConfiguration, PSReadline, PSScheduledJob, PSWorkflow, PSWorkflowUtility, ScheduledTasks, SmbShare, SmbWitness, StartLayout, Storage, TLS, TroubleshootingPack, 
TrustedPlatformModule, UEV, VpnClient, Wdac, WindowsDeveloperLicense, WindowsErrorReporting, WindowsSearch, WindowsUpdate'
Access is denied. The command could not update Help topics for the Windows PowerShell core modules, or for any modules in the $pshome\Modules directory. To update these Help 
topics, start Windows PowerShell by using the "Run as Administrator" command, and try running Update-Help again.
At line:1 char:1
+ Update-Help
+ ~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Update-Help], Exception
    + FullyQualifiedErrorId : UpdatableHelpSystemRequiresElevation,Microsoft.PowerShell.Commands.UpdateHelpCommand

Update-Help : Failed to update Help for the module(s) 'Microsoft.PowerShell.Operation.Validation' with UI culture(s) {en-US} : The value of the HelpInfoUri key in the module 
manifest must resolve to a container or root URL on a website where the help files are stored. The HelpInfoUri 'https://www.msn.com/?ocid=NEFLS000' does not resolve to a 
container.
At line:1 char:1
+ Update-Help
+ ~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Update-Help], Exception
    + FullyQualifiedErrorId : InvalidHelpInfoUri,Microsoft.PowerShell.Commands.UpdateHelpCommand

Update-Help : Failed to update Help for the module(s) 'SecureBoot' with UI culture(s) {en-US} : Unable to retrieve the HelpInfo XML file for UI culture en-US. Make sure the 
HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again.
At line:1 char:1
+ Update-Help
+ ~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (:) [Update-Help], Exception
    + FullyQualifiedErrorId : UnableToRetrieveHelpInfoXml,Microsoft.PowerShell.Commands.UpdateHelpCommand

我重新尝试更新 - 帮助。我认为它更新了大部分内容。我只得到这些错误。

更新 - 帮助:无法使用UI文化更新模块“Microsoft.PowerShell.Operation.Validation”的帮助{en-US}:HelpInfoUri的值 模块清单中的密钥必须解析为存储帮助文件的网站上的容器或根URL。 HelpInfoUri “https://www.msn.com/?ocid=NEFLS000”无法解析为容器。 在行:1个字符:1 +更新 - 帮助 + ~~~~~~~~~~~     + CategoryInfo:InvalidOperation :( :) [Update-Help],Exception     + FullyQualifiedErrorId:InvalidHelpInfoUri,Microsoft.PowerShell.Commands.UpdateHelpCommand

更新 - 帮助:无法更新具有UI文化的模块“AppvClient”的帮助{en-US}:找不到帮助内容。确保服务器是 可用,帮助内容位置在HelpInfo XML中正确定义。 在行:1个字符:1 +更新 - 帮助 + ~~~~~~~~~~~     + CategoryInfo:ResourceUnavailable:(:) [Update-Help],Exception     + FullyQualifiedErrorId:HelpContentNotFound,Microsoft.PowerShell.Commands.UpdateHelpCommand

更新 - 帮助:无法更新具有UI文化的模块'SecureBoot'的帮助{en-US}:无法检索用于UI文化en-US的HelpInfo XML文件。 确保模块清单中的HelpInfoUri属性有效或检查网络连接,然后再次尝试该命令。 在行:1个字符:1 +更新 - 帮助 + ~~~~~~~~~~~     + CategoryInfo:ResourceUnavailable:(:) [Update-Help],Exception     + FullyQualifiedErrorId:UnableToRetrieveHelpInfoXml,Microsoft.PowerShell.Commands.UpdateHelpCommand

4 个答案:

答案 0 :(得分:12)

TL; DR和解决方法

几年后,对于大多数用户来说,这仍然是一个问题。我以为我会在这里给出详尽的解释。

两个问题:

  1. Update-Help需要具有以管理员身份运行
  2. 的PowerShell
  3. Microsoft的更新链接已损坏,这会在每个系统上引发错误。直到今天,您提到的某些模块仍然会引发错误

您的第一个错误是公然而直接的,此输出直接包含在您的第一个错误输出中:

Access is denied. The command could not update Help topics for the Windows PowerShell core modules, or for any modules in the $pshome\Modules directory. To update these Help 
topics, start Windows PowerShell by using the "Run as Administrator" command, and try running Update-Help again.

抑制错误,但仍下载所有功能,可以运行以下命令(在通过以管理员身份运行启动的PowerShell控制台中):

Update-Help -Verbose -Force -ErrorAction SilentlyContinue

OR

Update-Help -Verbose -Force -ErrorAction SilentlyContinue -ErrorVariable UpdateErrors

解决方法/解决方案的说明

From the help documentation for Update-Help,这就是为什么需要管理员特权的原因:

更新帮助需要管理权限。

您必须是计算机上Administrators组的成员,才能更新PowerShell Core模块的帮助文件。

要下载或更新PowerShell安装目录($ PSHOME \ Modules)中模块的帮助文件(包括PowerShell Core模块),请使用“以管理员身份运行”选项启动PowerShell。例如:Start-Process powershell.exe -Verb RunAs。

您还可以使用Windows PowerShell集成脚本环境(ISE)的“帮助”菜单中的“更新Windows PowerShell帮助”菜单项来更新帮助文件。

“更新Windows PowerShell帮助”项运行不带参数的Update-Help cmdlet。要更新$ PSHOME目录中模块的帮助,请使用“以管理员身份运行”选项启动Windows PowerShell ISE。

关于所使用的参数:

表示此cmdlet没有遵循每天一次的限制,跳过版本检查,并下载超过1 GB限制的文件。

没有此参数,Update-Help每24小时仅运行一次。每个模块的下载限制为1 GB的未压缩内容,并且仅当帮助文件比计算机上的现有文件新时才安装帮助文件。

每天一次的限制可以保护托管帮助文件的服务器,并使您可以将Update-Help命令添加到PowerShell配置文件,而不会产生重复连接或下载的资源成本。

  • -Verbose仅意味着它将提供一堵黄色的文字墙,描述正在尝试更新的模块,正在解析的URI等。
  • -ErrorVariable UpdateErrors将错误保存到可以通过$UpdateErrors变量检索的变量中
  • -ErrorAction SilentlyContinue意味着简单地忽略任何错误,然后转到可以更新的下一个模块

您可能想知道为什么抑制错误被视为修复。这是因为:

  • 如果您有运行此命令的脚本,并且您不希望由于这些错误而退出该脚本。
  • 它仅针对未能为其下载帮助的模块消除错误,并且仍会为其下载所有其他模块的帮助。
  • 如果仍然希望调查错误,则至少在$UpdateErrors变量中可用,并且可以将其保存到文件中或以其他方式处理。
  • 要真正解决抛出的错误,Microsoft必须做一些事情来修复自己的帮助文档端点。

等等,但是为什么这是微软的问题?

以下是最新Windows 10系统上的示例(截至2019年第四季度/ 2020年第一季度):

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.18362.145
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.18362.145
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
Get-WmiObject win32_operatingsystem | select Caption, Version
Caption                  Version
-------                  -------
Microsoft Windows 10 Pro 10.0.18363

对于那些在Windows上使用PowerShell的新手和新手,在更新帮助文档的第一步中看到这些Update-Help错误是一个很大的障碍和困惑。大多数错误不是用户端的某种错误配置,但是不幸的是,这是过去几年中默认的和持续的命令输出期望。

是的,解决方法命令有效。但是,如果人们通过抑制错误输出并继续前进来运行内置命令,那将是糟糕的客户体验(如果发生其他错误,这可能不是教人的最佳实践吗?)。压制错误是所有人的责任。即使在2016年以来,它也是最高投票答案:

请注意,与此处HelpInfoUri相关的更新错误标记为接受的答案(应该为接受的答案)说:

我认为您需要为此与MS支持部门联系。

问题出在您的机器及其安装上,您将需要获得支持以帮助您。 我认为我们唯一的建议是重新安装Windows。 (!!)

疯狂的东西! 如果遇到此错误,请不要重新安装! 。我希望用户不要因为HelpInfoUri的错误而进行重新安装。

SamB in this GitHub issue directly focused on trying to resolve this continuing problem所述,Microsoft在其PowerShell manifest files中设置的HelpInfoURI值有误:

好吧,这台计算机上的the Module Manifest for WindowsUpdateProvider除了“ Microsoft Corporation”外没有其他任何归属,但确实指定了https://go.microsoft.com/fwlink/?linkid=390794HelpInfoUri,因此实际上不需要花时间弄清楚模块的来源,并以某种方式使之有必要向WindowsUpdateProvider发行补丁-仅需要使重定向指向适当的位置即可。

如果在出现这些Update-Help错误的系统上运行以下命令,则应该看到输出:

Import-Module WindowsUpdateProvider
Get-Module WindowsUpdateProvider | select HelpInfoURI,Version                                                                                                                                                                                      
HelpInfoUri                                    Version
-----------                                    -------
https://go.microsoft.com/fwlink/?linkid=390794 1.0.0.2

WindowsUpdateProvider 的源模块清单为例,位于此处:

C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\WindowsUpdateProvider\WindowsUpdateProvider.psd1

Microsoft绝对可以将链接重定向到有效的HelpInfoUri,这意味着客户端的零更改。

在一个旁注中,经常使用-ErrorAction SilentlyContinue的人们会遗漏其他几个模块的帮助被破坏。截至今天,这些已在标准Windows 10桌面上被破坏:

$TestModules = @("Microsoft.PowerShell.ODataUtils", "Microsoft.PowerShell.Operation.Validation", "UEV", "Whea", "WindowsDeveloperLicense", "defender", "configdefender",  "appvclient")
Import-Module $TestModules
$BorkedHelp = Get-Module $TestModules | select Name, Version, HelpInfoUri
$BorkedHelp
Name                                      Version   HelpInfoUri
----                                      -------   -----------
appvclient                                1.0.0.0   https://go.microsoft.com/fwlink/?LinkId=403112
configdefender                            1.0       https://go.microsoft.com/fwlink/?linkid=390762
defender                                  1.0       https://go.microsoft.com/fwlink/?linkid=390762
Microsoft.PowerShell.ODataUtils           1.0       https://go.microsoft.com/fwlink/?LinkId=509916
Microsoft.PowerShell.Operation.Validation 1.0.1     https://go.microsoft.com/fwlink/?LinkId=808399
UEV                                       2.1.639.0 https://go.microsoft.com/fwlink/?LinkId=826061
Whea                                      2.0.0.0   https://go.microsoft.com/fwlink/?linkid=390848
WindowsDeveloperLicense                   1.0.0.0   https://go.microsoft.com/fwlink/?linkid=285578
foreach ($uri in $BorkedHelp.helpinfouri) {Invoke-WebRequest $uri}

欢迎出现红色404 - File or directory not found.错误,所有端点都需要重定向。目前,某些端点已经中断了很多年,而其他端点的中断时间可能更少。

这些文件应该可由Microsoft使用它们在链接转发方面拥有的任何工具进行修复,除非他们改为更新模块清单以表明自己正在使用的HelpInfoURI端点,否则这些端点将不那么友好。所有用户的选项。

如果Microsoft的问题是默认情况下没有可下载的文档,并且链接可能是自动生成的保留,以供以后有文档下载时使用,则它们至少应至少{{ 1}}端点,而不是损坏的端点。

帮助使Microsoft意识到

遇到此问题并认为该解释有用的用户,应在GitHub上访问此问题:MicrosoftDocs/windows-powershell-docs: Update-Help fails for WindowsUpdateProvider

替代修补程序

对于任何已知的破坏了帮助文档端点的PowerShell模块,您也可以注释掉PowerShell清单中的HelpInfoURI值。 HelpInfoURI仅尝试下载Update-Help具有值的模块的更新。这对于了解由于端点问题(例如托管您自己的模块文档的HelpInfoURI)是否引起新错误是很有帮助的。

答案 1 :(得分:9)

解决方法:

Update-Help -Verbose -Force -ErrorAction SilentlyContinue 

-verbose将输出正在执行的任何命令 即使两者之间发生错误,-force也会强制完成脚本 -ErrorAction SilentlyContinue将执行类似上面的内容

注意,模块仍然不会更新,而且之前没有更新

答案 2 :(得分:2)

更新 - 帮助最初失败,但以管理员身份运行时成功。

答案 3 :(得分:0)

update-help -verbose -force -erroraction 静默继续

你可以使用这个命令,不会产生错误。