PowerShellでの外部ファイルからの変数読み

このQ&Aのポイント
  • PowerShellを使用して外部ファイルから変数を読み込む方法を探しています。具体的には、read.iniファイルに変数が書かれており、ps1ファイルでそれを読み込んで変数として使用したいです。
  • 外部ファイルから変数を読み込むためには、read.iniファイルのような形式が望ましいです。例えば、[yomikomi]というセクションにFilePath,C: emp estといった変数の記述をすることができます。ps1ファイルごとに異なるファイルを読み込む必要があるため、初期読み込みのような仕組みでは対応できません。
  • PowerShellでは、外部ファイルから変数を読み込むためにGet-Contentコマンドを使うことができます。具体的な実装方法やファイルの形式にはいくつかの選択肢がありますが、read.iniファイルのような形式が理想です。また、読み込んだ変数は$変数名=値という形式で使用することができます。
回答を見る
  • ベストアンサー

PowerShellでの外部ファイルからの変数読み

PowerShelにおいて外部ファイルに書いてある変数を設定したと考えています。 たとえばread.iniファイルに下記の記載があるとします。 [yomikomi] FilePath,C:\temp\test MODRI,3 Message,"エラーが起きました" このファイルをps1ファイルで読み込んで変数にしたい感じです。 $FilePath=C:\temp\testといった感じ) 区切り文字とかは何でもいいです。 読み込ませ形式についてはiniかps1形式が理想です。 ただ実行ps1ごとに読み込ませるファイルが異なるため.profileなどの初期読みこみ 系にかけない状況です。(profileがもっと応用的に使用できるならいいですが) よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.2

丁度同じような話が出ました。 http://okwave.jp/qa/q6899282.html ポイントの部分だけ抜き出したものを載せておきます。 不要行の読み飛ばしや配列利用は、適宜応用してみて下さい。 *** 以下の2ファイルを同ディレクトリに配置し、script.ps1を実行する *** *** script.ps1 *** Get-Content .\read.ini | Foreach-Object { $name, $value = $_.split(',', 2) Invoke-Expression "`$$name='$value'" } echo $FilePath $MODRI $Message *** read.ini *** FilePath,C:\temp\test MODRI,3 Message,"エラーが起きました"

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

Get-Contentとか。 それと、設定ファイルはXML形式にするのが簡単。

stsuya
質問者

お礼

回答ありがとうございます。 推奨いただきましたXML形式についてはXMLを勉強しつつ取り入れていきたいと思います。 それともう一つのGet-Content形式ですが、これは読み込んだ後どのように変数化すればいいでしょうか? 今はiniファイルの中身を [Sting]$test0="message001" [Sting]$test2="message002" [Sting]$test3="message003" みたいな形にして、います。 前に以下のような形で適用できないか試しましたが・・・ $reader = New-Object System.IO.StreamReader($Logfile,[Text.Encoding]::GetEncoding("Shift_Jis")) while (($line = $reader.ReadLine()) -ne $null){ # 抜き出し処理 $check1=$line -split "," if($rx.IsMatch($line)){ # "先頭が#の場合Skip" }elseif($line -eq ""){ # "文字が含まれていない場合Skip" }elseif($line.trim() -eq "" ){ # "全空白を削除した結果Nullの場合Skip" }else{ if($check1[1] -ne ""){ $check1[0]=$check1[1] →ここにで読み込んだものを変数格納する形がわからない } } } ご教授ください。

関連するQ&A

  • powershellとiniファイル

    ps1よりiniファイルを読み込むスクリプトを作成中です。 iniファイルには以下の記載をしています。 いわゆる連想配列です。 $info = @{} $info[0] = @{ host=testest1 ip=192.168.0.0 } $info[1] = [ host=testest2 ip=192.168.0.1 } 一方、ps1は以下の通り、コードを記述しています。 $INI_PATH = @(Split-Path $script:myInvocation.MyCommand.Path -Parent).Trim() $INI_FILE = "ini_test2.ini" $INI_FULLNAME = $INI_PATH + "\" + $INI_FILE $PARAMETER = @{} Get-Content $INI_FULLNAME | %{$PARAMETER += ConvertFrom-StringData $_} $host_info = $PARAMETER.info[0] #値格納 $host_info いざ、実行すると、 「ConvertFrom-StringData : データ行 '}' の形式が '名前=値' ではありません。」、「項目は既に追加されています。」とのエラーが出ます。 どのように変えればエラーがなくなりますでしょうか。 Powershellの初歩的な質問で申し訳ないのですが、ご回答をよろしくお願いいたします。

  • バッチファイルの環境変数を別のファイルにまとめたい

    コマンドプロンプトの勉強を始めましたが、分からない事があります。 a.ini------------ HENSU01=20081231 HENSU02=20090101 HENSU03=D:\temp ----------------- 例えば上記のような必要な環境変数をひとまとめしたa.iniがあるとします。 これをx.batとy.batを実行する時に参照して同じ環境変数として共用したいのですが、何か良い方法はありませんか? 別のバッチファイルからa.iniの内容で環境変数を設定後に'call x.bat'とすれば、上手く行きそうな気はするのですが、肝心の環境変数の設定の仕方が分かりません。 なお、a.iniにはsetコマンドは記述しないで、上記の形式のままで使用したいです。 どなたか具体的ご教授お願いします。 よろしくお願いします。

  • phpファイルと読み込みたい変数が書かれたtxtファイルが同じフォルダ

    phpファイルと読み込みたい変数が書かれたtxtファイルが同じフォルダ階層に以下の名前であります。 1, yomikomi.php 2, hensuu.txt hensuu.txtの内容は &days=1,8,15,22,29&days_b=3,10,17,24&last=end& の1行です、 &で囲まれた変数"days" と"days_b" の値が、カンマ区切りで書かれています。 数字の個数や値は手入力で修正し毎回変動します。 last=end&の意味は分かりません。 他のプログラムも参照しますので、数字以外の書式は変えることは 出来ません。 やりたい事は yomikomi.phpの中からhennsuu.txtの変数 days says_b を配列変数として読み込みたいのです。 どなたかお知恵をお貸し下さい。

    • ベストアンサー
    • PHP
  • power shell の変数について。

    宜しくお願いします。 "power shellで、iniファイルを読み込み、それをrobocopyの値に代入する"プログラムを作成しています。 サイトや、サンプルコード等を参考にしながら、プログラムの作成に取り組んでいるのですが、 想定通りの動きをしてくれません。 以下が現時点のモジュール(.ps1と.ini)です。 #####【実行モジュール(robocopy.ps1)】##### if (!(test-path -pathtype Leaf D:\testmodule\test_ini.ps1)) { $MSG = (get-date -Format "yyyy/MM/dd HH:mm:ss.ff ") + ` "iniファイル無し" write-host $MSG exit 8 } else { . D:\testmodule\test_ini.ps1 } #ここでiniファイルの変数を、robocopyの値($***)に代入する処理を使用するのでしょうか? robocopy $FORDER $BK_FORDER $TXT $XLS /IS /MIR /COPYALL #####【定義ファイル(test.ini)】##### # 対象txt "testsystem.txt" # 対象xls "test.xls" # バックアップ元フォルダパス "M:\testforder" # バックアップ先フォルダパス "W:\bkupforder" 稼働内容としては、 【power shell実行 → iniファイルの読み込み → iniファイルから変数を使用し、robocopyの値($***)に代入し実行】 です。 特に、"iniファイルから変数を使用し、robocopyの値($***)に代入"する方法が分からず困っています。 iniで指定した変数をrobocopyの値に代入し、稼働内容通りに動かすには、 どのようなプログラムを作成すれば良いのでしょうか? お手数をかけますが、ご教授を宜しくお願いします。

  • DLL内からの外部変数の参照

    BCC(フリーコンパイラ)で、WindowsAPIを使った プログラムを作成しています。その過程で、DLLを 作成しているのですが、 test.c を、 bcc32 -WD test.c とし、test.dllを作成しました。 さらにそれを、 implib test.lib test.dll で、test.libを作成ました。 ところが、おなじtest.cファイルで、ほかのファイル の変数を参照しようとして、extern HWND hWnd と書き加えたところ、bcc32 -WD で、参照先が見つか らないというエラーが起こり、DLLが作成できなく なってしまいました。 DLL内から外部の変数を参照するにはどうしたらよいで しょうか。この場合の外部の変数というのは、WinMain 関数のあるmain.cファイル内の静的変数です。 よろしくお願いいたします。

  • Perl require 共通の変数 外部ファイル

    ファイルが多くなってきて、その中でも共通の変数があるので 外部ファイルにまとめたい・・・ ~test.pl~ #!/usr/bin/perl require("testcommon.pl"); print qq(Content-type: text/html\n\n); print <<END; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=$CHARSET"> <title>外部CGIファイル読み込み</title> </head> <body> END print qq($test<br>$data<br>$NEW); print <<END; </body> </html> END exit; 1; ~testcommon.pl~ #!/usr/bin/perl $test = "テスト"; $data = "テストです"; $CHARSET = "UTF-8"; $NEW ="サーバー"; 1; まずこれが現在テスト中で サーバーAでは、これでいけているのですが、 サーバーBでは、これではいけず、 エラーログを見ると 「@INC~/usr/local/lib64/perl5~」 とでてます。これがどのような意味をささしているのかわからないです。 いつも1行目に書く「#!/usr/bin/perl」の部分を書き換えてみたのですが・・・ さらにサーバーBでは、ログファイルなど開く際、フルパスでないと開けません。 require("testcommon.pl");←これですと インターネットサーバーエラーとなってしまいます。 これはエラーログを見るとフルパスで指定と書いていたので、 require("/path/path/path/testcommon.pl"); のようにしました。 これで、一応表示はできたのですが、 testcommon.plで新しい変数を書き加えると、($NEW123 = "追加したい変数";) 表示されません。 またCHARSETでUTF-8を指定してますが、 更新や、再度ページに入ったりすると、 CHARSETの変数が反応していなかったりしています。ページでソースを確認すると 変数の部分が空欄になってます。 これは require("/path/path/path/testcommon.pl"); が読み込んでいなかったり読み込んでいたり もしくは、一度なにをしたのかわからないですが、このフルパスの場所に testcommon.plのファイルをおいて、そのときのままになっている など、原因、対処がわからず困っております。 ※というより結論としては、 共通の変数を1つのファイルでしようしたいということです。 ~common.pl~ $a = 123; $b = "テスト"; $c = 2; ~test1.pl~ $TEST = $a * $c; print "$b$TEST\n"; #結果「テスト246」 ~test2.pl~ $TEST123 = $a + $c; print "$TEST123$b; #結果「125テスト」 このような感じ・・・(+_+)

  • Powershellで複数のcsvファイルを一つに

    powershellの初心者です。 PowerShellで複数のcsvファイルを一つにする必要にせまり ネット情報を探して以下がヒットしましたが 初心者なのこの情報をどう利用して良いのかが判りません。 以下の具体例でコード(Join.ps1)を教えてください。 以下の3つのファイルを C:\Users\TAC_\Desktop\Test\Drive1.csv C:\Users\TAC_\Desktop\Test\Drive2.csv C:\Users\TAC_\Desktop\Test\Drive3.csv 以下のファイル名に保存(まとめる) C:\Users\TAC_\Desktop\Test\Join.csv C:\Users\TAC_\Desktop\Test\Join.ps1を起動させると 該当する3つのCSVファイルを結合したJoin.csvを作成する

  • 変数の内容をファイルに書き込む方法を教えてください。

    Visual Basic 2005です。 変数にはカンマ区切りのデータが記録されています。 例・2006,12,6,11,23,00,23.5 のような感じです。 これがDataという変数に入っている場合、このファイルをtxtファイルに上から順に書き込んでいくと言うプログラムです。 ファイル内はこのようになります 2006,12,6,11,23,00,23.5 2006,12,6,11,24,00,23.6 (改行される) 2006,12,6,11,25,00,23.7 (改行される) ・ ・ ちょっと手を貸していただけませんか。 お願いします

  • PowerShellのスクリプト実行について

    PowerShellのスクリプト実行について PowerShellの勉強をしていますが、スクリプトを実行できません。。。 なんか、スクリプトの環境変数を設定するようですが、どこにも 設定方法がないです。。。。 もちろん、Set-ExecutionPolicy Unrestrictedは実行してあります。 以下日付と時間を表示するだけのスクリプトです。 ---------test.ps1--------- get-date get-time ---------------------------- スクリプトファイルの置き場所 ⇒ C:\script-test\test.ps1 ちなみに、スクリプトファイルを置いたディレクトリに移動して 実行しても、以下のようなメッセージが出て実行できませんでした。。 用語 'C:\script-test' は、コマンドレット、関数、スクリプト ファイル、または操作 可能なプログラムの名前として認識されません。名前が正しく記述されていることを確 認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してく ださい。 発生場所 行:1 文字:15 + C:\script-test <<<< .\test.ps1 + CategoryInfo : ObjectNotFound: (C:\script-test:String) []、Comma ndNotFoundException + FullyQualifiedErrorId : CommandNotFoundException どなたかご教授下さい。

  • [マクロ]配列を区切り文字で変数に格納する方法

    タイトルの通りなのですが、 例えば、 A1~B10にランダムな数字が入っています。 (1)A1~B10を配列Cに格納します。 (2)配列C(1,10)を変数test1に格納します。  ※その時に各配列を/で区切る (3)配列C(2,20)を変数test2に格納します。  ※その時に各配列を/で区切る (4)test1をセルC1に記入 (5)test2をセルC1に記入 のような感じです。 配列に格納する方法はさすがに分かるのですが、区切り文字を入れて変数に格納する方法が分かりません。。。。 ご教授お願いいたします。

専門家に質問してみよう