如何从 PowerShell 模块导出变量

2024-03-24

我在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调用时,适用以下规则:

  • Only 功能 and aliases自动导出.

  • 相反,这意味着:为了也导出变量,您必须使用Export-ModuleMember调用 - 如果你这样做了,可以这么说,石板就被擦干净了,你必须明确指定all您想要导出的定义(在最简单的情况下,使用Export-ModuleMember -Function * -Alias * -Variable *).
    另外,请务必拨打此电话end你的.psm1文件,以确保所有要导出的定义均已定义。

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(使用前将#替换为@)

如何从 PowerShell 模块导出变量 的相关文章

随机推荐

  • 如何在 R 中聚合关闭时间事件

    我需要能够包含事件的数据帧 并输出运行的开始 结束和计数 其中运行是事件一起小于指定时间段的情况 data frame 行已经按时间排序 e g library lubridate ts lt c 2016 10 28 19 21 19 2
  • (节点:11684)[DEP0062] 弃用警告:`node --inspect --debug-brk` 已弃用。请改用“node --inspect-brk”

    自从升级 NodeJs 以来 我从 Visual Studio 2017 运行 Nodejs 时收到此错误 断点也不起作用 有任何解决这个问题的方法吗 笔记 VS版本是15 5 6 NodeJS 版本 8 9 4 我遇到了同样的问题 以下内
  • 获取重载静态函数的地址[重复]

    这个问题在这里已经有答案了 可能的重复 如何指定指向重载函数的指针 https stackoverflow com questions 2942426 how to specify a pointer to an overloaded fu
  • 验证 Docker 容器中运行的 ubuntu 版本

    我在 Windows 8 1 上安装了 Docker Toolbox 并且正在创建基于 ubuntu latest 应该是 16 04 的映像 我想确保我的应用程序确实在 16 04 上运行 这是我的 Dockerfile FROM ubu
  • 在 HTML5 应用程序中使用 XML 文件中的数据?

    我有一些 XML 文件 当前用于将数据加载到 Adob e Flex 应用程序中 我正在尝试制作该应用程序的 HTML5 版本 并且我需要将相同的数据加载到 html 应用程序 中 以便我可以像在 Flex 中一样使用和操作 我已经搜索过
  • 无法使用 System.XML.Linq

    我正在开发一个使用 Mono for Android 的项目 在阅读了 Xamarin 的跨平台文档后 我将数据层放在一个单独的项目中 打算将其移动到我的 Mono for Android 项目 然后将这些文件链接到我的 Mono Touc
  • prop 类型在 React 应用程序中不起作用

    我正在尝试在我的react redux应用程序中使用proptypes 但它不起作用 或者我做错了什么 这是代码示例的结尾 LoginPage propTypes login form PropTypes string function m
  • Android 延迟通知

    我正在尝试使用 Android 的通知管理器创建通知 但是 诀窍是我希望通知在未来 30 天后显示 在我的代码中我正在这样做 Intent notificationIntent new Intent this MyClass class P
  • 使用winsock2和IOCP替换Delphi TClientSocket?

    有这样的事吗 它需要是异步的 没有 Indy 尝试 HPScktSrvr http www terry net pages php id 220 939383 http www torry net pages php id 220 9393
  • 哪个 Javascript 函数库:Underscore 或 wu.js 或Functional 或...? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何获取模型属性的 id 以与 MVC3 中的自定义 IClientValidatable 一起使用

    我正在尝试编写一个自定义验证属性 该属性将有条件地需要基于模型布尔属性的字段 我的属性实现了 IClientValidatable 我有要检查的属性名称 但我不知道如何获取目标属性的客户端 ID public IEnumerable
  • Automapper - 字典到对象映射不起作用?

    我正在尝试将字典转换为对象 我已经尝试过以下方法 但它不起作用 public class FormField public string FieldName get set public string FieldValue get set
  • 服务器端表使用 JS、Php 或 Ajax 从表(但不是数据库)中删除行

    项目链接 https databasetable net 000webhostapp com https databasetable net 000webhostapp com 以下代码正确删除表中的一行 example on click
  • LoadInst 和 StoreInst 值和地址 LLVM

    我有一个文件 print c 它有两个功能 void printLoad print address and value of memory location from which value printf address value vo
  • Java - SpringMVC - 获取控制器中的参数

    我在将对象保存到数据库中时遇到问题 我有一个与配置文件具有多对一关系的用户 我的 JSP 刚刚添加了一个新用户 因此 JSP 包含字段和具有所需配置文件的组合框 问题是 当我运行程序时 即使我在组合框中选择了一个配置文件 属性 user p
  • Flutter:google_sign_in 插件 MissingPluginException

    我试图让谷歌登录插件正常工作 但没有成功 我已将其放入我的 pubspec yaml 并运行 flutter packages get 但仍然没有运气 抛出以下异常 E flutter 3313 ERROR lib tonic loggin
  • “有一个”和“是一个”是什么意思? [复制]

    这个问题在这里已经有答案了 谁能解释一下两个类之间的 HAS A 和 IS A 是什么意思 举个例子会有帮助 汽车是 车辆 汽车有一个方向盘 Eg class SteeringWheel class Vehicle virtual void
  • 集合中项目的总和

    使用 LINQ to SQL 我有一个包含 OrderDetails 集合的 Order 类 订单详细信息有一个名为 LineTotal 的属性 它获取 Qnty x ItemPrice 我知道如何对数据库进行新的 LINQ 查询来查找订单
  • iOS 内部分发由外部供应商开发的应用程序

    第三方开发了一款供我们企业环境中私人使用的应用程序 现在是时候分发它了 但他们不想向我们发送他们的代码 我感觉这会导致问题 因为分发配置文件和证书必须发送给他们 从而损害我们的私钥 这是我们不允许的 这是正确的吗 或者可以在不泄露我们的私钥
  • 如何从 PowerShell 模块导出变量

    我在a中定义了一个变量psm1文件 但是当我尝试在另一个脚本中访问它时 导入模块后 我没有看到在psm1 file 全局变量 psm1 blah hello world 我的脚本 ps1 Import Module PSScriptRoot