PowerShellコミュニティフォーラムで、PowerShell変数を外部ファイルに保存することが可能かどうか、またそうであればどのように行うのかという質問を最近受けました。 PowerShellが使用できるように外部ファイルに変数を格納することは実際に可能です。 これらの外部変数は、さまざまな種類のファイルに格納できます。 PowerShellファイルに保存することは、これらのファイルをドットソースにすることができるため、最も簡単な方法の1つです。
変数を格納するための以下のメソッドについて説明します:
- スクリプトファイル
- テキストファイル
- JSONファイル
- XMLファイル
この投稿に示されている例は非常に単純ですが、それはかなり複雑な変数を外部ファイルに格納することができないという意味ではありません。 外部変数の格納を試したい場合は、この投稿のサンプルファイルをダウンロードできますhere。
スクリプトファイル
ドットソースは、外部変数を格納する最も簡単な方法かもしれませんが、常に最も安全ではありません。 ファイルがドットソースされているときは、そのスクリプトを実行するようにPowerShellに指示しています。 ファイルに悪意のあるコードがある場合は、そのコードも実行されます。
dot sourcingに追加するには、外部変数PowerShellスクリプトが署名されており、マシンでリモート実行が有効になっていることを確認する必要があります。
Dot sourcingは、何かについての情報を動的に取得する必要がある場合に役立ちます。 この記事で説明した他のオプションについては、ファイルタイプに格納されているデータを手動で変更する必要があります。
1234 |
# ここでは、外部変数PowerShellファイルをドットソースします。 "C:\Test\BlogPosts\ExternalVariables.ps1"書き込みホスト$External_Variable1$External_Variable2 |
ExternalVariables.ps1ファイルにあるものは次のとおりです:
#外部変数の宣言
Extern External_Variable1=’Sapien’
$External_Variable2=’Technologies’
テキストファイル
外部変数は、一般的なプレーンテキストなど、多くのテキストファイルや形式で格納することもできます。Get-Contentコマンドレットを使用したtxtファイル。 この方法で変数をインポートすると、コードは実行されないため、ファイルを常に監視して情報を取得しないと問題になりません。
以下の三つの図は、単純なテキストファイルに情報を格納するさまざまな方法の例です:
12345678910111213 |
$ScriptDir=Split-Path$script:MyInvocation.マイコマンド...パスScrip ScriptDir+="\ExternalVariables。txt"#使用のコンテンツを取得すべてのラインが描かれており、txtファイルを$External_Variables=得-コンテンツ-パ$ScriptDir#からの情報ExternalVariablesが配列として#く印刷すべての文字列$プログラムを使用していまforeach loopforeach($string$External_Variables){書催$string} |
これがそのExternalVariables.txtファイル:
“PowerShell Studio”
“PrimalScript”
“バージョンリコール”
配列と同じように、ハッシュテーブルをテキストファイルに格納できます。 テキストファイルからハッシュテーブルを取得するには、Get-Contentの出力をConvertFrom-StringDataコマンドレットにパイプして、出力をハッシュテーブルに変換する必要があ
1234567891011121314 |
$ScriptDir=Split-Path$script:MyInvocation.マイコマンド...パスScrip ScriptDir+="\ExternalVariablesHashTable。txt program=Get-Content-raw-Path$ScriptDir|ConvertFrom-StringData write-host"`変数のnType`program program'n".program.GetType()write-host"`nPrinting'$program"$program |
ここにExternalVariablesHashTableにあるものがあります。txt:
Company=Sapien Technologies
Product=PowerShell Studio
このようなテキストファイルに情報を格納することは、人間が読める形式で情報を保持する便利な方法です。 テキストファイルには実行可能でないという利点もあるため、定期的に管理していないファイルに悪意のあるコードが保存されている場合は実行さ
JSONファイル
外部変数をJSON形式で格納することもできます。 唯一の注意点は、Get-Contentの出力を別のコマンドレットに再度パイプする必要があることです; しかし、今回はConvertFrom-StringDataではなくConvertFrom-Jsonです。 JSONに慣れていない方、またはフォーマットをブラッシュアップする必要がある方は、こちらをご覧くださいwww.JSON.org.
1234567891011121314151617 |
$ScriptDir=Split-Path$script:MyInvocation.マイコマンド...パスScrip ScriptDir+="\jsonfile。json"#jsonファイルから情報を取得する#Get-ContentからConvertFrom-Jsonコマンドレットに出力を渡します$JsonObject=Get-Content$ScriptDir|ConvertFrom-Json#今、配列を持っています。#それを使用する要素$JsonObject。ユーザー#インデックスが作成されると、elementsWrite-Hostの属性を個別に呼び出すことができます"Attributes個別に属性を指定しますprinted"$JsonObject.Users.Name$JsonObject.Users.Age$JsonObject.Users.City$JsonObject.Users.Country$JsonObject.Users.UserId |
JSONファイルには次のものがあります:
{
“ユーザー”:
}
XMLファイル
変数をXML形式で格納する場合、必要に応じて変数ファイルにコメントを追加することができます。 コメントを可能にするこの記事で説明する唯一の2つのファイル形式はXMLまたはPS1です。 JSONファイルと通常のTXTファイルでは、コメントは許可されません。 XML形式の簡潔な概要については、以下を参照してくださいw3schools.com/xml.
123456789 |
$ScriptDir=Split-Path$script:MyInvocation.マイコマンド...パスScrip ScriptDir+="\XMLFile。xml"#変数からすべての情報を読み込むXMLファイル#すべてのファイル情報を格納するときのように変数をキャストする必要があります$Xml_Variable=Get-Content-Path$ScriptDir#Breakfastオブジェク朝食_メニュー.食品/フォーマット-リスト |
XMLファイルには次のものがあります:
Belgian Waffles
.95
Two of our famous Belgian Waffles with plenty of real maple syrup
650
Strawberry Belgian Waffles
.95
Light Belgian waffles covered with strawberries and whipped cream
900Berry-Berry Belgian Waffles
$8.95
新鮮なベリーとホイップクリームの盛り合わせで覆われたベルギーのワッフル
900
XMLとJSONのどちらのストレージ形式を選択するかは、どちらがより使い慣れているかにかかっています。 それらの主な違いは、XMLがコメントを許可することであるため、それは単なる好みの問題です。 これらのオプションはすべて、別のプログラムによって読み取られるか、後で同じプログラムによって使用される外部ファイルに情報を格納す どのように複雑な、それが動的であるかどうか、およびどのくらいの情報を格納する必要があるかは、使用する形式を決定します。
ファイルへのエクスポート
PowerShellで情報をインポートするのと同じように、使用しているプログラムから情報やオブジェクトを外部ファイルにエクスポートすることも可能です。 PowerShell Studio2018には、外部ファイルとオブジェクトのパスを対応するエクスポート関数に渡すだけで、スニペットが他のすべてを処理します。 今後のブログ記事では、スニペットを使用したファイルへのエクスポートについて説明します。