私の目標は、ホスト名を持つ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'
}
あなたの質問は何ですか?何かがうまくいかないのですか?エラーが発生していますか? –
それは上のフォームが動作せず、次のエラーが表示されます。 "このオブジェクトで 'name'プロパティが見つかりません。プロパティが存在し、設定できることを確認してください。"しかし、私が使用する場合: "$ NewObject = $ global:QRadarReportObject.name | ForEach-Object {..."それは値を置き換えますが、全く新しいオブジェクトを作成し、それは私がやろうとしているものではありません。 – MrMr
'$ global:QReportObject.name ='はあなたが期待することをしません。この簡略構文は、 'QReportObject'配列のすべての要素から* name *プロパティを取得することです。各要素のプロパティを割り当てるには、要素を個別に反復する必要があります: 'foreach($ o in QReportObject){$ o.name = $ o.name -replace .....' – wOxxOm