SE の雑記

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

PowerShell Core 6.0 に一部対応した SqlServer モジュールの提供が開始されました

leave a comment

クロスプラットフォームに対応した PowerShell である、PowerShell Core 6.0 に一部対応した SQL Server 用のモジュール (SqlServer) の提供が開始されました。

SQL Server 向けの PowerShell については、SSMS 17.0 以降は、PowerShell ギャラリーからインストールを行う方法に代わっています。
SQL Server PowerShell モジュールのインストール
最新版の SQL Server PowerShell モジュールである version 21.0.17240 から、PowerShell 6 Support が含まれるようになりました。

最新バージョンのアップデートが以下になります。

Updates:
* Added Get-SqlBackupHistory cmdlet
* Ported PS Provider to .NET Core for PowerShell 6 support
* Ported a subset of cmdlets to .NET Core for PowerShell 6 support
* Powershell 6 support on macOS and Linux in Preview.
* To use SqlServer provider on macOS and Linux mount it using a new PSDrive.
  Examples in documentation.
* Removed restriction of 64-bit OS for this module. Note: Invoke-Sqlcmd
  cmdlet is the only cmdlet not supported on 32-bit OS.

この対応により、macOS / Linux で PowerShell を実行する際に、SQL Server 用のモジュールが使用できるようになります。
SQL Server モジュールで使用可能なコマンドレットについては SqlServer で公開されているのですが、この、すべてのコマンドレットが、使用可能になっているかというと、現状はそこまでは達しておらず、サブセットとして、一部のコマンドレットが利用可能となっています。
21.0.17240 で使用可能なコマンドレットは次の 60 個程度となっています。

Decode-SqlName New-SqlBackupEncryptionOption
Encode-SqlName New-SqlCertificateStoreColumnMasterKeySettings
SQLSERVER: New-SqlCngColumnMasterKeySettings
Add-SqlAvailabilityDatabase New-SqlColumnMasterKey
Add-SqlAvailabilityGroupListenerStaticIp New-SqlColumnMasterKeySettings
Add-SqlColumnEncryptionKeyValue New-SqlCredential
Add-SqlLogin New-SqlCspColumnMasterKeySettings
Backup-SqlDatabase New-SqlHADREndpoint
ConvertFrom-EncodedSqlName Read-SqlTableData
ConvertTo-EncodedSqlName Read-SqlViewData
Convert-UrnToPath Remove-SqlAvailabilityDatabase
Get-SqlAgent Remove-SqlAvailabilityGroup
Get-SqlAgentJob Remove-SqlAvailabilityReplica
Get-SqlAgentJobHistory Remove-SqlColumnEncryptionKey
Get-SqlAgentJobSchedule Remove-SqlColumnEncryptionKeyValue
Get-SqlAgentJobStep Remove-SqlColumnMasterKey
Get-SqlAgentSchedule Remove-SqlCredential
Get-SqlBackupHistory Remove-SqlLogin
Get-SqlColumnEncryptionKey Resume-SqlAvailabilityDatabase
Get-SqlColumnMasterKey Revoke-SqlAvailabilityGroupCreateAnyDatabase
Get-SqlCredential Set-SqlAvailabilityGroup
Get-SqlDatabase Set-SqlAvailabilityGroupListener
Get-SqlErrorLog Set-SqlAvailabilityReplica
Get-SqlLogin Set-SqlAvailabilityReplicaRoleToSecondary
Get-SqlSmartAdmin Set-SqlCredential
Grant-SqlAvailabilityGroupCreateAnyDatabase Set-SqlErrorLog
Join-SqlAvailabilityGroup Set-SqlHADREndpoint
New-SqlAvailabilityGroup Set-SqlSmartAdmin
New-SqlAvailabilityGroupListener Suspend-SqlAvailabilityDatabase
New-SqlAvailabilityReplica Switch-SqlAvailabilityGroup
New-SqlAzureKeyVaultColumnMasterKeySettings Write-SqlTableData

 
利用可能なコマンドレットには、「Invoke-SqlCmd」が含まれていないのが残念ですね。


で教えていただき、調べてみたのですが、Windows の場合は「C:\Program Files\PowerShell\Modules」、Linux の場合は「/usr/local/share/powershell/Modules」あたりに、SQL Server モジュールがインストールされており、その中の「SqlServer.psm1」に、次のような記載があります。

if (($PSVersionTable.Keys -contains "PSEdition") -and ($PSVersionTable.PSEdition -ne 'Desktop')) {
    # .Net Core DLLs are under the 'coreclr' folder
    $binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'coreclr'
}

PowerShell Core の場合、「C:\Program Files\PowerShell\Modules\SqlServer\21.0.17240\coreclr」のモジュールがロードされることになりますが、現状は次の DLL のみが含まれている形になります。
image
サブセットなので、Full 版と比較して DLL の数が少ないですね。
Invoke-SqlCmd については「Microsoft.SqlServer.Management.PSSnapins.dll」の「GetScriptCommand」の実装に含まれているかと思いますが、CoreCLR 版の PSSnapins.dll には、GetScriptCommand の実装が含まれていないようで、同名の DLL は含まれていても、使用可能なコマンドレットに差が出ているようです。
Core 版でも PSDrive として、SQL Server を使用することもできるようになっており、使用方法については、コメントで解説されていました。
Linux 版でも動いてちょっと面白いですね。

$cred = Get-Credential
New-PSDrive "SQL" -PSProvider SqlServer -Root "SQLSERVER:\SQL\machine\instance" -Credential $cred -Scope Private
cd SQL:
After this you can use the provider as usual.

 
PowerShell Core 版の SQL Server モジュールもコマンドレットが追加され、今、Windows で実行していることと同等のことができるようになると、Windows -> Linux になった際の運用スクリプトの共通化が、PowerShell で対応できるようになりますので、Windows エンジニアのスキルが活かせてよいなと。

Share

Written by Masayuki.Ozawa

4月 15th, 2018 at 10:14 pm

Posted in SQL Server

Tagged with ,

Leave a Reply