首页 > 解决方案 > 在 ps1 中使用全局变量

问题描述

我似乎无法找到足够好的解决方案来解决我的问题。有没有一种好方法可以在某种文件中对变量进行分组,以便多个脚本可以访问它们?

我一直在使用 Desired State Configuration 进行一些工作,但是需要完成的工作无法以这种方式有效地实现。重点是在服务器上安装 Azure Build Agent,然后对其进行配置。有些变量真的不应该在脚本文件中,就像个人访问令牌一样复制粘贴。我只是希望能够轻松更改它,而无需进入将使用它的每个脚本。在 DSC 中,您可以创建一个 .psd1 文件并访问变量,例如 AllNodes.NodeName。配置文件调用和参数如下所示:

.\config.cmd --unattended --url $myUrl --auth PAT --token $myToken --pool default --agent "$env:COMPUTERNAME" --acceptTeeEula --work $workDir'

我想让变量 $myToken 可以从外部文件访问以获得更好的安全性,并有一个可以更改值的集中位置。$myUrl 也很重要,因为它会随着 Build Agent 的新更新而改变。

预先感谢您的努力。如果有任何不清楚的地方,请告诉我。

标签: powershellscriptingdsc

解决方案


我对您的问题有两个截然不同的答案,尽管其中任何一个都可能错过您的观点。

首先,可以在配置文件脚本中定义验证。大多数人只使用配置文件脚本来定义函数或类库。但是可以以相同的方式使变量成为全局变量。

我有一个名为 $myps 的变量,它标识了我保存 PS 脚本的文件夹(在子文件夹中)。

当我开始一个会话时,我通常会切换到这个目录(哎呀,我把它称为上面的文件夹。

第二种方法涉及将变量的值存储在 CSV 文件中,而名称存储在 CSV 标头中。然后有一个快速的小命令,可以逐步遍历 CSV 文件,逐条记录,每次通过时生成不同的模板扩展.

这些值并不完全是全局的,但它们可以在不止一种情况下使用。


推荐阅读