2009-09-16 76 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