2010-12-20 3 views
0

파일 서버에 저장된 파일을 가리키는 정보가 들어있는 테이블이 있습니다. CSV 파일에 쓰지 않는 경우 테이블의 각 레코드가 서버에 연결된 실제 파일을 가지고 있는지 확인하기 위해 powershell 스크립트를 작성하려고합니다. 나는 행운을 빌어 요 CSV 부분을 가지고 있지 않으며 당신이 도울 수 있기를 바라고 있었습니까?db 쿼리 결과를 CSV 파일에 삽입하는 데 도움이됩니다.

여기가 내가 지금까지 가지고있는 것입니다 (이 작업을 수행하는 더 좋은 방법이 있다면 알려 주시기 바랍니다. Im 브랜드는 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

missingfiles.cs에 쓸 때마다 이전 파일이 사라집니다. 이 cmdlet은 각 속성이 쉼표로 구분 된 값 중 하나를 나타내는 개체 저장을위한 것입니다. 그것은 각 파일에 대한 객체를 생성 한 후 넣어하는 것입니다 할

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

은 "매끄러운"PowerShell을 방법 :

이 작업을 수행하는 가장 간단한 방법은 수동으로 csv 파일에 (추가) 작성하는 것입니다 배열에있는 객체를 모두 가져 오면 해당 객체 배열을 CSV 파일로 내 보냅니다. 예 :

$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 
+0

감사합니다. 그것은 꽤 도움이되었습니다. 내가 바꿔야 만했던 것은'$ obj = new-object -psobject -prop @ {'~'$ obj = new-object psobject -prop @ { ' – ProfessionalAmateur

관련 문제