我在a中定义了一个变量psm1
文件,但是当我尝试在另一个脚本中访问它时,导入模块后,我没有看到在psm1
file.
全局变量.psm1
$blah = "hello world"
我的脚本.ps1
Import-Module "$PSScriptRoot\globals.psm1" -Force -Verbose
Write-Output "blah: ${blah}"
output
PS C:\blah> .\my-script.ps1
详细:从路径“C:\blah\globals.psm1”加载模块。
废话:''
我认为默认情况下所有变量都会导出。我一定是错误地打断了这个:
指定模块导出到调用者会话状态的变量。允许使用通配符。默认情况下,所有变量('*')
已出口
source: MSFT 文档 -> 如何编写 PowerShell 模块清单 https://learn.microsoft.com/en-us/powershell/scripting/developer/module/how-to-write-a-powershell-module-manifest
(CTRL + F
在“VariablesToExport”上查找引用的文本)
是的,如果我导出变量,我可以访问它,但文档说:“默认情况下,所有变量('*')
是出口的,那么我做错了什么或误解了什么? ????
全局变量.psm1
$blah = "hello world"
Export-ModuleMember -Variable blah
你的模块是not用一个module manifest https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Module_Manifests(一个同伴.psd1
文件的RootModule
你的入口点.psm1
文件(如果是脚本模块),而您引用的文档涉及基于模块清单的模块。
如果一个模块包含only of a .psm1
file,并且该文件不包含Export-ModuleMember https://learn.microsoft.com/powershell/module/microsoft.powershell.core/export-modulemember调用时,适用以下规则:
Caveat,如果清单(.psd1
) is used:
-
清单的*ToExport
钥匙适用on top的什么.psm1
文件 - 隐式或显式 - 导出,即您可以使用它进一步缩小出口什么显式枚举要导出的元素,这不仅使模块更具自描述性,而且当 PowerShell 自动发现可用但尚未导入的模块中的命令时,还有助于提高性能。
-
因此,如果基于清单的模块想要导出变量,它也必须有一个显式的Export-ModuleMember
调用其.psm1
文件,清单可能会缩小最终要导出的变量的范围。
一般来说,出口变量来自模块是最好的avoided, 因为:
-
它增加了与其他地方定义的同名变量发生名称冲突的风险。
-
发现哪些变量是由哪个模块导出的,不如使用Get-Command https://learn.microsoft.com/powershell/module/microsoft.powershell.core/get-command是为了确定给定函数、cmdlet 或别名来自哪个模块。这是因为 (a) 导出变量的模块很少见,用户通常不期望它,以及 (b)Get-Variable https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/get-variablecmdlet - 其中can告诉您变量是在哪个模块中定义的 - 在实践中不经常使用。
要查看给定模块导出哪些定义,请传递-Verbose
to the Import-Module https://learn.microsoft.com/powershell/module/microsoft.powershell.core/import-module调用导入它。另外,通过-Force
为了迫使重新加载已导入的模块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)