2013-06-03 38 views
1

所以我有一些代碼,我寫了採取輸入形成文本文件,並運行對另一個數據庫I填充一些SQL檢查:SQL查詢使用PowerShell - 返回值不MACHING

$volOutput = gc C:\Users\<user>\Desktop\mutant.txt 

foreach ($m in $volOutput) { 

    $check = $m.split()[-1] | select -Unique 

    foreach ($c in $check) { 
    #$c - this lists all of them so the foreach is working... 

    # Build the connection and search the db for $c names. 
    $conn = New-Object System.Data.SqlClient.SqlConnection 
    $conn.ConnectionString = "Server=(localdb)\mutex; Database=MutexObjects" 
    $conn.Open() 
    $db = $conn.CreateCommand() 
    $db.CommandText = "select Names from Objects WHERE Names='$c'" 
    $db.ExecuteScalar() 
    $conn.Close()  

    } # Foreach Check 

} # First foreach 

的返回值,我得到是:

PS C:\>B:\Programming\powershell\parse_vol.ps1 
ZonesCounterMutex 
ZoneAttributeCacheCounterMutex 
ZonesCacheCounterMutex 
ZoneAttributeCacheCounterMutex 
ZonesLockedCacheCounterMutex 
ZonesCounterMutex 
ZoneAttributeCacheCounterMutex 
ZonesCacheCounterMutex 
ZoneAttributeCacheCounterMutex 
ZonesLockedCacheCounterMutex

這是正確的,但它也缺少很多。如果我採取個別樣品和運行查詢從SQL Management Studio中,例如中,我得到:

我填充「測試」一詞在每個列表作爲....測試。

Select Names From Objects WHERE Names='test' 

Names 

test 

但我沒有看到從上面的代碼輸出測試。大約有5或6個以上的缺失,我通過查詢SQL管理工作室中的數據庫來手動驗證。

任何幫助,非常感謝。

回答

1

比較對名稱的完整列表中的文件內容從數據庫中:

$filecontent = Get-Content "C:\Users\<user>\Desktop\mutant.txt" ` 
      | % { $_.split()[-1] } ` 
      | select -Unique 

$conn = New-Object System.Data.SqlClient.SqlConnection 
$conn.ConnectionString = "Server=(localdb)\mutex; Database=MutexObjects" 
$conn.Open() 
$dbwrite = $conn.CreateCommand() 
$dbwrite.CommandText = "SELECT Names FROM Objects" 

$reader = $dbwrite.ExecuteReader([System.Data.CommandBehavior]::CloseConnection) 
$dbcontent = while ($reader.Read()) { $reader[0] } 

$conn.Close()  

Compare-Object $filecontent $dbcontent 

是否Compare-Object顯示差異?

+0

是的,很多都適用於<=和=(更多到$ filecontent <=) – mrwh1t3

+0

數據庫中不存在具有「<=」側指示符的名稱,所以它們並不令人驚訝你的腳本。 –

+0

所以我真的回去看了看。我錯過了一些,而且我認爲這一直在努力......無論如何,我喜歡你的迴應並給你信用。 – mrwh1t3