Помогите вставить результаты запроса БД в файл CSV - PullRequest
0 голосов
/ 21 декабря 2010

У меня есть таблица, которая содержит информацию, указывающую на файлы, хранящиеся на файловом сервере.Я пытаюсь написать скрипт powershell, чтобы убедиться, что каждая запись в таблице имеет физический файл, связанный с ним на сервере, если он не записывает в файл CSV.Мне не очень повезло с CSV, и я надеялся, что вы сможете помочь?

Вот что у меня есть (пожалуйста, дайте мне знать, если есть лучшие способы сделать это, я новичок в powershell).Я хочу добавить записи в CSV-файл только в том случае, если путь проверки не может найти нужный файл.

[Reflection.Assembly]::LoadFile("C:\ora10g\odp.net\bin\2.x\Oracle.DataAccess.dll")
$connectionString = "Data Source=XXXXXX;User Id=XXXX;Password=XXXXXXXX;"
$connection = New-Object Oracle.DataAccess.Client.OracleConnection($connectionString)
$connection.Open()
$queryString = "SELECT Key, Sequence, Type, File FROM FileTable WHERE Type IN (2, 5)"

$command = new-Object Oracle.DataAccess.Client.OracleCommand($queryString, $connection)
$mediaObjRS = $command.ExecuteReader()

# Loop through recordset
while ($mediaObjRS.read()) {

   # Assign variables from recordset.
   $objectKey = $mediaObjRS.GetString(0)
   $objectSeq = $mediaObjRS.GetDecimal(1)
   $objectType = $mediaObjRS.GetDecimal(2)
   $objectFileName = $mediaObjRS.GetString(3)

        # Check if file exists based on filetype.
        if($objectType -eq 2){
            # Type 2 = OLE
            $fileLocation = "\\fileserver\D$\files\" + $objectFileName
        }elseif($objectType -eq 5){ 
             # Type 5 = FILE
             $fileLocation = $objectFileName        
        }
        $fileExists = Test-Path $fileLocation
        if($fileExists -eq $False){
                #Write to output file
                $objectKey | Export-Csv missingfiles.csv
                $objectSeq | Export-Csv missingfiles.csv
                $objectType | Export-Csv missingfiles.csv
                $objectFileName | Export-Csv missingfiles.csv
        }
}

$connection.Close()

1 Ответ

1 голос
/ 21 декабря 2010

Каждый раз, когда вы пишете в missingfiles.cs, вы удаляете предыдущий. Кроме того, этот командлет ориентирован на сохранение объектов, где каждое свойство представляет одно из значений, разделенных запятыми.

Самый простой способ сделать это вручную написать (добавить) в CSV-файл:

if(!$fileExists) {
    #Write to output file
    "`"$objectKey`",`"$objectSeq`",`"$objectType`",`"$objectFileName`" >> foo.csv
}

«Отличный» способ PowerShell - создать объект для каждого файла, а затем поместить их в массив, а когда вы закончите, экспортировать этот массив объекта в файл CSV, например ::1006*.

$files = @() # Initialize array outside loop
...
if (!$fileExists) {
    $obj = new-object -psobject -prop @{
               Key = $objectKey
               Seq = $objectSeq
               Type = $objectType
               FileName = $objectFileName
           }
    $files += obj
}
...
# outside of loop, export array of objects to csv
$files | Export-Csv missingfiles.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...