2017-06-20 19 views
0

私の目標は、ホスト名を持つ2つのオブジェクト(CSVをインポートして作成)を取得し、1つのリストをもう一方のオブジェクトと比較して、PowerShellを使用してオブジェクト内の文字列値を操作する

私は比較を行う前に、オブジェクト内に格納されているホスト名を操作する必要があります。まず、正規表現を使用して不要なテキストを削除し(-replace)、すべてのホスト名を小文字(ToLower())に設定します。

私は、既存のオブジェクトを変更してそれらを「無傷」に保つことにあまり熟練していないので、誰かがこれを手伝ってくれることを願っています。

ここに、CSV内に保存されるデータの例を示します。ヘッダは、7行目にあり、データの各行が同じように格納されます。

 
    ... 
7 "name","IP","OSType" 
8 "WCSMserver.com","10.10.10.10","OSX" 
9 "SERVER2.com","11.11.11.11","Windows" 
10 "windowsserver @ SERVER2.com","11.11.11.13","Windows" 
11 "winner.comSERVER2.com","11.11.11.12","Windows" 
    ... 

ここで私はこれまでのところ(ちょうどnameプロパティ値を置き換える)やろうとしているものの例です:

function ReadExcelReport() { 
    $global:ConvertedQReportTest = $PSScriptRoot + "\" + "AllSources.csv" 
    $global:QReportObject = Get-Content -Path $global:ConvertedQReportTest | 
          Select-Object -Skip 7 | 
          ConvertFrom-Csv 
} 

ReadExcelReport 

$global:QReportObject.name = $global:QReportObject.name | ForEach-Object { 
    @($global:QReportObject.name) 

    $_ -replace 'WCSM \- ' ` 
     -replace '.*[email protected] '` 
     -replace '.*[email protected]'` 
     -replace '.*?\:\:.*?'` 
     -replace '\.cooper\.winner\.com'` 
     -replace '\.winner\.com' 
} 
+0

あなたの質問は何ですか?何かがうまくいかないのですか?エラーが発生していますか? –

+0

それは上のフォームが動作せず、次のエラーが表示されます。 "このオブジェクトで 'name'プロパティが見つかりません。プロパティが存在し、設定できることを確認してください。"しかし、私が使用する場合: "$ NewObject = $ global:QRadarReportObject.name | ForEach-Object {..."それは値を置き換えますが、全く新しいオブジェクトを作成し、それは私がやろうとしているものではありません。 – MrMr

+1

'$ global:QRep​​ortObject.name ='はあなたが期待することをしません。この簡略構文は、 'QReportObject'配列のすべての要素から* name *プロパティを取得することです。各要素のプロパティを割り当てるには、要素を個別に反復する必要があります: 'foreach($ o in QReportObject){$ o.name = $ o.name -replace .....' – wOxxOm

答えて

2

$global:QReportObject.name | ForEach-Objectを実行すると、オブジェクトではなくオブジェクトの名前がループされます。

私はあなたのスクリプト(読みやすさのために)少し簡略化されました:

$csv = @" 
"name" 
"WCSMserver-remove this-com" 
"SERVER2.com","11.11.11.11" 
"windowsserver-remove this-" 
"winner.comSERVER2.com" 
"@ 

$global:QReportObject = $csv | ConvertFrom-Csv 

$global:QReportObject | Out-Default 

$global:QReportObject | ForEach-Object { 
    $_.name = $_.name -replace '-remove this-' 
    $_.name = $_.name.ToLower() 
} 

$global:QReportObject | Out-Default 

この意志出力:

name      
----      
WCSMserver-remove this-com 
SERVER2.com    
windowsserver-remove this- 
winner.comSERVER2.com  



name     
----     
wcsmservercom   
server2.com   
windowsserver   
winner.comserver2.com 
+0

それはトリックでした、ありがとう。 – MrMr

関連する問題