Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用windows身份验证连接到sql db的Powershell脚本_Sql Server_Database_Powershell_Database Connection - Fatal编程技术网

Sql server 使用windows身份验证连接到sql db的Powershell脚本

Sql server 使用windows身份验证连接到sql db的Powershell脚本,sql-server,database,powershell,database-connection,Sql Server,Database,Powershell,Database Connection,使用windows身份验证连接到SQL server数据库的正确语法是什么。的Technet文章详细介绍了如何使用PowerShell连接到SQL server数据库。它还包括一个可在脚本中使用的示例函数: function Get-DatabaseData { [CmdletBinding()] param ( [string]$connectionString, [string]$query, [switch]$isSQ

使用windows身份验证连接到SQL server数据库的正确语法是什么。

的Technet文章详细介绍了如何使用PowerShell连接到SQL server数据库。它还包括一个可在脚本中使用的示例函数:

    function Get-DatabaseData {
    [CmdletBinding()]
    param (
        [string]$connectionString,
        [string]$query,
        [switch]$isSQLServer
    )
    if ($isSQLServer) {
        Write-Verbose 'in SQL Server mode'
        $connection = New-Object-TypeName System.Data.SqlClient.SqlConnection
    } else {
        Write-Verbose 'in OleDB mode'
        $connection = New-Object-TypeName System.Data.OleDb.OleDbConnection
    }
    $connection.ConnectionString = $connectionString
    $command = $connection.CreateCommand()
    $command.CommandText = $query
    if ($isSQLServer) {
        $adapter = New-Object-TypeName System.Data.SqlClient.SqlDataAdapter $command
    } else {
        $adapter = New-Object-TypeName System.Data.OleDb.OleDbDataAdapter $command
    }
    $dataset = New-Object-TypeName System.Data.DataSet
    $adapter.Fill($dataset)
    $dataset.Tables[0]
}
function Invoke-DatabaseQuery {
    [CmdletBinding()]
    param (
        [string]$connectionString,
        [string]$query,
        [switch]$isSQLServer
    )
    if ($isSQLServer) {
        Write-Verbose 'in SQL Server mode'
        $connection = New-Object-TypeName System.Data.SqlClient.SqlConnection
    } else {
        Write-Verbose 'in OleDB mode'
        $connection = New-Object-TypeName System.Data.OleDb.OleDbConnection
    }
    $connection.ConnectionString = $connectionString
    $command = $connection.CreateCommand()
    $command.CommandText = $query
    $connection.Open()
    $command.ExecuteNonQuery()
    $connection.close()
}

在Technet文章中的上述脚本中,您只需要提供3个参数:连接字符串(您将使用Trusted connection=True以实现集成安全性)、要运行的查询和DB的类型(SQL Server或OleDB)。

此外,您还可以恢复为您自动执行所有这些操作的函数。我们非常成功地使用了它,它使生活变得更加轻松。

一个普通的SQL身份验证连接字符串应该是这样的

ConnectionString 'Server=$server;Database=$databaseName;UID=$DOMAIN\USER;PWD=$password'
上述身份验证与windows身份验证之间唯一的主要区别是通过启用集成安全性

集成安全=真

因此,windows身份验证连接字符串将读取

ConnectionString 'Server=$server;Database=$databaseName;UID=$DOMAIN\USER;PWD=$password;Integrated Security=true;'
注意,如果您的服务器是
localhost
,那么为
UID
指定域是可选的,因此您可以简单地将
UID
指定为
UID=sa

下面是一个完整的代码示例,可以根据您的用例进行调整

function global:SelectAllUsers()
{
    Read-Query -ConnectionString 'Server=localhost;Database=Ulysses;UID=EMEA\XJ193;PWD=somepassword;Integrated Security=true;' `
        -Query "SELECT * FROM Users" `
        -Action {
            echo "I can take an action here"
        }
}

function Read-Query
{
    param (
        [Parameter(Mandatory=$true)]
        [string]$ConnectionString,

        [Parameter(Mandatory=$true)]
        [string]$Query,

        [Parameter(Mandatory=$true)]
        [scriptblock]$Action
    )

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = $ConnectionString
    $SqlConnection.Open()
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = $Query
    $SqlCmd.Connection = $SqlConnection
    $reader = $SqlCmd.ExecuteReader()

    while ($reader.Read())
    {
        $x = $null
        $x = @{}

        for ($i = 0; $i -lt $reader.FieldCount; ++$i)
        {
            $x.add($reader.GetName($i), $reader[$i])
        }

        Invoke-Command -ScriptBlock $action -ArgumentList $x
    }

    $SqlConnection.Close()
}



SelectAllUsers

来自此链接的答案:谢谢,成功了:)