いつもお世話になっております。
PowerShellにてテキスト内にある特定の文言の集計をしている中で問題が発生しておりますので
どなたかご回答頂けないでしょうか。
問題点
標題の通りなのですが、Import-Csvを使用してCSVファイルから値を取得してオブジェクトに
格納後、foreachでさらに一行ずつ変数内にCSVの値を一行ずつ格納するとオブジェクトプロパティまで
変数内に格納されてしまいます。文言を検索するために取得しているのでプロパティのような余計な
値が入ってしまうと無意味になってしまいます。どうにかプロパティを除外して値のみ変数に格納することはできないでしょうか。
ソースの抜粋
$_iniobj = Import-Csv $_inipath -Encoding Default | Where-Object {$_.Search_flg -eq "1"} | Select-Object physicalname foreach($_line_1 in $_iniobj) { echo $_line_1 Collation-File $_line_1 } }
特定のカラムを取得しているために取得する値は1カラム分のみとなっております。
以上になります。よろしくお願いいたします。
追記;暫定の解決方
$_line_2 = $_line_2.Replace("@{physicalname=",$_Null) $_line_2 = $_line_2.Replace("}",$_Null)
カラム名として格納されているオブジェクトプロパティごと文字列として変数に格納して
それを置換で無きものにする地獄のような対応としております。
どなたかこれ以外で、もっと笑顔になれる解決方法をご教授願えませんでしょうか。
Collation-File というのがよくわかりませんが、Select-Object を使わず $_line_1.physicalname でうまくいきそうな気がします。
Zuishin様
いつもお世話になっております。
本当に目から鱗です。素晴らしすぎます。
ご教授いただいたことを参考に下記のように実装いたしましたら、オブジェクトプロパティは$_line_1に格納されずに値のみを取ってこれました。
---------------------------------------------------
$_iniobj = Import-Csv $_inipath -Encoding Default | Where-Object {$_.Search_flg -eq "1"}
#Import-Csvで取ってきた対象の文言を一行ずつ処理
foreach($_line_1 in $_iniobj.physicalname)
{
Collation-File $_line_1
}
}
---------------------------------------------------
助かりました。また、Collation-Fileというのはファンクションになります。
質問と直接関係のない部分でした。説明不足で申し訳ありません。
混乱を招く基になりえますので以後気を付けてまいります。
本当にありがとうございました。
Zuishin様
ベストアンサーとさせていただきたく、回答としてご記入願えないでしょうか?
よろしくお願いいたします。
それが、うちでどうしても再現しないので説明できないんですよね。
昔は Select-Object の出力はハッシュだったような記憶があるので、文字列化するとまさにそのようなことになっていたはずなんですが、PowerShell 5 で試しても 6 で試しても PSCustomObject が返ってきます。
私の思い違いかもしれないし、バージョンアップで仕様が変わったのかもしれません。
コードも私が書いたわけではないし、よくわからないので自己解決してください。
回答1件
あなたの回答
tips
プレビュー