psd1文件中提供的PowerShell变量

时间:2017-06-20 17:13:19

标签: powershell

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这样的事情"动态"?

考虑:

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文件中使用,而另一个我可以使用。

2 个答案:

答案 0 :(得分:2)

PowerShell模块清单实际上是在RestrictedLanguage Language Mode中运行的可执行文件。

  

在RestrictedLanguage语言模式下,用户可以运行命令(cmdlet,   功能,CIM命令和工作流程)但不允许使用   脚本块。

     

仅允许以下变量:

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

只允许使用以下比较运算符:

     
      
  • -eq(相等)
  •   
  • -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

答案 1 :(得分:0)

模块清单

模块清单是包含哈希表的.psd1文件。哈希表中的键和值执行以下操作:

  • 描述模块的内容和属性。
  • 定义先决条件。
  • 确定如何处理组件。

模块不需要清单。模块可以引用脚本文件(.ps1),脚本模块文件(.psm1),清单文件(.psd1),格式和类型文件(.ps1xml),cmdlet和提供程序集(.dll),资源文件,帮助文件,本地化文件,或作为模块一部分捆绑的任何其他类型的文件或资源。对于国际化脚本,模块文件夹还包含一组消息目录文件。如果将清单文件添加到模块文件夹,则可以通过引用清单将多个文件作为单个单元引用。

清单本身描述了以下类别的信息:

  • 有关模块的元数据,例如模块版本号,作者和说明。
  • 导入模块所需的先决条件,例如Windows PowerShell版本,公共语言运行时(CLR)版本和所需模块。
  • 处理指令,例如要处理的脚本,格式和类型。
  • 要导出的模块成员的限制,例如要导出的别名,函数,变量和cmdlet。

有关详细信息,请参阅How to Write a PowerShell Module Manifest

Source

相关问题