Import-CSV Where -notmatch数组值列表

时间:2015-03-05 15:30:49

标签: arrays powershell csv

我正在尝试导入一个csv文件,它不会导入在导入行上方声明的数组中列出的任何值。该数组由从数据库中提取的某些值组成,我不想导入csv文件中txnID列值与数组中的值不匹配的所有行但是我无法尝试循环遍历我的数组。

我是使用PowerShell的新手,也许我甚至没有正确实现数组,但我还没有找到任何关于import-csv的信息文件名|哪里列-notmatch $ array

$Database = 'Database'
$Server = "Server"
$SqlQuery = 'SELECT DISTINCT WebOrderNumber FROM tbOrders
WHERE WebOrderNumber IS NOT NULL AND Len(WebOrderNumber)>8'
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Data Source=Datasource;Initial Catalog=Database;User ID=ID;Password=Pass;Integrated Security=False;"

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlConnection.Open()
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter


$SqlAdapter.SelectCommand = $SqlCmd


$Reader = $SqlCmd.ExecuteReader()
while ($Reader.Read()) {

     #write-Output($Reader.GetValue($0))
     $Key = $Reader.GetValue($0)

$table += $Key

}

foreach ($Row in $table){
write-output($Row)
$CSVFile = (import-csv "C:\Users\Office-Admin\Documents\Complete Sales Orders.csv") |where {$_.txnID -ne $Row} | select txnID, FirstName, LastName, Cust_Name, mc_Shipping, Payment_Gross, address_street, Address_Zip, quantity, item_name, item_number, payer_email, address_city, address_state, address_country, address_name, Shipping_Method, mc_gross  

 }
 $CSVFile | export-csv "C:\Users\Office-Admin\Documents\Sales Order Import List.csv" -notypeinformation
 remove-item variable:table

 #Send SMTP Message
 $SqlConnection.Close()

我已稍微更新了我的代码,但问题仍然存在。我现在意识到我已经相信代码了,每次我循环并导入时,忘记了前一个条件,所以最后没有导入的唯一值是最后的$ Row值,但我需要所有$ table中的值被排除在外,我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:1)

这个列表应该有效。主要问题是你在每个循环中编写csv。

$table = import-csv file1.csv | % {$_ID} #gets array of just the ID values
$CSVFile = Import-csv file2.csv  | where{$table -notcontains $_.ID} | export-csv output.csv -notypeinformation

为了向您展示我如何工作,我创建了文件作为示例:

File 1: CSV with IDs:
ID,Stuff
123,alittlestuff
234,morestuff
345,evenmore
456,alotmore
567,somemore
678,notsomuch
789,tonesofstuff


File 2: csv with ID and stuff:
ID,stuff
123,hello
ghf,world
234,test
lkj,this

运行代码后,唯一获得输出的行是:

ID,Stuff
ghf,world
lkj,this

所以我认为将它放入你的代码中使用它:

$filter = $table | %{$_.txnID}
$CSVFile = (import-csv "C:\Users\Office-Admin\Documents\Complete Sales Orders.csv") | where{$filter -notcontains $_.txnID} || export-csv "C:\Users\Office-Admin\Documents\Sales Order Import List.csv" -notypeinformation