我的目标是获取两个具有主机名的对象(通过导入CSV创建),并将一个列表与另一个列表进行比较,并显示每个列表中缺少的内容。
在我进行比较之前,我需要操纵存储在对象中的主机名。第一步是使用正则表达式删除(-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" ...
这是我到目前为止尝试做的一个例子(只是替换名称属性值):
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 '.*?@ '`
-replace '.*?@'`
-replace '.*?\:\:.*?'`
-replace '\.cooper\.winner\.com'`
-replace '\.winner\.com'
}
答案 0 :(得分: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