dポイントプレゼントキャンペーン実施中!

PowerShelにおいて外部ファイルに書いてある変数を設定したと考えています。

たとえばread.iniファイルに下記の記載があるとします。
[yomikomi]
FilePath,C:\temp\test
MODRI,3
Message,"エラーが起きました"

このファイルをps1ファイルで読み込んで変数にしたい感じです。
$FilePath=C:\temp\testといった感じ)
区切り文字とかは何でもいいです。

読み込ませ形式についてはiniかps1形式が理想です。

ただ実行ps1ごとに読み込ませるファイルが異なるため.profileなどの初期読みこみ
系にかけない状況です。(profileがもっと応用的に使用できるならいいですが)

よろしくお願いします。

A 回答 (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,"エラーが起きました"
    • good
    • 0

Get-Contentとか。


それと、設定ファイルはXML形式にするのが簡単。
「PowerShellでの外部ファイルから」の回答画像1
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

推奨いただきました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] →ここにで読み込んだものを変数格納する形がわからない
}
}
}

ご教授ください。

お礼日時:2011/07/24 10:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!