在驻留在TFS中的Powershell脚本文件中,如何读取驻留在TFS中的SQL文件?
我正在TFS存储库中维护我的Powershell脚本文件和SQL文件。我正在尝试从Powershell脚本(也驻留在TFS中)准备SQL文件。我正在生成中调用此powershell脚本。我执行时出错在驻留在TFS中的Powershell脚本文件中,如何读取驻留在TFS中的SQL文件?,sql,powershell,visual-studio-2012,tfs,continuous-deployment,Sql,Powershell,Visual Studio 2012,Tfs,Continuous Deployment,我正在TFS存储库中维护我的Powershell脚本文件和SQL文件。我正在尝试从Powershell脚本(也驻留在TFS中)准备SQL文件。我正在生成中调用此powershell脚本。我执行时出错 $ServerInstance = "ABCServer" $Database = "MyDB" $ConnectionTimeout = 30 $Query = get-content "$/MYPROJECT/Queries/GetProjects.sql" $QueryTimeout = 12
$ServerInstance = "ABCServer"
$Database = "MyDB"
$ConnectionTimeout = 30
$Query = get-content "$/MYPROJECT/Queries/GetProjects.sql"
$QueryTimeout = 120
$conn=new-object System.Data.SqlClient.SQLConnection
$ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $ServerInstance,$Database,$ConnectionTimeout
$conn.ConnectionString=$ConnectionString
$conn.Open()
$cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn)
$cmd.CommandTimeout=$QueryTimeout
$ds=New-Object system.Data.DataSet
$da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
[void]$da.fill($ds)
$ds.Tables[0] | foreach {
write-host 'Name value is : ' + $_.Title
}
$conn.Close()
#$ds.Tables
我的Powershell保存在“$/MYPROJECT/PowershellScripts/QueryDB.ps1”中
我在构建步骤中将此Powershell添加为TFS任务。我得到以下错误
**PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
Exception calling "Open" with "0" argument(s): "Cannot open database "MyDB" requested by the login**
更新: 在构建过程中,它将首先将源(.sql文件)获取到代理计算机。在代理计算机上运行PS脚本时,它与变量
“$env:BUILD\u REPOSITORY\u LOCALPATH/querys/GetProjects.sql”
一起工作
如果需要在其他机器(而不是代理机器)上运行PS脚本,则必须首先将脚本文件复制到该机器,并在脚本中指定实际的文件路径
我可以复制您的问题,请按照以下步骤进行修复:
GetProjects.sql
文件路径
在您的项目结构上,如下所示:(参见屏幕截图示例)
$Query=get content“$env:BUILD\u REPOSITORY\u LOCALPATH/querys/GetProjects.sql”
$ServerInstance = "ABCServer"
$Database = "MyDB"
$ConnectionTimeout = 30
$Query = get-content "$env:BUILD_REPOSITORY_LOCALPATH/Queries/GetProjects.sql"
$QueryTimeout = 120
$conn=new-object System.Data.SqlClient.SQLConnection
$ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $ServerInstance,$Database,$ConnectionTimeout
$conn.ConnectionString=$ConnectionString
$conn.Open()
$cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn)
$cmd.CommandTimeout=$QueryTimeout
$ds=New-Object system.Data.DataSet
$da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
[void]$da.fill($ds)
$ds.Tables[0] | foreach {
write-host 'Name value is : ' + $_.Title
}
$conn.Close()
#$ds.Tables
看起来TFS部件是在不同的帐户下运行的,它缺少对数据库的权限。请检查Sql Server的日志,查看登录尝试是否失败。@Barani您是否已通过上述解决方法解决了问题?有更新吗?谢谢你,安迪。这并没有解决问题。实际上,powershell脚本是针对不同机器的。看起来实际文件是在本地机器中预期的,而不是作为环境变量。对于目标机器中的PS,我们需要提供实际路径。由于文件是在目标机器上执行的,所以我使用了SQL的相对路径并能够实现它。@Barani我更新了答案,实际上在构建过程中,它将首先将源(.SQL文件)获取到代理机器。在我这方面,它使用变量“$env:BUILD\u REPOSITORY\u LOCALPATH/querys/GetProjects.sql”集工作得很好。如果您的意思是需要在其他机器(而不是代理机器)上运行PS脚本,那么您必须首先将脚本复制到该机器,并在脚本中指定实际路径。