2017-06-20 62 views
1

PowerShell PSD1文件被限制爲「非動態」行爲。但是,我注意到有幾個可以使用的自動變量。即,$ null,$ true和$ false(有效的常量)。他們有其他人嗎?有沒有關於的文檔 PSD1文件可以包含什麼。我知道內容是靜態PS類型的一個重要散列表,但是關於這些文件,什麼是「靜態」(或常量)的「規則」是什麼?這裏有一個很長的自動變量列表:https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_automatic_variables,但大多數不適用於PSD1上下文。例如,爲什麼像$ PSHOME或$ PID那樣被認爲是「動態的」?psd1文件中可用的PowerShell變量

考慮:

PS> get-variable true|select * 
Name  : true 
Description : Boolean True 
Value  : True 
Visibility : Public 
Module  : 
ModuleName : 
Options  : Constant, AllScope 
Attributes : {}  

PS> get-variable pid|select * 
Name  : PID 
Description : Current process ID 
Value  : 5056 
Visibility : Public 
Module  : 
ModuleName : 
Options  : Constant, AllScope 
Attributes : {} 

他們看起來幾乎一樣,都被標記爲「恆」,但一個我可以在PSD1文件使用,其他的我不能。

回答

1

的PowerShell模塊艙單實際上是在一個RestrictedLanguage Language Mode運行可執行文件。

在RestrictedLanguage語言模式下,用戶可運行命令(cmdlet的, 功能,CIM命令,和工作流),但不允許使用 腳本塊。

只有下列變量是允許的:

  • $ PSCulture
  • $ PSUICulture
  • $真
  • $假
  • $空。

只有下列比較運算符允許:

  • 當量(等於)
  • -gt(大於)
  • -lt(小於)

允許分配報表,屬性引用和方法調用不是 。

所以這就是$true$false,並$null從何而來。所允許的內容與靜態或常量或只讀無關。

您還可以使用$PSScriptRoot(指模塊的目錄),並as of version 5.1 you can use $PSEdition它可以讓你決定你是否是在Desktop(Windows PowerShell中)或Core(跨平臺)。您可以在鏈接示例中看到正在使用語言元素(if語句)。

You can see this happening in PowerShell's source code。看到LoadModuleManifestData那一行,看看它先在哪裏checks that the manifest contents (scriptblock) conforms to restricted language mode,然後it loads the special variables最後是executes the contents

0

模塊艙單

甲模塊清單是包含一個哈希表的.psd1文件。哈希表中的鍵和值執行以下操作:

  • 描述模塊的內容和屬性。
  • 定義先決條件。
  • 確定如何處理組件。

模塊不需要清單。模塊可以引用腳本文件(.ps1),腳本模塊文件(.psm1),清單文件(.psd1),格式和類型文件(.ps1xml),cmdlet和提供程序集(.dll),資源文件,幫助文件,本地化文件或捆綁在模塊中的任何其他類型的文件或資源。對於國際化腳本,模塊文件夾還包含一組消息目錄文件。如果將清單文件添加到模塊文件夾中,則可以通過引用清單來將多個文件作爲單個單元引用。

清單本身描述的信息以下幾類:

  • 有關的元數據模塊,比如模塊的版本號,作者,和描述。
  • 導入模塊所需的先決條件,例如Windows PowerShell版本,公共語言運行庫(CLR)版本和所需的模塊。
  • 處理指令,例如要處理的腳本,格式和類型。
  • 限制要導出的模塊成員,例如要導出的別名,函數,變量和cmdlet。

欲瞭解更多信息,請參閱How to Write a PowerShell Module Manifest

Source

+0

謝謝。所有這一切都是真實的,但並不是我所要求的。 PSD1文件也可以包含任意數據,並且可以包含所給鏈接的「模塊清單元素」中沒有具體說明的條目。 – Dweeberly

+0

@Dweeberly我無法找到任何有關特定自動變量或「動態」行爲的文檔。如果你有時間,我會建議全部嘗試並過濾出錯 – TheIncorrigible1