2017-01-31 11 views
1

スクリプトで使用する入力変数を宣言する最適な方法は何ですか?PowerShellの複数の変数宣言に最適な方法

現在のところ、私はスクリプトの上に必要なすべての変数を宣言するか、別のVariableDeclaration.ps1を作成し、メインスクリプトにドットソースします。

これを行うには良い方法がありますか?

理由私は、私の同僚がスクリプトをあまり知識なしにスクリプトを使いやすくしたいからです。メインスクリプトに触れることなく、別のファイル(INIやXMLなど)で定義された変数を簡単に編集できます。

提案がありますか?

変数の宣言サンプル:

#Customer_details 
$CustomerID = '100' 
$CustomerName = "ABCorp" 
$vCenterName = "vCenter.ABCorp.com" 
$vCenterUserName = "[email protected]" 
$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' 
+0

「ベスト」は主観的です。誰のため?彼らはそれを頻繁に変更するのですか?現在問題はありますか? – wOxxOm

+0

はい、ピアは実行するたびにそれを変更する必要があります @wOxxOm:変数はメインスクリプトファイルで定義されているので、メインコード部分では安全でないように感じられます。私は意図しない人に変更を加えたくない。 サンプル/サンプルは良い助けになるでしょう。 –

+0

ある人にとっては、Excelファイルがはるかに良いかもしれません。確かに私はそう思っています。 – wOxxOm

答えて

0

"最良の方法は、" 非常に主観的です。それは本当にあなたが達成したいものとファイルを編集する人に依存します。 .ps1ファイルのドットソーシングは基本的には、そのスクリプトを実行していることを意味します(通常の実行のような子コンテキストの代わりに現在のコンテキストで)。サンプルファイルには、データだけでなくコード(ConvertTo-SecureString、連結操作)も含まれているため、これは必須です。

ファイルを編集できる人は誰でも任意のコードを入れることができるため、構成ファイルにコードを入れると問題が生じることがあります。他の形式にはこの欠点はありませんが、additional code for parsing(INI)が必要な場合や、人間(XML)の編集が難しい場合があります。

は、おそらく最高の妥協は ConvertFrom-StringData経由 key=valueエントリをフラット・ファイルを使用し、それを解析することです:設定ファイル内のキー/値のペアからハッシュテーブルを作成します

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

。ファイル形式はINIと似ていますが、全く同じではありません(セクションは許可されません。コメントは;ではなく#で始まります)。

設定ファイルはすべての種類のデータに最適な場所ではありません。通常は、静的情報を構成ファイルに入れて、頻繁に変更されるようにバインドされた情報をスクリプトに作成します(parameter)。それはファイル内の平文の資格情報を格納するために、通常は悪い習慣だと

[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 

... 

注:

例:

config.ps1

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

script.ps1。スクリプトを対話形式で使用する場合は、ファイルに入れる代わりに、資格情報の入力を求めることを検討することをお勧めします。