背景:我們的一個團隊有一個Chocolatey包,它呼叫Expand-Archive。然而,我安裝了pscx模塊,該模塊也提供了一個Expand-Archive cmdlet,其引數簽名與內置cmdlet不同,并導致該包安裝失敗。解決辦法是在出現這種多載的情況下使用模塊限定的名稱。最后能夠在在線檔案中查看到模塊名稱的價值。
最初,我試著用以下方法來獲取模塊:
Get- 命令展開-Archive -All
但這只列出了在pscx模塊中發現的cmdlet。似乎Get-Command -All 不回傳尚未加載的可用模塊的命令。這對于不能自動加載的模塊來說是有意義的,但對于像Microsoft.PowerShell.Archive這樣的內置模塊來說是沒有意義的,這讓我很擔心,因為它讓我在不加載模塊的情況下無法審核會話中的可用命令。
一旦我用以下方法之一加載模塊:
Microsoft.PowerShell.ArchiveExpand-Archive
Import-ModuleMicrosoft.PowerShell.Archive
Get-Command Expand-Archive -All確實以解決的順序顯示這兩個定義,以及它們所屬的模塊。但這是有問題的,因為它抑制了我審核系統中可用的命令的能力,在運行Get-Command之前盲目地匯入所有可用的模塊(這本身就是一個有問題的解決方案)。
問題:我如何告訴Get-Command實際檢索會話可用的所有可決議命令,或者通過其他方式獲得這些資訊?由于模塊是根據其函式的第一次使用而自動匯入的(something知道該命令在一個未加載的模塊中以進行匯入),我希望Get-Command 應該能夠支持這個。
uj5u.com熱心網友回復:
要從可用的模塊[1]中找到所有的Export-Archive命令(而不是那些當前加載的(匯入的)):
Get-Module -ListAvailable |。
ForEach-Object {
if ($cmd = $_.ExportedCommands['Expand-Archive'] ) { $cmd }
}
注意: 注意: 如果您安裝了包含此類命令的模塊的多個版本,每個版本的命令將被單獨列出。
輸出不會告訴你哪個[System.Management.Automation. PSModuleInfo]由Get-Module輸出的實體也有特定于命令型別的.ExportedAliases、.ExportedFunctions和.ExportedCmdlets屬性,以及.ExportedVariables。
Export-Archive命令是有效的,也就是說,如果你提交Export-Archive作為一個命令,哪個命令會被實際執行;要找到有效的命令,請使用Get-Command Export-Archive。
至于你所嘗試的:
Get-Command默認包括available模塊的命令,但默認只顯示該名稱的有效命令。
-All開關是為了顯示所有指定名稱的可用命令,甚至那些被有效命令遮蔽的命令。
正如您所觀察到的,使用-All意外地將模塊來源的候選命令池限制為來自當前加載的模塊,至少到PowerShell Core 7.2.0-preview.9為止。
可以說,這是一個bug,并且已經在GitHub issue #16116中報告了
。可選的Get-Command資訊:
Get-Command的行為沒有名字(-Name)引數--無論是有還是沒有-All--都有點晦澀難懂(盡管大部分都有記錄):
除非你傳遞一個
-Type(-CommandType)引數來明確控制報告哪些命令型別,否則只有以下命令型別被報告。Alias,Function,Filter,Cmdlet, 這明顯排除了ExternalScript(*.ps1腳本檔案) 和Application(外部程式)。- 注意:
-Type接受多個值,所以要找到所有外部腳本和程式,例如,通過-Type ExternalScript, Application。
- 注意:
要報告所有命令型別,使用
。-Type All奇怪的是,不指定
-Name引數似乎會應用-All開關,也就是說,被影射的命令會不可避免地包括在內。
相比之下,如果-Name引數被指定,所有命令型別都被考慮,并且是否-All被指定確實有區別。
- 因此,
Get-Command *實際上與Get-Command -Type All相同。
[1] 那些可通過
$env:PSModulePath中列出的目錄發現的,即通過module auto-loading
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/326822.html
標籤:
上一篇:Python函式遞回-給出“串列”中“數字”第一次出現的索引,如果數字不在串列中,則回傳None
下一篇:numba.core.errors.TypingError:whileusingnp.random.randint()
