我有下面的函数叫做Invoke-SqlCmd:
function Invoke-Sqlcmd4
{
param(
[string]$ServerInstance = 'server.database.windows.net',
[string]$Database = 'db',
[string]$Uid = 'john',
[string]$Pwd = 'pwd123',
[string]$Query,
[Int32]$QueryTimeout
)
$conn=new-object System.Data.SqlClient.SQLConnection
$conn.ConnectionString="Server={0};Database={1};Integrated Security=False;User ID=john;Password=pwd123" -f $ServerInstance,$Database,$Uid,$Pwd
$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)
$conn.Close()
$ds.Tables[0]
}
可以通过以下行调用:
Invoke-Sqlcmd4 -ServerInstance server.database.windows.net -Database db -Uid john -Pwd pwd123 -Query $query -QueryTimeout 60
但是,每次使用此功能时,我都不想输入连接字符串的详细信息。即函数中的参数已在函数中设置,因此我不想每次都重新输入它们。
我基本上希望能够像这样使用一行代码:
Invoke-Sqlcmd4 -Query $query -QueryTimeout 60
所以它已经从我的函数知道我的连接字符串是什么。 非常感谢任何帮助。
谢谢, 约翰
答案 0 :(得分:0)
function Invoke-Sqlcmd4
{
param(
[string]$ServerInstance = 'mysqlserver\mysqlinstance',
[string]$Database = 'master',
[string]$Uid = 'john',
[string]$Pwd = 'pwd123',
[string]$Query,
[Int32]$QueryTimeout
)
$conn=new-object System.Data.SqlClient.SQLConnection
$conn.ConnectionString="Server={0};Database={1};Integrated Security=False;User ID=john;Password=pwd123" -f $ServerInstance,$Database,$Uid,$Pwd
$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)
$conn.Close()
$ds.Tables[0]
}
$myquery1='Select name from sys.databases'
Invoke-Sqlcmd4 -Query $myquery1 -QueryTimeout 60
现在我已经关闭了你的安全性,只是在我的情况下使用了集成但是它有效,你可以轻松地将其切换回来。我不确定你在查询中传递的位置,但这应该会给你一个想法。您可以在函数外部创建任何$ query变量并将其传递给函数。对我来说很好。