1

そのため、テキスト ファイルから入力を取得し、入力した別のデータベースに対していくつかの SQL チェックを実行するコードをいくつか作成しました。

$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

しかし、上記のコードからの出力にテストが表示されません。SQL管理スタジオでdbをクエリして手動で検証したことは、不足しているものよりも約5〜6個多くあります。

どんな助けでも大歓迎です。

4

1 に答える 1

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違いを示していますか?

于 2013-06-03T08:58:42.957 に答える