设置PowerShell Invoke-Sqlcmd

时间:2015-06-24 09:32:47

标签: sql function powershell

我有下面的函数叫做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

所以它已经从我的函数知道我的连接字符串是什么。 非常感谢任何帮助。

谢谢, 约翰

1 个答案:

答案 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变量并将其传递给函数。对我来说很好。