【问题标题】:Best way for multiple Variable Declaration in PowerShellPowerShell中多个变量声明的最佳方式
【发布时间】:2017-01-31 07:03:14
【问题描述】:

声明要在脚本中使用的输入变量的最佳方法是什么?

到目前为止,我要么在脚本上方声明所有需要的变量,要么创建一个单独的 VariableDeclaration.ps1 并在主脚本中点源它。

有没有更好的方法来完成这项工作?

我想这样做的原因是因为我想让我的同龄人在没有太多脚本知识的情况下也能轻松使用该脚本。他们可以轻松地编辑在单独文件(可能是 INI 或 XML)中定义的变量,而无需触及主脚本。

有什么建议吗?

变量声明示例:

#Customer_details
$CustomerID = '100'
$CustomerName = "ABCorp"
$vCenterName = "vCenter.ABCorp.com"
$vCenterUserName = "administrator@vsphere.local"
$vCenterPassword = ConvertTo-SecureString -String "ABCorp123" -AsPlainText -Force;
$CustomerPODLocation = "VW1"
$DatacenterName = "ABCorpDC"
$ClusterName = "ABCorpcluster"
$InfraResourcePoolName = $CustomerID + "-" + $CustomerName + "-" + "Infrastructure"
$FolderName = $CustomerID + "-" + $CustomerName
$ConnectionType = "S2S"
$VLANID = '237'
$PortGroupName = $ConnectionType  + "-" + $CustomerID + "-" + $CustomerName + "-" + $VLANID
$NumberofPorts = '1024'

【问题讨论】:

  • Best 是主观的。为了谁?他们经常改变吗?目前有什么问题吗?
  • 是的,同行每次运行时都需要更改它@wOxxOm:现在的问题是该变量是在主脚本文件中定义的,因此对于主编码部分来说感觉不安全。我不希望任何不经意的人在那里做出任何改变。一个示例/示例将是一个很好的帮助
  • 嗯,对于某些人来说,Excel 文件可能要好得多。我会说这是一个相当合理的选择。

标签: powershell-3.0


【解决方案1】:

“最佳方式”是相当主观的。这实际上取决于您想要实现的目标以及将由谁来编辑文件。点源 .ps1 文件基本上意味着您正在执行该脚本(在当前上下文中,而不是像常规执行那样的子上下文中)。这是您的示例文件所必需的,因为它不仅包含数据,还包含代码(ConvertTo-SecureString,连接操作)。

在配置文件中包含代码可能会带来问题,因为任何能够编辑该文件的人都可以在其中放入任意代码。其他格式没有这个缺点,但可能需要additional code for parsing (INI) 或者更难为人类编辑 (XML)。

也许最好的折衷方案是使用带有key=value 条目的平面文件并通过ConvertFrom-StringData 对其进行解析:

$config = Get-Content 'C:\path\to\config.txt' -Raw | ConvertFrom-StringData

这将从配置文件中的键/值对创建一个哈希表。文件格式与 INI 类似,但不完全相同(不允许分段,cmets 以# 开头而不是;)。

不过,配置文件并不是存放所有类型数据的最佳位置。通常你会将静态信息放在配置文件中,并将经常更改的信息设置为parameter 到脚本中。

例子:

config.ps1:

$foo = 'something'   # static information, unlikely to change between script runs
...

script.ps1:

[CmdletBinding()]
Param(
  # required value that is likely to change between script runs
  [Parameter(Mandatory=$true)]
  [string]$Bar,

  # default value that works most of the time, but which you want to
  # be able to override on the fly
  [Parameter(Mandatory=$false)]
  [int]$Baz = 42,

  ...
)

# read static configuration
. .\config.ps1

...

请注意,将明文凭据存储在文件中通常是不好的做法。如果您的脚本旨在用于交互式使用,您可能需要考虑提示输入凭据,而不是将它们放入文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多