我正在尝试将存储在.csv文件中的大量数据上传到远程MSSQL。
我找到了有效的解决方案(至少对于同步模式) here。
我试图通过Powershell作业以异步模式启动part,但失败了。
下面是代码:
Get-ChildItem "G:\Data\*.csv" | % {
Start-job -Name "$($_)" -InitializationScript {Ipmo Functions -Force -DisableNameChecking} `
-ScriptBlock { $DataImport = Import-Csv -Path $args[0]
$DataTable = Out-DataTable -InputObject $DataImport
Write-DataTable -ServerInstance "MSSQL" `
-Database "database" `
-TableName "table" `
-Username "user" `
-Password "pwd" `
-Data $DataTable
} -ArgumentList $_.fullname}我收到错误:
Ipmo :未加载指定的模块“”Functions“”,因为在任何模块目录中都找不到有效的模块文件。“第1行:1 char:1 + Ipmo Functions -Force -DisableNameChecking + ~~ + CategoryInfo : ResourceUnavailable:(Functions:String)导入模块,FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,String
有人能帮帮忙吗?
发布于 2014-02-23 03:15:17
以这种方式使用Start-Job处理这些文件,而不限制您正在创建的作业的数量,可能不会有很好的性能。也就是说,如果有1000个CSV文件,您将创建1000个工作岗位。如果您使用的是PowerShell V3或更高版本,则可以尝试使用工作流来获得更“托管”的并行执行:
workflow Process-CsvFile([string[]]$Files) {
InlineScript { Import-Module Functions -DisableNameCheck }
foreach -parallel($file in $Files) {
InlineScript {
$DataImport = Import-Csv -Path $args[0]
$DataTable = Out-DataTable -InputObject $DataImport
Write-DataTable -ServerInstance "MSSQL" `
-Database "database" `
-TableName "table" `
-Username "user" `
-Password "pwd" `
-Data $DataTable
}
}
}
$files = Get-ChildItem G:\Data\*.csv| Foreach FullName
Process-CsvFile $files关于您关于导入函数的错误的问题。需要将Out-DataTable和Write-DataTable函数复制到名为Functions.psm1的文件中,该文件应该放在以下两个位置之一:$home\Documents\WindowsPowerShell\Modules\Functions\Functions.psm1或$pshome\Modules\Functions\Functions.psm1。我建议把它放在第一个位置,在你的home目录下。将文件放到正确的位置后,打开PowerShell并执行ipmo Functions -DisableNameChecking,以验证您没有收到错误。
如果你不想并行执行,那么你需要修改你使用Start-Job的方式,因为这些作业是并行运行的。创建单个作业以在后台按顺序运行CSV文件,例如:
$files = Get-ChildItem G:\Data\*.csv| Foreach FullName
Start-job -Name ProcessCsvFiles`
-InitializationScript {Ipmo Functions -Force -DisableNameChecking} `
-ScriptBlock {param($files)
foreach ($file in $files) {
$DataImport = Import-Csv -Path $file
$DataTable = Out-DataTable -InputObject $DataImport
Write-DataTable -ServerInstance "MSSQL" `
-Database "database" `
-TableName "table" `
-Username "user" `
-Password "pwd" `
-Data $DataTable
}
} -ArgumentList $fileshttps://stackoverflow.com/questions/21954683
复制相似问题