【问题标题】:Breaking the Powershell namespace limit of global,script打破全局、脚本的 Powershell 命名空间限制
【发布时间】:2011-10-04 06:36:02
【问题描述】:

如何在脚本中创建命名空间或“提供程序”而不编写任何 C# 或使用 Windows Box 中尚未包含的任何内容? - 或者说,我可以通过点源脚本的名称来引用脚本中的变量吗?我想在点源生成的 PoSH 脚本时避免冲突。 Set-Variable cmdlet 没有提供任何关于下一步看哪里的线索,是否有一个 cmdlet 可以创建为您完成所有框架的提供程序?目前我正在使用“全局”(ick)变量列表来跟踪我定义的所有值,基本上我正在尝试构建一个库,在这种情况下,库提供数据值/常量。

【问题讨论】:

    标签: variables powershell scope provider


    【解决方案1】:

    您可以检查被调用脚本中的 $myinvocation 以找到脚本名称。

    听起来你可以在主脚本中实现一种伪命名空间,方法是让你的变量列表成为一个哈希表的哈希表,然后在主脚本中将每个值作为 $vars.scriptname.scriptvariable 引用。

    【讨论】:

    • 我喜欢你的想法@mjolinor。我不是哈希表专家,我希望找到一种机制,比如将提供者伪装成命名空间,或者使用哈希表,因为这两种方法对于非 powershell 爱好者来说都很容易使用。我在 Python 中生成 PoSH,所以我可以将点源文件转换为哈希的哈希值,然后再试一试。
    • 在这种情况下使用哈希表的一个优点是,在父作用域中将元素添加到哈希表时,您不必显式定义它的作用域。
    • 您可能要考虑的其他事情是在调用的脚本中使用 here-strings 来填充您的值和常量,然后在需要提取这些值时使用 convertfrom-stringdata 将它们转换为哈希表回到主脚本。
    • 不幸的是,convertfrom-stringdata cmdlet 仅适用于字符串,而我的数据中实际上包含哈希表和集合。 (这是一个我从来不知道的很酷的命令行开关 :-) 我将在实现中使用哈希表这一事实对最终用户来说并不是一个障碍。除非我在周末之前看到任何其他解决方案,否则我将给你这个答案,我只需要记录我确定的解决方案。
    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2013-11-22
    • 1970-01-01
    相关资源
    最近更新 更多