2016-08-23 3 views
0

invoke-sqlcmd를 사용하여 테이블에 행을 삽입 할 때 이상한 오류가 발생했습니다. 한 번 실행하면 전체 스크립트가 제대로 작동하지만 두 번째 실행하면 오류 메시지와 함께 실패합니다. Get-ChildItem : 메서드를 호출 할 수 없습니다. 공급자는 필터 사용을 지원하지 않습니다. 코드를 테스트하고 invoke-sqlcmd 행을 주석 처리했으며 오류없이 여러 번 실행할 수 있습니다. 함수에 invoke-sqlcmd를 두었고 여전히 오류가 발생하고 첫 번째 성공적으로 실행 한 후에도 PS 명령 줄에서 오류가 발생합니다.PowerShell invoke-sqlcmd Get-ChildItem : 메서드를 호출 할 수 없습니다. 공급자가 필터 사용을 지원하지 않습니다.

Clear-Host 
$ErrorActionPreference = 'Stop' 

function Update-SQL 
{ 
    invoke-sqlcmd -query $strSQLInsert -server SXLSV-LEAPDBD1 -database DTCS_DV 
} 

$files = Get-ChildItem '\\pcslog1011\dtcs\ContractEmailNotes\' -Filter '*.txt' | Where-Object {$_.LastWriteTime -ge '08/22/2016 00:00:00' -and $_.LastWriteTime -le '08/22/2016 23:59:59'} | sort-object -Descending 

for ($i=0; $i -lt $files.Count; $i++) 
{ 
    $SNAC_CNTR_ID = $files[$i].BaseName.Substring(0,6) 
    $SNAC_MODIFIED = '{0:yyyy-MM-dd HH:mm:ss}' -f ($files[$i].LastWriteTime) 

    $reader = [System.IO.File]::OpenText($files[$i].FullName) 
    $lineCnt = 0 
    $SNAC_ACTION = '' 
    for() 
    { 
     $lineCnt += 1 
     $line = $reader.ReadLine() 
     if ($line -eq $null) {break} 
     if ($lineCnt -eq 4) 
     { 
      if ($line.Contains('AMENDED') -eq $True) 
      { 
       $SNAC_ACTION = 'AMENDED' 
      } 
      elseif ($line.Contains('DEAL CHANGED') -eq $True) 
      { 
       $SNAC_ACTION = 'CHANGED' 
      } 
      else 
      { 
       $SNAC_ACTION = 'NEW' 
      } 
     } 
    } 
    $reader.Close() 

    write-host $SNAC_CNTR_ID $SNAC_MODIFIED $SNAC_ACTION 

    $strSQLInsert = "INSERT INTO CQT_CONTRACT_SOX_NAC_LIST (SNAC_CNTR_ID, SNAC_MODIFIED, SNAC_ACTION, SNAC_UPDATED_BY, SNAC_UPDATED_ON) VALUES ('" + $SNAC_CNTR_ID + "', '" + $SNAC_MODIFIED + "', '" + $SNAC_ACTION + "', Default, Default)" 

    Update-SQL $strSQLInsert 
} 

exit 
+0

FWIW 여기에'-filter'가 필요하지 않습니다.''\\ pcslog1011 \ dtcs \ ContractEmailNotes \ *. txt'' – wOxxOm

+0

BTW, invoke-sqlcmd를 사용하지 않으면 대신이 코드를 사용하면 여러 번 실행할 수 있으며 오류가 발생하지 않습니다. $ objSQLConn = 새 객체 System.Data.SqlClient.SqlConnection $ objSQLConn.ConnectionString = '데이터 원본 = SXLSV - LEAPDBD1; 초기 카탈로그 = DTCS_DV; 통합 보안 = 진정한' $ objSQLConn.open() $하는 SqlCommand = 새로운 -object에는 System.Data.SqlClient.SqlCommand $ sqlCommand.Connection = $ objSQLConn $ sqlCommand.CommandText = $ strSQLInsert [무효] $ sqlCommand.ExecuteNonQuery I는 -Filter 등을 제거하는 시도() $ objSQLConn.close() –

+0

위에서 제안한 Get-ChildItem은 스크립트 실행을 중단 한 결과를 반환하지 않고 오래 걸렸습니다. -Filter를 사용하면 약 5-10 초 후에 결과를 반환합니다. –

답변

0

이 정보는 도움이되거나 도움이되지 않을 수 있습니다. SQL Agent 작업에서 스크립트를 실행하려고 할 때 동일한 오류가 발생했습니다. 그것은 내 계정에 대한 벌금을 일하는 것이 및 서비스는 에이전트에서 실행중인 계정하지만 난 그게

Microsoft.PowerShell.Core \ 파일 시스템 ::

로 읽는 된 UNC 파일 경로를 접두사 때까지 작업으로 작업을 거부

자동화 솔루션에서 파일 공유는 권장하지 않지만 선택의 여지가 없습니다. 희망이 도움이됩니다.