PowerShell Core で SQL Server on Linux を管理するManage SQL Server on Linux with PowerShell Core

この記事では SQL Server PowerShell を紹介します。また、macOS と Linux で PowerShell Core (PS Core) を使用する方法について、例をいくつか紹介します。This article introduces SQL Server PowerShell and walks you through a couple of examples on how to use it with PowerShell Core (PS Core) on macOS & Linux. PowerShell Core は GitHub のオープン ソース プロジェクトになりました。PowerShell Core is now an Open Source project on GitHub.

クロスプラットフォーム エディター オプションCross-platform editor options

下の PowerShell Core の手順はすべて、通常のターミナルで動作します。あるいは、VS Code または Azure Data Studio 内のターミナルから実行できます。All of the steps PowerShell Core below will work in a regular terminal, or you can run them from a terminal within VS Code or Azure Data Studio. VS Code と Azure Data Studio のいずれも macOS と Linux で利用できます。Both VS Code and Azure Data Studio are available on macOS and Linux. Azure Data Studio の詳細は、このクイックスタートを参照してください。For more information on Azure Data Studio, see this quickstart. PowerShell 拡張機能の使用もお勧めします。You may also want to consider using the PowerShell extension for it.

PowerShell Core のインストールInstalling PowerShell Core

サポートされているさまざまな実験用プラットフォームで PowerShell Core をインストールする方法については、次の記事を参照してください。For more information on installing PowerShell Core on various supported and experimental platforms, see the following articles:

SqlServer モジュールをインストールするInstall the SqlServer module

SqlServer モジュールは PowerShell ギャラリーで保守管理されます。The SqlServer module is maintained in the PowerShell Gallery. SQL Server を使用するとき、常に最新版の SqlServer PowerShell モジュールを使用してください。When working with SQL Server, you should always use the most recent version of the SqlServer PowerShell module.

SqlServer モジュールをインストールするには、PowerShell Core セッションを開き、次のコードを実行します。To install the SqlServer module, open a PowerShell Core session and run the following code:

Install-Module -Name SqlServer

PowerShell ギャラリーから SqlServer モジュールをインストールする方法については、このページを参照してください。For more information on how to install the SqlServer module from the PowerShell Gallery, see this page.

SqlServer モジュールを使用するUsing the SqlServer module

まず、PowerShell Core を起動してみましょう。Let's start by launching PowerShell Core. macOS または Linux を使用している場合、コンピューターでターミナル セッションを開き、「pwsh」と入力すると、新しい PowerShell Core セッションが起動します。If you are on macOS or Linux, Open a terminal session on your computer, and type pwsh to launch a new PowerShell Core session. Windows の場合、Win+R を使用し、「pwsh」と入力すると、新しい PowerShell Core セッションが起動します。On Windows, use Win+R, and type pwsh to launch a new PowerShell Core session.

pwsh

SQL Server からは、SqlServer という名前の PowerShell モジュールが提供されます。SQL Server provides a PowerShell module named SqlServer. SqlServer モジュールを使用し、SQL Server コンポーネント (SQL Server プロバイダーとコマンドレット) を PowerShell 環境またはスクリプトにインポートできます。You can use the SqlServer module to import the SQL Server components (SQL Server provider and cmdlets) into a PowerShell environment or script.

現在の PowerShell セッションに SqlServer モジュールをインポートするには、次のコマンドをコピーして PowerShell プロンプトに貼り付けます。Copy and paste the following command at the PowerShell prompt to import the SqlServer module into your current PowerShell session:

Import-Module SqlServer

SqlServer モジュールが正しくインポートされたことを確認するには、PowerShell プロンプトで次のコマンドを入力します。Type the following command at the PowerShell prompt to verify that the SqlServer module was imported correctly:

Get-Module -Name SqlServer

PowerShell には、次の出力のような情報が表示されるはずです。PowerShell should display information similar to the following output:

ModuleType Version    Name          ExportedCommands
---------- -------    ----          ----------------
Script     21.1.18102 SqlServer     {Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupList...

SQL Server に接続し、サーバー情報を取得するConnect to SQL Server and get server information

次の手順では、PowerShell Core を使用して Linux 上の SQL Server インスタンスに接続し、いくつかのサーバー プロパティを表示します。The following steps use PowerShell Core to connect to your SQL Server instance on Linux and display a couple of server properties.

次のコマンドをコピーして PowerShell プロンプトに貼り付けます。Copy and paste the following commands at the PowerShell prompt. これらのコマンドを実行すると、PowerShell では、次のことが行われます。When you run these commands, PowerShell will:

  • インスタンスのホスト名または IP アドレスの入力を求めるダイアログが表示されますDisplay a dialog that prompts you for the hostname or IP address of your instance
  • [PowerShell 資格情報の要求] ダイアログが表示され、資格情報の入力が求められます。Display the PowerShell credential request dialog, which prompts you for the credentials. "SQL ユーザー名" と "SQL パスワード" を使って、Linux 上の SQL Server インスタンスに接続できますYou can use your SQL username and SQL password to connect to your SQL Server instance on Linux
  • Get-SqlInstance コマンドレットを使用して Server に接続し、いくつかのプロパティを表示しますUse the Get-SqlInstance cmdlet to connect to the Server and display a few properties

必要に応じて、$serverInstance 変数をお使いの SQL Server インスタンスの IP アドレスまたはホスト名に置き換えることができます。Optionally, you can just replace the $serverInstance variable with the IP address or the hostname of your SQL Server instance.

# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential

# Connect to the Server and return a few properties
Get-SqlInstance -ServerInstance $serverInstance -Credential $credential
# done

PowerShell には、次の出力のような情報が表示されるはずです。PowerShell should display information similar to the following output:

Instance Name                   Version    ProductLevel UpdateLevel  HostPlatform HostDistribution
-------------                   -------    ------------ -----------  ------------ ----------------
your_server_instance            14.0.3048  RTM          CU13         Linux        Ubuntu

注意

これらの値に対して何も表示されない場合、ターゲット SQL Server インスタンスへの接続に失敗した可能性があります。If nothing is displayed for these values, the connection to the target SQL Server instance most likely failed. 同じ接続情報を使用して SQL Server Management Studio から接続できることを確認してください。Make sure that you can use the same connection information to connect from SQL Server Management Studio. 次に、接続のトラブルシューティングに関する推奨事項を確認します。Then review the connection troubleshooting recommendations.

SQL Server PowerShell プロバイダーの使用Using the SQL Server PowerShell Provider

SQL Server インスタンスに接続するもう 1 つの方法は、SQL Server PowerShell プロバイダーを使用することです。Another option for connecting to your SQL Server instance is to use the SQL Server PowerShell Provider. プロバイダーを使用すると、オブジェクト エクスプローラーのツリー構造の中を移動するように SQL Server インスタンスの中を移動できます (ただし、コマンドラインで)。Using the provider allows you to navigate SQL Server instance similar to as if you were navigating the tree structure in Object Explorer, but at the cmdline. 既定では、このプロバイダーは SQLSERVER:\ という名前の PSDrive として表示されます。これを使用し、ドメイン アカウントでアクセスできる SQL Server インスタンスを接続し、その中を移動できます。By default this provider is presented as a PSDrive named SQLSERVER:\ which you can use to connect & navigate SQL Server instances that your domain account has access to. SQL Server on Linux 用に Active Directory 認証を設定する方法については、「構成手順」を参照してください。See Configuration steps for information on how to setup Active Directory authentication for SQL Server on Linux.

SQL Server PowerShell プロバイダーで SQL 認証を使用することもできます。You can also use SQL authentication with the SQL Server PowerShell Provider. これを行うには、New-PSDrive コマンドレットを使用して新しい PSDrive を作成し、正しい資格情報を指定して接続します。To do this, use the New-PSDrive cmdlet to create a new PSDrive and supply the proper credentials to connect.

下の例では、SQL 認証を使用し、新しい PSDrive を作成する方法を確認できます。In this example below, you will see an example of how to create a new PSDrive using SQL authentication.

# NOTE: We are reusing the values saved in the $credential variable from the above example.

New-PSDrive -Name SQLonDocker -PSProvider SqlServer -Root 'SQLSERVER:\SQL\localhost,10002\Default\' -Credential $credential

Get-PSDrive コマンドレットを実行すると、ドライブが作成されたことを確認できます。You can confirm that the drive was created by running the Get-PSDrive cmdlet.

Get-PSDrive

新しい PSDrive が作成されたら、その中での移動を開始できます。Once you have created your new PSDrive, you can start navigating it.

dir SQLonDocker:\Databases

出力は次のようになります。Here is what the output might look like. この出力は Databases ノードでの SSMS の出力に似ていることに気付くかもしれません。You might notice this output is similar to what SSMS will display at the Databases node. ユーザー データベースが表示されますが、システムデータ ベースは表示されません。It displays the user databases, but not the system databases.

Name                 Status           Size     Space  Recovery Compat. Owner
                                            Available  Model     Level
----                 ------           ---- ---------- -------- ------- -----
AdventureWorks2016   Normal      209.63 MB    1.31 MB Simple       130 sa
AdventureWorksDW2012 Normal      167.00 MB   32.47 MB Simple       110 sa
AdventureWorksDW2014 Normal      188.00 MB   78.10 MB Simple       120 sa
AdventureWorksDW2016 Normal      172.00 MB   74.76 MB Simple       130 sa
AdventureWorksDW2017 Normal      208.00 MB   40.57 MB Simple       140 sa

インスタンス上のすべてのデータベースを表示する必要がある場合、Get-SqlDatabase コマンドレットを使用する方法があります。If you need to see all databases on your instance, one option is to use the Get-SqlDatabase cmdlet.

データベースを取得するGet Databases

知っておくべき重要なコマンドレットに Get-SqlDatabase があります。An important cmdlet to know is the Get-SqlDatabase. データベースが関係するさまざまな操作に対して、あるいはデータベース内のオブジェクトに対して Get-SqlDatabase コマンドレットを使用できます。For many operations that involve a database, or objects within a database, the Get-SqlDatabase cmdlet can be used. -ServerInstance パラメーターと -Database パラメーターの両方に値を提供する場合、その 1 つのデータベース オブジェクトだけが取得されます。If you supply values for both the -ServerInstance and -Database parameters, only that one database object will be retrieved. ただし、-ServerInstance パラメーターのみを指定した場合、そのインスタンス上のすべてのデータベースの完全な一覧が返されます。However, if you specify only the -ServerInstance parameter, a full list of all databases on that instance will be returned.

# NOTE: We are reusing the values saved in the $credential variable from the above example.

# Connect to the Instance and retrieve all databases
Get-SqlDatabase -ServerInstance ServerB -Credential $credential

上の Get-SqlDatabase コマンドからは次のようなものが返されます。Here is a sample of what might be returned by the Get-SqlDatabase command above:

Name                 Status           Size     Space  Recovery Compat. Owner
                                            Available  Model     Level
----                 ------           ---- ---------- -------- ------- -----
AdventureWorks2016   Normal      209.63 MB    1.31 MB Simple       130 sa
AdventureWorksDW2012 Normal      167.00 MB   32.47 MB Simple       110 sa
AdventureWorksDW2014 Normal      188.00 MB   78.10 MB Simple       120 sa
AdventureWorksDW2016 Normal      172.00 MB   74.88 MB Simple       130 sa
AdventureWorksDW2017 Normal      208.00 MB   40.63 MB Simple       140 sa
master               Normal        6.00 MB  600.00 KB Simple       140 sa
model                Normal       16.00 MB    5.70 MB Full         140 sa
msdb                 Normal       15.50 MB    1.14 MB Simple       140 sa
tempdb               Normal       16.00 MB    5.49 MB Simple       140 sa

SQL Server エラー ログを調べるExamine SQL Server error logs

次の手順では、PowerShell Core を使用し、Linux 上の SQL Server インスタンスで接続されているエラー ログを調べます。The following steps use PowerShell Core to examine error logs connect on your SQL Server instance on Linux.

次のコマンドをコピーして PowerShell プロンプトに貼り付けます。Copy and paste the following commands at the PowerShell prompt. 実行に数分かかる場合があります。They might take a few minutes to run. これらのコマンドで次の手順が実行されます。These commands do the following steps:

  • インスタンスのホスト名または IP アドレスの入力を求めるダイアログが表示されますDisplay a dialog that prompts you for the hostname or IP address of your instance
  • [PowerShell 資格情報の要求] ダイアログが表示され、資格情報の入力が求められます。Display the PowerShell credential request dialog that prompts you for the credentials. "SQL ユーザー名" と "SQL パスワード" を使って、Linux 上の SQL Server インスタンスに接続できますYou can use your SQL username and SQL password to connect to your SQL Server instance on Linux
  • Get-SqlErrorLog コマンドレットを使用して Linux 上の SQL Server インスタンスに接続し、昨日以降のエラー ログを取得しますUse the Get-SqlErrorLog cmdlet to connect to the SQL Server instance on Linux and retrieve error logs since Yesterday

必要に応じて、$serverInstance 変数をお使いの SQL Server インスタンスの IP アドレスまたはホスト名に置き換えることができます。Optionally, you can replace the $serverInstance variable with the IP address or the hostname of your SQL Server instance.

# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential

# Retrieve error logs since yesterday
Get-SqlErrorLog -ServerInstance $serverInstance -Credential $credential -Since Yesterday
# done

PS Core で現在利用できるコマンドレットを試すExplore cmdlets currently available in PS Core

SqlServer モジュールには現在、Windows PowerShell で利用できるコマンドレットが 109 個用意されていますが、109 個のうちの 62 個だけが PSCore で利用できます。While the SqlServer module currently has 109 cmdlets available in Windows PowerShell, only 62 of the 109 are available in PSCore. 現在利用できる 62 個のコマンドレットの完全なリストは、以下に含まれています。A full list of 62 cmdlets currently available is included below. SqlServer モジュールの全コマンドレットを詳しく記録したものが必要な場合、SqlServer コマンドレット リファレンスを参照してください。For in-depth documentation of all cmdlets in the SqlServer module, see the SqlServer cmdlet reference.

次のコマンドでは、お使いのバージョンの PowerShell で利用できるすべてのコマンドレットが表示されます。The following command will show you all of the cmdlets available on the version of PowerShell you are using.

Get-Command -Module SqlServer -CommandType Cmdlet |
Sort-Object -Property Noun |
SELECT Name
  • ConvertFrom-EncodedSqlNameConvertFrom-EncodedSqlName
  • ConvertTo-EncodedSqlNameConvertTo-EncodedSqlName
  • Get-SqlAgentGet-SqlAgent
  • Get-SqlAgentJobGet-SqlAgentJob
  • Get-SqlAgentJobHistoryGet-SqlAgentJobHistory
  • Get-SqlAgentJobScheduleGet-SqlAgentJobSchedule
  • Get-SqlAgentJobStepGet-SqlAgentJobStep
  • Get-SqlAgentScheduleGet-SqlAgentSchedule
  • Invoke-SqlAssessmentInvoke-SqlAssessment
  • Get-SqlAssessmentItemGet-SqlAssessmentItem
  • Remove-SqlAvailabilityDatabaseRemove-SqlAvailabilityDatabase
  • Resume-SqlAvailabilityDatabaseResume-SqlAvailabilityDatabase
  • Add-SqlAvailabilityDatabaseAdd-SqlAvailabilityDatabase
  • Suspend-SqlAvailabilityDatabaseSuspend-SqlAvailabilityDatabase
  • New-SqlAvailabilityGroupNew-SqlAvailabilityGroup
  • Set-SqlAvailabilityGroupSet-SqlAvailabilityGroup
  • Remove-SqlAvailabilityGroupRemove-SqlAvailabilityGroup
  • Switch-SqlAvailabilityGroupSwitch-SqlAvailabilityGroup
  • Join-SqlAvailabilityGroupJoin-SqlAvailabilityGroup
  • Revoke-SqlAvailabilityGroupCreateAnyDatabaseRevoke-SqlAvailabilityGroupCreateAnyDatabase
  • Grant-SqlAvailabilityGroupCreateAnyDatabaseGrant-SqlAvailabilityGroupCreateAnyDatabase
  • New-SqlAvailabilityGroupListenerNew-SqlAvailabilityGroupListener
  • Set-SqlAvailabilityGroupListenerSet-SqlAvailabilityGroupListener
  • Add-SqlAvailabilityGroupListenerStaticIpAdd-SqlAvailabilityGroupListenerStaticIp
  • Set-SqlAvailabilityReplicaSet-SqlAvailabilityReplica
  • Remove-SqlAvailabilityReplicaRemove-SqlAvailabilityReplica
  • New-SqlAvailabilityReplicaNew-SqlAvailabilityReplica
  • Set-SqlAvailabilityReplicaRoleToSecondarySet-SqlAvailabilityReplicaRoleToSecondary
  • New-SqlBackupEncryptionOptionNew-SqlBackupEncryptionOption
  • Get-SqlBackupHistoryGet-SqlBackupHistory
  • Invoke-SqlcmdInvoke-Sqlcmd
  • New-SqlCngColumnMasterKeySettingsNew-SqlCngColumnMasterKeySettings
  • Remove-SqlColumnEncryptionKeyRemove-SqlColumnEncryptionKey
  • Get-SqlColumnEncryptionKeyGet-SqlColumnEncryptionKey
  • Remove-SqlColumnEncryptionKeyValueRemove-SqlColumnEncryptionKeyValue
  • Add-SqlColumnEncryptionKeyValueAdd-SqlColumnEncryptionKeyValue
  • Get-SqlColumnMasterKeyGet-SqlColumnMasterKey
  • Remove-SqlColumnMasterKeyRemove-SqlColumnMasterKey
  • New-SqlColumnMasterKeyNew-SqlColumnMasterKey
  • Get-SqlCredentialGet-SqlCredential
  • Set-SqlCredentialSet-SqlCredential
  • New-SqlCredentialNew-SqlCredential
  • Remove-SqlCredentialRemove-SqlCredential
  • New-SqlCspColumnMasterKeySettingsNew-SqlCspColumnMasterKeySettings
  • Get-SqlDatabaseGet-SqlDatabase
  • Restore-SqlDatabaseRestore-SqlDatabase
  • Backup-SqlDatabaseBackup-SqlDatabase
  • Set-SqlErrorLogSet-SqlErrorLog
  • Get-SqlErrorLogGet-SqlErrorLog
  • New-SqlHADREndpointNew-SqlHADREndpoint
  • Set-SqlHADREndpointSet-SqlHADREndpoint
  • Get-SqlInstanceGet-SqlInstance
  • Add-SqlLoginAdd-SqlLogin
  • Remove-SqlLoginRemove-SqlLogin
  • Get-SqlLoginGet-SqlLogin
  • Set-SqlSmartAdminSet-SqlSmartAdmin
  • Get-SqlSmartAdminGet-SqlSmartAdmin
  • Read-SqlTableDataRead-SqlTableData
  • Write-SqlTableDataWrite-SqlTableData
  • Read-SqlViewDataRead-SqlViewData
  • Read-SqlXEventRead-SqlXEvent
  • Convert-UrnToPathConvert-UrnToPath

関連項目See also