Operations Lab.

PowerShell 3.0 のヘルプを更新する

leave a comment »

PowerShell 3.0 では、デフォルトでは限定されたヘルプ・コンテンツのみがローカルにインストールされており、Get-Help コマンドレットでヘルプを表示した際に一部のコンテンツのみが表示されます。ヘルプコンテンツを更新するための Update-Help コマンドレットが用意されているのですが、PowerShell 3.0 リリース当初はいまいち挙動が不安定で、ヘルプが更新されなかったり、ヘルプのダウンロードはできるが Get-Help で表示できなかったりといった状態でした。

最近、ふと Update-Help を試したところ、以前よりも状況が改善していそうな雰囲気でしたので、一旦現状をまとめてみました。

そもそもの前提として

前述のとおり、PowerShell 3.0 ではヘルプのオンライン化がすすめられています。Get-Help コマンドレットを使用して(完全な)ヘルプを表示するためには、Update-Help コマンドレットでヘルプファイルをアップデートするか、Get-Help コマンドレットを Online スイッチ付きで呼び出します。

Get-Help <Cmdlet> –Online を実行すると、ブラウザが起動し、TechNet 上のオンラインヘルプを参照できます。日本語版のヘルプが用意されていない場合、TechNet サイト上で自動で英語のコンテンツにリダイレクトされます。

Update-Help を使用する場合は、管理者権限で PowerShell (または PowerShell ISE)を起動しておく必要があります。PowerShell のヘルプは C:\Windows\System32 配下に保存されているため、ファイルを更新するために管理者権限が必要です。管理者へ昇格していないコンソールから Update-Help を実行すると、以下の様なエラーが表示されます。

PS C:\Windows\System32> Update-Help
Update-Help : UI カルチャ {en-US} を使用してモジュール 'ISE, AppLocker, Appx, BitLocker, BranchCache, CimCmdlets, DirectAccessClientComponents, Dism, DnsClient, Hyper-V, International, iSCSI, Kds, MMAgent, MsDtc, NetAdapter, NetConnection, NetLbfo, NetQos, NetSecurity, NetSwitchTeam, NetTCPIP, NetWNV, NetworkConnectivityStatus, NetworkTransition, PKI, PrintManagement, PSScheduledJob, PSWorkflow, PSWorkflowUtility, ScheduledTasks, SecureBoot, SmbShare, SmbWitness, Storage, TroubleshootingPack, TrustedPlatformModule, VpnClient, Wdac, WindowsDeveloperLicense, WindowsErrorReporting' のヘルプを更新できませんでした: パス 'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\ISE\en-US' へのアクセスが拒否されました。
発生場所 行:1 文字:1
+ Update-Help
+ ~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Update-Help]、Exception
    + FullyQualifiedErrorId : UnknownErrorId,Microsoft.PowerShell.Commands.UpdateHelpCommand
 
Update-Help : モジュール 'Microsoft.PowerShell.Management, Microsoft.PowerShell.Utility, Microsoft.PowerShell.Diagnostics, Microsoft.PowerShell.Host, Microsoft.PowerShell.Security, Microsoft.WSMan.Management, Microsoft.PowerShell.Core' のヘルプを更新できませんでした: Windows PowerShell のコア コマンドのヘルプ トピックも、$pshome\Modules ディレクトリ内のモジュールのヘルプ トピックも更新されませんでした。これらのヘルプ トピックを更新するには、"管理者として実行" オプションを使用して Windows PowerShell を起動し、コマンドをもう一度実行してください。
発生場所 行:1 文字:1
+ Update-Help
+ ~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Update-Help]、Exception
    + FullyQualifiedErrorId : UpdatableHelpSystemRequiresElevation,Microsoft.PowerShell.Commands.UpdateHelpCommand

Windows 8 / Windows 2012 の場合

Windows 8 や Windows 2012 の PowerShell 3.0 の場合、Update-Help を実行するのみで、Get-Help から最新のコンテンツを参照できるようになっていました。(2013/02/20 現在)

PS C:\Windows\System32> Get-Help about_*

PS C:\Windows\System32> Update-Help

PS C:\Windows\System32> Get-Help about_*

Name                        Category  Module  Synopsis
----                        --------  ------  --------
about_Aliases               HelpFile          Describes how to use...
about_Arithmetic_Operators  HelpFile          Describes the operat...
about_Arrays                HelpFile          Describes arrays, wh...
about_Assignment_Operators  HelpFile          Describes how to use...
(以下略)

現状で日本語のヘルプファイルは用意されていませんが、(明示的に UICulture を指定しなくても)英語版のヘルプファイルが(自動で選択され)ダウンロードされます。

PS C:\Users\kazu> Get-ChildItem $PSHOME | ?{ $_.Name -eq "en-US" -or $_.Name -eq "ja-JP" }

    ディレクトリ: C:\Windows\System32\WindowsPowerShell\v1.0

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2013/02/21      0:14            en-US
d---s        2012/07/26     20:45            ja-JP

ヘルプファイルが保管されているフォルダを確認しても、ja-JP は更新されておらず、en-US 側が更新されていることが分かります。

昔は、Update-Help を実行するのみではヘルプの参照ができず、以下の様に明示的に en-US を指定してヘルプを更新する必要があったような気がするのですが、あまり正確に覚えていないため、気のせいかもしれません。

PS C:\Windows\System32> Update-Help -UICulture en-US

Windows 7 / Windows Server 2008 R2 の場合

Windows 7 や Windows 2008 R2 の場合は、単純に Update-Help を実行しただけでは Get-Help で細心のヘルプを参照できるようになりません。

PS C:\Windows\system32> Update-Help -UICulture en-US -Force

PS C:\Windows\system32> Get-ChildItem $PSHOME | ?{ $_.Name -eq "en-US" -or $_.Name -eq "ja-JP" }

    ディレクトリ: C:\Windows\System32\WindowsPowerShell\v1.0

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2013/02/21      2:44            en-US
d----        2012/12/12     14:31            ja-JP

PS C:\Windows\system32> Get-Help about_*

英語のヘルプが更新されているにもかかわらず、Get-Help からは参照されません(参照できません)。

割と無理やりな解決方法ですが、日本語のリソースフォルダに英語版のファイルをコピーすることによって、Get-Help から(英語の)ヘルプを参照できるようになります。(今後のアップデートに支障が出るかもしれませんので、実行する場合は自己責任でお願いします。)

PS C:\Windows\system32> Move-Item $PSHOME\ja-JP $PSHOME\ja-JP_old

PS C:\Windows\system32> Copy-Item -Recurse $PSHOME\en-US $PSHOME\ja-JP

PS C:\Windows\system32> Get-Help about_*

Name                        Category  Module  Synopsis
----                        --------  ------  --------
about_Aliases               HelpFile          Describes how to use...
about_Arithmetic_Operators  HelpFile          Describes the operat...
about_Arrays                HelpFile          Describes arrays, wh...
about_Assignment_Operators  HelpFile          Describes how to use...

ここでは、既存の ja-JP フォルダをリネームした後、en-US フォルダを ja-JP という名前でコピーしています。

なぜ、Windows 7 / Windows 2008 R2 の PowerShell 3.0 は en-US のヘルプリソースを参照してくれないのか謎ですが、上記の対応で一応ヘルプの参照ができるようになります。

ところで

PowerShell 3.0 の正式な日本語ヘルプはいつ頃用意されるのでしょうか。1か月ほど前の記事になりますが、PowerShell Team のブログに以下の様な記載があります。

The languages in which the first-localized modules would most likely be available, within three to six months from now, are the following four:

  • Chinese (Traditional)
  • French
  • German
  • Japanese

半年以内には、日本語ローカライズされたヘルプが配信される予定のようです。

広告

Written by kazu

2013/02/21 @ 03:04

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。