先日、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 以外を使用する機会があまりなく、よく忘れてしまうのでメモとして。