SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server PowerShell で SQL Server 認証を使用して接続

leave a comment

先日、LT をする際にちょっと調べたことのメモを。
SQL Server PowerShell (SQLPS) ですが何もしないと Windows 認証となりますので、SQL Server 認証を使用する方法を。

SQLPS については SQL Server PowerShell を参照して下さい。
SQL Server 認証を使用した接続については、データベース エンジン PowerShell での認証の管理 に記載されています。

以下はサンプルとなります。

Push-Location
Import-Module SQLPS -DisableNameChecking
Pop-Location
$Instance = "localhost"
$vDriveName = "MSSQL"
$cred = Get-Credential
$user = $cred.UserName
$password = $cred.GetNetworkCredential().Password
try{
    if((Get-PSDrive $vDriveName -ErrorAction SilentlyContinue) -ne $null){
        cd c:
        Remove-PSDrive $VDriveName
    }
    # PS ドライブで SQL Server 認証を使用
    New-PSDrive -PSProvider SqlServer -Root "SQLSERVER:SQL$InstanceDEFAULT" -Name $VDriveName -Credential $cred
    dir "$($vDriveName):Databases" | ft
    # Invoke-Sqlcmd で SQL Server 認証を使用
    Invoke-Sqlcmd -ServerInstance $Instance -Username $user -Password $password -Query "SELECT @@version"
    # SMO で SQL Server 認証を使用
    $server = New-Object Microsoft.SqlServer.Management.Smo.Server
    $server.ConnectionContext.ServerInstance = $Instance
    $server.ConnectionContext.LoginSecure = $false
    $server.ConnectionContext.Login = $user
    $server.ConnectionContext.Password = $password
    $server.Databases | ft
}catch{
    Write-Output $Error[0]
}

 

SQLPS で SQL Server に接続する方法の代表的なものとしては、

  • PSDrive での接続
  • Invoke-Sqlcmd を利用した SQL 実行
  • SMO を使用した接続

があるかと思いますがそれぞれのパターンのサンプルとなります。

PSDrive に関しては既定のインスタンスへの接続を対象としているためインスタンス名を "DEFAULT" にしています。

名前付きインスタンスの場合にはこの箇所をインスタンス名に変更してもらうと接続ができるかと。

# PSDrive では、WMI での接続が必要なこともあるので、セキュリティの設定を考慮する必要があります。

Invoke-Sqlcmd / SMO で接続する場合は、SecureString ではなく String で送る必要がありますので入力した資格情報のパスワードを String にして設定しています。

Invoke-Sqlcmd 以外を使用する機会があまりなく、よく忘れてしまうのでメモとして。

Share

Written by Masayuki.Ozawa

7月 15th, 2014 at 9:31 am

Posted in PowerShell,SQL Server

Tagged with ,

Leave a Reply