2017-05-25 6 views
0

DB1にExcelファイルをインポートしようとすると、以下の電源シェルコードがあります。SQL Server 2012にファイルをインポートするときにエラーが発生する

$dir = "\\server\folder\" 
     $latest = Get-ChildItem -Path $dir | Where-Object {$_.name -like "*Notes*"} | Sort-Object LastWriteTime -Descending | Select-Object -First 1 
     Write-Output "The latest file is: $latest" 
     Write-SqlTableData -ServerInstance "instance1" -DatabaseName "DB1" -SchemaName dbo -TableName Table1 -InputData $latest -Force 

私はこのコードを実行するとエラーになっアムは、以下を参照してください:私はこのエラーをGoogleで検索していると、任意の助けを得るように見えることはありません

Write-SqlTableData : A mapping between .Net type 'System.IO.DirectoryInfo' and SQL type for column 'Directory' was not found. Consider removing the column with that type and repeat the operation 

。私を助けてくれる人は誰ですか?

答えて

0

エラーはクリアです。あなたは(すべての可能性で、すなわち.xslまたは.xslx、)ファイルに

  • 狭いGet-ChildItem出力する必要があり、代わりに$latestオブジェクトSystem.IO.FileSystemInfoの種類(おそらくの
  • 供給-InputData$latest.Nameとして文字列:それはです私の推測では、SQL関連のコマンドレットはインストールされていません)。
$dir = "\\server\folder\" 
$latest = Get-ChildItem -Path $dir | 
    Where-Object {$_.name -like "*Notes*.xsl*"} | 
    Sort-Object LastWriteTime -Descending | Select-Object -First 1 
Write-Output "The latest file is: $latest" 
Write-SqlTableData -ServerInstance "instance1" -DatabaseName "DB1" -SchemaName dbo -TableName Table1 -InputData $latest.Name -Force 

または、代わりのWhere-Object

-filter

$latest = Get-ChildItem -Path $dir -Filter "*Notes*.xsl*" | 
    Sort-Object LastWriteTime -Descending | Select-Object -First 1 

としてGet-ChildItemコマンドレットの-Filter parameterを使用するには、プロバイダーの形式や言語でフィルターを指定します。 という値は、このパラメーターがPathパラメーターを修飾します。フィルターの構文は、ワイルドカードの使用を含む で、プロバイダーによって異なります。フィルタ は、プロバイダが プロバイダーからオブジェクトを取得した後にWindows PowerShellでオブジェクトをフィルタリングするのではなく、オブジェクトを取得するときに を適用するため、他のパラメータよりも効率的です。

-InputDataパラメータ単一引用符で囲ま$latest.FullName場合がございますのでご了承ください。

Write-SqlTableData -ServerInstance "instance1" … -InputData"'$($latest.FullName)'"-Force

関連する問題