我是PowerShell的新手,仍然是SQL Server的早期版本,但我正在尝试为SQL代理作业编写PowerShell步骤,该作业查看包含.sql文件名称的CSV文件。
然后它应该查看另一个目录,如果CSV文件中的名称存在于该目录中,它应该打开.sql文件并执行里面的函数。
我收到了一个错误:
无法将类型为System.String的对象强制转换为类型System.Type
非常感谢任何帮助。
SELECT IF(fc.counter > 0, fc.counter, 0) counter, b.*, fc.* FROM client_branche cb INNER JOIN branche b On b.id = cb.branche_id LEFT OUTER JOIN (
SELECT count(*) as counter, ctn_b.branche_id as b_id
FROM `historique` h
INNER JOIN contenu_branche ctn_b ON ctn_b.contenu_id = h.contenu_id
INNER JOIN utilisateur u ON u.id = h.utilisateur_id
WHERE h.h_fini = 1 AND ( u.client_id = 1 OR u.client_id = 0 ) AND h.h_dateheure BETWEEN '2015-12-24' AND '2015-12-30'
group by ctn_b.`branche_id`)
fc ON fc.b_id = cb.branche_id WHERE cb.client_id = 1
答案 0 :(得分:1)
如果正确理解了问题,则需要使用Test-Path
而不是::exists
$excelFile = "C:/ExcelTest/Test.csv"
$functionDirectory = "some directory"
Import-Csv $excelFile |
Foreach-Object {
$filename = $functionDirectory + '\' + $_[0]
if (Test-Path $filename) {
invoke-sqlcmd -inputfile $filename -serverinstance "serverinstance" -database "database"
}
}
答案 1 :(得分:0)
我会调整脚本中的一些内容以正确处理CSV,然后使用内置cmdlet来测试给定文件的路径。
[cmdletbinding()]
param()
Import-Module SQLPS -DisableNameChecking
$functionDirectory = "C:\temp\PowerShell_Testing2"
$excelFile = Import-Csv "C:\temp\PowerShell_Testing\SQLFileList.csv"
foreach ($e in $excelFile) {
$fileonly = Split-Path $e.SQLFile -Leaf
$fdFile = $functionDirectory + "\" + $fileonly
if (Test-Path $fdFile) {
Write-Host "Found File $fdFile"
Invoke-Sqlcmd -ServerInstance "MANATARMS\SQL12" -InputFile $fdFile -Database master
}
}
在我的设置中,只有一个文件可以运行:
SELECT TOP 1 name FROM sys.databases
如果您的CSV包含说ServerName,然后是SQLFile,您可以调整脚本以同时提取ServerInstance
值:
[cmdletbinding()]
param()
Import-Module SQLPS -DisableNameChecking
$functionDirectory = "C:\temp\PowerShell_Testing2"
$excelFile = Import-Csv "C:\temp\PowerShell_Testing\SQLFileList.csv"
foreach ($e in $excelFile) {
$fileonly = Split-Path $e.SQLFile -Leaf
$fdFile = $functionDirectory + "\" + $fileonly
if (Test-Path $fdFile) {
Write-Host "Found File $fdFile"
Invoke-Sqlcmd -ServerInstance $e.ServerName -InputFile $fdFile -Database master
}
}