2009-09-16 75 views
1

我正在尝试为脚本模块创建外部MAML帮助文件。作为一个测试,我创建了一个名为“ModTest”一个简单的模块保存在一个名为.psm1文件2个功能:Powershell V2外部MAML帮助

function Test-SqlScript2 
{ 
} 
function Out-SqlScript2 
{ 
} 

我在用户模块目录保存在模块〜\文档\模块\ ModTest 接下来,我创建了一个MAML文件的子目录〜\ Documents \ Modules \ ModTest \ en-US 我用于测试的MAML文件可用于here。然后我启动PowerShell并使用Import-Module导入模块。

不像编译cmdlet的文件的放置本身并不工作

所以,下次我尝试添加的帮助链接到脚本模块,顶部也不起作用:

<# 
.ExternalHelp C:\Users\cmiller6\Documents\WindowsPowershell\Modules\ModTest\en-US\ModTest.help.xml 
#> 


function Test-SqlScript2 
{ 
} 
function Out-SqlScript2 
{ 

然后我尝试添加的帮助信息,以每个功能,这不工作:

function Test-SqlScript2 
{ 
<# 
.ExternalHelp C:\Users\cmiller6\Documents\WindowsPowershell\Modules\ModTest\en-US\ModTest.help.xml 
#> 
} 
function Out-SqlScript2 
{ 
<# 
.ExternalHelp C:\Users\cmiller6\Documents\WindowsPowershell\Modules\ModTest\en-US\ModTest.help.xml 
#> 

两个问题:

  1. 是否有可能创建一个脚本 模块级外部MAML帮助或 你需要指定每个功能的帮助链接 ?
  2. 虽然 文件要求和博客 表明,语言特定的文件夹 即EN-US将成为指定的路径(〜/ ModTest \ ModTest.help.xml)我 不能得到MAML时自动 搜索除非我包含 显式路径(〜/ ModTest/en-US/ModTest.help.xml),否则将文件解压到 。这是一个错误?请参阅以下 链接的文档上获取帮助和特定语言 文件夹:

Writing Help for Windows PowerShell Modules PowerShell V2 External MAML Help

回答

4

关于#1,在我看来,你必须指定每个命令的ExternalHelp注释标记(脚本或功能)。 更新:我得到了PowerShell团队的确认,您必须为每个命令指定注释标记。我提交了一个suggestion on MSConnect,如果您希望在未来版本的PowerShell中看到此内容,您可以对其进行投票。

关于#2,它确实有效,从我的测试中不必指定完整路径(这非常好)。下面是模块目录的内容,我创建测试:

~\Documents\WindowsPowerShell\Modules\ModTest\ModTest.psm1 
~\Documents\WindowsPowerShell\Modules\ModTest\en-US\ModTest.psm1-Help.xml 
~\Documents\WindowsPowerShell\Modules\ModTest\fr-FR\ModTest.psm1-Help.xml 

我ModTest.psm1文件的内容是:

# .ExternalHelp ModTest.psm1-Help.xml 
function Add-BitsFile([object[]]$BitsJob, [string[]]$Destination, 
         [string[]]$Source) 
{ 
    Write-Host "Add-BitsFile" 
} 

# .ExternalHelp ModTest.psm1-Help.xml 
function Complete-BitsTransfer([object[]]$BitsJob) 
{ 
    Write-Host "Complete-BitsTransfer" 
} 

两个ModTest.psm1-Help.xml文件只是副本:

“$ pshome \ Modules \ BitsTransfer \ en-US \ Microsoft.BackgroundIntelligentTransfer.Management.dll - 帮助。xml“

测试这个最大的PITA是为了得到一个有效的MAML文件,所以我只复制了一个已知的工作文件:-)顺便说一句法语版本我只是在前面加上了”Parlez vous“的简介,所以我可以。测试它的工作

接下来,你需要一个快速的方法来改变线程的CurrentUICulture来测试不同,本地化的帮助文件,这是一个功能Jeffrey Snover wrote some time ago我更新它也改变了的CurrentUICulture:

function Using-Culture (
[System.Globalization.CultureInfo]$culture = ` 
    (throw "USAGE: Using-Culture -Culture culture -Script {scriptblock}"), 
[ScriptBlock]$script= ` 
    (throw "USAGE: Using-Culture -Culture culture -Script {scriptblock}")) 
{ 
    $OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture 
    $OldUICulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture 
    try { 
     [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture 
     [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture 
     Invoke-Command $script 
    } 
    finally { 
     [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture 
     [System.Threading.Thread]::CurrentThread.CurrentUICulture = $OldUICulture 
    }  
} 

现在我们来测试它:

PS> gmo|rmo 
PS> ipmo ModTest 
PS> Add-BitsFile -? 

NAME 
    Add-BitsFile 

SYNOPSIS 
    Adds one or more files to an existing Background Intelligent Transfer 
    Service (BITS) transfer job. 

<snip> 

PS> using-culture fr-FR {gmo|rmo; ipmo ModTest; Add-BitsFile -?} 

NAME 
    Add-BitsFile 

SYNOPSIS 
    Parlez vous adds one or more files to an existing Background 
    Intelligent Transfer Service (BITS) transfer job. 
+0

谢谢。我会进一步测试语言特定的文件夹。 我有大约100个功能来创建帮助。我希望我只能引用一次外部帮助文件(模块级帮助)。至少我可以指向单个MAML文件。创建一个脚本来生成带有存根区域的MAML的脚本可能会很有趣。 我还从我编写的几个cmdlet中抓取了一个可用的MAML。 – 2009-09-18 10:22:45

+0

作为注释,只要它与'.psm1'文件位于同一个根文件夹中,只要它是' -help.xml',PSv5就可以使用MAML帮助,而无需额外的工作。通过导入模块来测试没有文件的地方,调用get-help并获取泛型,粘贴文件并重复,MAML自动进入(只要看起来模块已经加载就停留)。 – 2017-11-17 01:29:25