我想从以下两个数组搜索中获取行/结果并导出到csv,但我看不到如何处理输出到文件。
$inputfile = import-csv 'C:\Users\Desktop\working\8a.csv'
$OutAll1 = @()
foreach($row in $inputfile)
{
if($row.Parameter -contains "Type of file server")
{
echo "Hooray for Type of File Server"
$OutList = New-Object System.Object
$OutList | Add-Member -type NoteProperty -Name "Parameter" -Value $line."Type of file server"
$OutAll1 += $OutList
}
if($row.Parameter -contains "File server")
{
echo "File Server"
$OutList = New-Object System.Object
$OutList | Add-Member -type NoteProperty -Name "Parameter" -Value $line."Type of file server"
$OutAll1 += $OutList
}
以下是我无法获得我的数组的输出:
Export-Csv 'c:\users\desktop\working\out.csv'
或者如果我将数组变为变量:
$data = $outall1 = @()
foreach($row in $data) {export-csv 'c:\users\desktop\working\out.csv'}
我的目标是从第一个和第二个搜索词中获取结果并输入一个csv,保留原始列名称("组件,服务器,参数,值和#34;)
答案 0 :(得分:0)
您应该先复制行对象,例如$OutList = $row.PSObject.Copy()
(这是适用于CSV处理的浅拷贝)。
但是,使用流水线操作并直接修改行变量$_
更容易:
$csv = Import-Csv 'C:\Users\Desktop\working\8a.csv' | ForEach {
if ($_.Parameter -match 'Type of file server') {
Write-Information 'Hooray for Type of File Server'
$_.Parameter = 'foo'
} elseif ($_.Parameter -match 'File server') {
$_.Parameter = 'bar'
}
# now output the modified row so that ForEach collects it in $csv
$_
}
如果不需要进一步处理,您可以直接导出到另一个CSV而不使用$csv
变量:
Import-Csv 'C:\Users\Desktop\working\8a.csv' | ForEach {
......................
$_
} | Export-Csv 'c:\users\desktop\working\out.csv' -NoTypeInformation -Encoding UTF8
注意:
-contains
运算符用于数组;字符串使用-match
(也是正则表达式)或-like
(使用通配符)
Pipelining收集所有输出,包括echo
,因此对于辅助消息使用
除Write-Information
以外的Write-Host
或Write-
以及其他Write-Output
个cmdlet。
+=
如果数组重新创建整个数组:它会将旧内容与新元素一起复制到新数组中。它可以说是在PowerShell中填充大型数组的最糟糕的方法。仅当+=
不是循环内的一次性操作,或者数组很小且时间无关紧要时才使用get()
。
答案 1 :(得分:0)
我已经解决了这个问题。我很欣赏让我发帖的网站。以下是解决它的几个主要部分。 1.我需要添加额外的“Add-member noteproperty”来获取我想要的部分行。 我试图“$ varible | export-csv”是正确的;但是在我发布之前我没有成功,也没有看到原因。这是最终的工作代码:
$inputfile = import-csv 'C:\Users\Desktop\working\8a.csv'
$OutAll1 = @()
foreach($row in $inputfile){
if($row.Parameter -like "Type of file server"){
echo "Hooray for Type of File Server"
$OutList = New-Object System.Object
$OutList | Add-Member -type NoteProperty -Name "Component" -Value $row.Component
$OutList | Add-Member -type NoteProperty -Name "Server" -Value $row.Server
$OutList | Add-Member -type NoteProperty -Name "Parameter" -Value $row.Parameter
$OutAll1 += $OutList
}
if($row.Parameter -contains "File server"){
echo "File Server"
$OutList = New-Object System.Object
$OutList | Add-Member -type NoteProperty -Name "Component" -Value $row.Component
$OutList | Add-Member -type NoteProperty -Name "Server" -Value $row.Server
$OutList | Add-Member -type NoteProperty -Name "Parameter" -Value $row.Parameter
$OutAll1 += $OutList
}
$Outall1 | Export-csv 'c:\out.csv'
我总是错误地在数组中使用$ row和$ line。