Invoke-Sqlcmd

SQL Server SQLCMD ユーティリティでサポートされているステートメントを含むスクリプトを実行します。

構文

Invoke-Sqlcmd
      [-ServerInstance <PSObject>]
      [-Database <String>]
      [-Encrypt <String>]
      [-EncryptConnection]
      [-Username <String>]
      [-AccessToken <String>]
      [-Password <String>]
      [-Credential <PSCredential>]
      [[-Query] <String>]
      [-QueryTimeout <Int32>]
      [-ConnectionTimeout <Int32>]
      [-ErrorLevel <Int32>]
      [-SeverityLevel <Int32>]
      [-MaxCharLength <Int32>]
      [-MaxBinaryLength <Int32>]
      [-AbortOnError]
      [-DedicatedAdministratorConnection]
      [-DisableVariables]
      [-DisableCommands]
      [-HostName <String>]
      [-ApplicationName <String>]
      [-ApplicationIntent <ApplicationIntent>]
      [-MultiSubnetFailover]
      [-FailoverPartner <String>]
      [-HostNameInCertificate <String>]
      [-TrustServerCertificate]
      [-NewPassword <String>]
      [-Variable <PSObject>]
      [-InputFile <String>]
      [-OutputSqlErrors <Boolean>]
      [-IncludeSqlUserErrors]
      [-SuppressProviderContextWarning]
      [-IgnoreProviderContext]
      [-OutputAs <OutputType>]
      [-StatisticsVariable <String>]
      [-ProgressAction <ActionPreference>]
      [<CommonParameters>]
Invoke-Sqlcmd
      [-AccessToken <String>]
      [[-Query] <String>]
      [-QueryTimeout <Int32>]
      [-ErrorLevel <Int32>]
      [-SeverityLevel <Int32>]
      [-MaxCharLength <Int32>]
      [-MaxBinaryLength <Int32>]
      [-AbortOnError]
      [-DisableVariables]
      [-DisableCommands]
      [-Variable <PSObject>]
      [-InputFile <String>]
      [-OutputSqlErrors <Boolean>]
      [-IncludeSqlUserErrors]
      [-OutputAs <OutputType>]
      -ConnectionString <String>
      [-KeyVaultAccessToken <String>]
      [-ManagedHsmAccessToken <String>]
      [-StatisticsVariable <String>]
      [-ProgressAction <ActionPreference>]
      [<CommonParameters>]

説明

Invoke-Sqlcmd コマンドレットは、SQL Server SQLCMD ユーティリティでサポートされている言語とコマンドを含むスクリプトを実行します。

サポートされるコマンドは、Transact-SQL ステートメントと、データベース エンジンでサポートされている XQuery 構文のサブセットです。

このコマンドレットは、GO や QUIT など、SQLCMD でネイティブにサポートされているコマンドの多くも受け入れます。

このコマンドレットは、SQLCMDUSER などの SQLCMD スクリプト変数も受け入れます。 既定では、このコマンドレットは SQLCMD スクリプト変数を設定しません。

このコマンドレットは、主に対話型スクリプト編集に関連するコマンドの使用をサポートしていません。

サポートされていないコマンドには、:!, :connect、:error、:out、:ed、:list、:listvar、:reset、:p erftrace、および :serverlist が含まれます。

このコマンドレットを実行すると、スクリプトから返される最初の結果セットが書式設定されたテーブルとして表示されます。

後続の結果セットに最初の列リストとは異なる列リストが含まれている場合、それらの結果セットは表示されません。

最初のセットの後の後続の結果セットに同じ列リストがある場合、その行は、最初の結果セットによって返された行を含む書式設定されたテーブルに追加されます。

Verbose パラメーターを指定することで、SQL PRINT ステートメントの結果などの SQL Server メッセージ出力を表示できます。

例 1: 名前付きインスタンスに接続し、スクリプトを実行する

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery" -ServerInstance "MyComputer\MainInstance"

TimeOfQuery
-----------
9/21/2017 2:48:24 PM

このコマンドは、コンピューター上の SQL データベース エンジンの名前付きインスタンスに接続し、基本的な Transact-SQL スクリプトを実行します。

例 2: スクリプト ファイルでコマンドを呼び出し、出力をテキスト ファイルに保存する

Invoke-Sqlcmd -InputFile "C:\ScriptFolder\TestSqlCmd.sql" | Out-File -FilePath "C:\ScriptFolder\TestSqlCmd.rpt"
Output sent to TestSqlCmd.rpt.

このコマンドは、Transact-SQL ステートメントと SQLCMD コマンドを含むファイルを読み取り、ファイルを実行して、出力を別のファイルに書き込みます。

出力ファイルには独自の情報が含まれている可能性があるため、適切な NTFS アクセス許可を使用して出力ファイルをセキュリティで保護する必要があります。

例 3: スクリプトを呼び出し、文字列から変数値を渡す

$StringArray = "MYVAR1='String1'", "MYVAR2='String2'"
Invoke-Sqlcmd -Query "SELECT `$(MYVAR1) AS Var1, `$(MYVAR2) AS Var2" -Variable $StringArray

Var1     Var2
----     ----
String1  String2

このコマンドは、Variable パラメーターへの入力として文字列の配列を使用します。

配列は、複数の SQLCMD 変数を定義します。

SQLCMD 変数を識別する SELECT ステートメントの $ 記号は、バックティック (') 文字を使用してエスケープされます。

例 4: スクリプトを呼び出し、SQL データベース エンジンから変数を渡す

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance"
PS SQLSERVER:\SQL\MyComputer\MainInstance> Invoke-Sqlcmd -Query "SELECT SERVERPROPERTY('MachineName') AS ComputerName" -ServerInstance (Get-Item .)

ComputerName
------------
MyComputer

このコマンドでは、Set-Location を使用して、SQL Database エンジンのインスタンスの SQL ServerWindows PowerShell プロバイダー パスに移動します。

次に、Get-Item を呼び出して、Invoke-Sqlcmd の ServerInstance パラメーターとして使用する SQL 管理オブジェクト サーバー オブジェクトを取得します。

例 5: クエリを実行して詳細出力を表示する

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance"
Invoke-SqlCmd -Query "PRINT N'abc'" -Verbose
VERBOSE: abc

このコマンドは、Windows PowerShellVerbose パラメーターを使用して、SQL PRINT コマンドのメッセージ出力を返します。

例 6: 位置指定文字列を入力として使用してコマンドを呼び出す

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance\Databases\MyDatabase"
PS SQLSERVER:\SQL\MyComputer\MainInstance> Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName"
WARNING: Using provider context. Server = MyComputer\MainInstance, Database = MyDatabase.

DatabaseName
------------
MyDatabase

このコマンドでは、位置指定文字列を使用して、Query パラメーターに入力を指定します。

また、Invoke-Sqlcmd が現在のパスを使用してデータベース コンテキストを MyDatabase に設定する方法も示します。

例 7: DataSet オブジェクトにデータをキャプチャする

$DS = Invoke-Sqlcmd -ServerInstance "MyComputer" -Query "SELECT  ID, Item FROM MyDB.dbo.MyTable" -As DataSet
$DS.Tables[0].Rows | %{ echo "{ $($_['ID']), $($_['Item']) }" }

{ 10, AAA }
{ 20, BBB }
{ 30, CCC }

このコマンドでは、As DataSet パラメーターを使用してデータを .Net System.Data.DataSet オブジェクトにキャプチャし、結果を変数 '$DS' に格納します。 オブジェクトは、さらに処理するために使用できます。

例 8: 特定の列セットを取得する

$Tables = Invoke-Sqlcmd -ServerInstance "MyComputer" -Query "SELECT  Item, id FROM MyDatabase.dbo.MyTable; SELECT GETDATE() AS T" -As DataTables
$Tables[0].Rows | %{ echo $_.ID }
$Tables[1].Rows | %{ echo $_.T.DayOfWeek }

10
20
30

Monday

最初のコマンドでは、As DataTables パラメーターを使用して、.Net System.Data.DataTable オブジェクトのコレクションにデータをキャプチャします。 このコマンドは、異なる列セットを持つ 2 つのテーブルを取得します。

各テーブルは、独自のスキーマに基づいて個別に処理できます。

例 9: 接続を完全に制御する

Invoke-Sqlcmd -Query "SELECT COUNT(*) AS Count FROM MyTable" -ConnectionString "Data Source=MYSERVER;Initial Catalog=MyDatabase;Integrated Security=True;ApplicationIntent=ReadOnly"
Count
-----
127432

このコマンドは、-ConnectionString パラメーターを使用して、コマンド ラインで渡されたパラメーターに基づいて接続文字列を構築する Invoke-Sqlcmd ではなく、このコマンドレットが確立する接続を完全に制御します。

これは、使用する可能性のあるあまり一般的でないプロパティに役立ちます。

例 10: ストアド プロシージャを実行し、SQL エラーをキャプチャする

$script_sp_with_errors = @'
CREATE PROCEDURE [dbo].[TestProcedure3]
AS 
BEGIN 
  CREATE TABLE [dbo].[TestTable] (col INT NOT NULL);
  INSERT INTO [dbo].[TestTable] VALUES (NULL); -- will cause an error
END
GO
'@

# Create a test database
Invoke-SqlCmd -ServerInstance MyServer -Query 'CREATE DATABASE TestDB'
# ... adds a stored procedure that has errors in it...
Invoke-SqlCmd -ServerInstance MyServer -Database 'TestDB' -Query $script_sp_with_errors
# ... executes the SP and collected the errors
Invoke-SqlCmd -ServerInstance MyServer -Database 'TestDB' -Query 'EXEC TestProcedure3' -OutputSqlErrors $true

Here's the output:
Invoke-SqlCmd : Cannot insert the value NULL into column 'col', table 'TestDB.dbo.TestTable'; column does not allow nulls. INSERT fails.
The statement has been terminated.
 Msg 515, Level 16, State 2, Procedure TestProcedure3, Line 5.
At line:1 char:1
...

このコマンドは、-OutputSqlErrors パラメーターを使用してエラーをユーザーに報告します。 この場合のエラー メッセージは、SP 名やエラーが発生した行番号などの追加情報を提供します。

例 11: アクセス トークンを使用して Azure SQL Database (またはマネージド インスタンス) に接続する

Import-Module SQLServer
Import-Module Az.Accounts -MinimumVersion 2.2.0

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that Service Principal and has granted it access to the database (in this example at least
#       the SELECT permission).

### Obtain the Access Token: this will bring up the login dialog
Connect-AzAccount
$access_token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token`
              -query 'select * from Table1'

例 12: サービス プリンシパルを使用して Azure SQL Database (またはマネージド インスタンス) に接続する

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that Service Principal and has granted it access to the database (in this example at least
#       the SELECT permission).

$clientid = "enter application id that corresponds to the Service Principal" # Do not confuse with its display name
$tenantid = "enter the tenant ID of the Service Principal"
$secret = "enter the secret associated with the Service Principal"

$request = Invoke-RestMethod -Method POST `
           -Uri "https://login.microsoftonline.com/$tenantid/oauth2/token"`
           -Body @{ resource="https://database.windows.net/"; grant_type="client_credentials"; client_id=$clientid; client_secret=$secret }`
           -ContentType "application/x-www-form-urlencoded"
$access_token = $request.access_token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token`
              -query 'select * from Table1'

例 13: システム割り当てマネージド ID (SAMI) を使用して Azure SQL Database (またはマネージド インスタンス) に接続する

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that VM Identity you are running on and has granted it access to the database (in this 
#       example at least the SELECT permission).

Connect-AzAccount -Identity
$access_token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token `
              -query 'select * from Table1'

例 14: ユーザー割り当てマネージド ID (UAMI) を使用して Azure SQL Database (またはマネージド インスタンス) に接続する

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that VM Identity you are running on and has granted it access to the database (in this 
#       example at least the SELECT permission).

Connect-AzAccount -Identity -AccountId '<your-user-assigned-managed-identity-client-id>'
$access_token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token `
              -query 'select * from Table1'

例 15: -ApplicationIntent を使用して Read-Only ルーティング用に構成された可用性グループに接続する

# In the following example:
# - MT_2009250511 is a listener for an AG configured for Read-Only Routing (port 5555)
# - AGDB_2_1 is the DB in the AG
# - VLM00226138 is the primary replica configured to only allow ReadWrite connections 
# - VLM00226137 is the secondary replica
# 
Invoke-Sqlcmd -ServerInstance "MT_2009250511,5555" -Database AGDB_2_1 `
     -HostName "PowershellBox1" -ApplicationName "ReadWrite" -ApplicationIntent ReadWrite `
     -Query "select HOST_NAME() AS HostName, APP_NAME() AS ApplicationIntent, @@SERVERNAME AS ServerName"

Invoke-Sqlcmd -ServerInstance "MT_2009250511,5555" -Database AGDB_2_1 `
     -HostName "PowershellBox2" -ApplicationName "ReadOnly" -ApplicationIntent ReadOnly `
     -Query "select HOST_NAME() AS HostName, APP_NAME() AS ApplicationIntent, @@SERVERNAME AS ServerName"  

# When you run the 2 cmdlets above, the output is going to be something like this:  
#  
# HostName       ApplicationIntent ServerName  
# --------       ----------------- ----------  
# PowershellBox1 ReadWrite         VLM00226138  
#  
# HostName       ApplicationIntent ServerName  
# --------       ----------------- ----------  
# PowershellBox2 ReadOnly          VLM00226137

これは、-ApplicationIntent パラメーターの値に応じて、接続が AG 内の別のサーバーにルーティングされることを示しています。 なお、-ApplicationName パラメーターと -HostName パラメーターの使用を観察して、2 つの結果を視覚的に区別します。これは、次に示す -ApplicationIntent 例を超えて、接続とその意図をトレースするために使用できる一般的な手法です。

例 16: -StatisticsVariable パラメーターを使用して接続統計をキャプチャする

Import-Module SQLServer
Invoke-Sqlcmd -ServerInstance localhost -StatisticsVariable stats `
              -Query 'CREATE TABLE #Table (ID int); INSERT INTO #Table VALUES(1), (2); INSERT INTO #Table VALUES(3); SELECT * FROM #Table'

Write-Host "Number of rows affected......: $($stats.IduRows)"
Write-Host "Number of insert statements..: $($stats.IduCount)"
Write-Host "Number of select statements..: $($stats.SelectCount)"
Write-Host "Total execution time.........: $($stats.ExecutionTime)ms"

# When you run the code fragment above, is going to be something like this:  
#
# Number of rows affected......: 3
# Number of insert statements..: 2
# Number of select statements..: 1
# Total execution time.........: 5ms

この例では、-StatisticsVariable パラメーターを使用して、一時テーブルを作成し、いくつかの値を挿入し、最後に挿入されたすべての行を取得するための選択を発行する T-SQL の実行時に、接続、実行されたステートメント、および実行時間に関する情報をキャプチャする方法を示します。

注: 同じクエリが複数のサーバーに対して実行される場合 (たとえば、コマンドレットを使用してサーバー名をパイプする)、StatisticsVariable は接続ごとに 1 つずつ、統計の配列をキャプチャします。 結果は、たとえば ($stats.IduRows | Measure-Object -Sum).Sumを使用して集計できます。

使用可能な統計の詳細については、SQL Server の プロバイダー統計を参照してください。

例 17: Always Encrypted を使用して暗号化された列から取得されたデータを復号化するクエリを実行します。 列マスター キーが Azure Key Vault のキー コンテナーに格納されているとします。

# Connect to Azure account.
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount

# Obtain an access token for key vaults. 
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token

# Pass the token to the cmdlet, so that it can use it to authenticate to Azure when decrypting data protected with Always Encrypted.
$connString = 'Data Source=MYSERVER;Initial Catalog=MyDatabase;Integrated Security=True;ApplicationIntent=ReadOnly;Column Encryption Setting=Enabled'
Invoke-Sqlcmd -Query 'SELECT COUNT(*) AS Count FROM MyTable' -ConnectionString $connString -KeyVaultAccessToken $keyVaultAccessToken

パラメーター

-AbortOnError

このコマンドレットでエラーが発生した場合、このコマンドレットは SQL Server コマンドを停止し、Windows PowerShell ERRORLEVEL 変数にエラー レベルを返します。

返されるエラー レベルは、エラーの重大度が 10 より高い場合は 1、エラーの重大度が 10 以下の場合は 0 です。

ErrorLevel パラメーターも指定されている場合、このコマンドレットは、エラー メッセージの重大度も ErrorLevel に指定された値以上の場合にのみ 1 を返します。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-AccessToken

ユーザー/パスワードまたは Windows 認証の代わりに、SQL Server に対する認証に使用されるアクセス トークン。

これは、たとえば、Service Principal または Managed Identity を使用して SQL Azure DBSQL Azure Managed Instance に接続するために使用できます (このページの下部にあるリファレンスを参照してください)。

一般的なシナリオでは、このパラメーターは (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token (Az.Account モジュールが必要) などを使用して取得されます。

このパラメーター 使用する場合は、UserNamePassword、または Credential を指定しないでください。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ApplicationIntent

SQL Server 可用性グループ内のデータベースに接続するときのアプリケーション ワークロードの種類。

使用できる値は、ReadOnly と ReadWrite です。

型:ApplicationIntent
指定可能な値:ReadWrite, ReadOnly
配置:Named
規定値:ReadWrite
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ApplicationName

接続に関連付けられているアプリケーションの名前。

型:String
配置:Named
規定値:.NET SqlClient Data Provider
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ConnectionString

サーバーに接続する接続文字列を指定します。

型:String
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ConnectionTimeout

データベース エンジンのインスタンスに正常に接続できない場合に、このコマンドレットがタイムアウトしたときの秒数を指定します。 タイムアウト値は、0 ~ 65534 の整数値である必要があります。 0 を指定した場合、接続試行はタイムアウトになりません。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Credential

ユーザー名フィールドとパスワード フィールドが SQL インスタンスへの接続に使用される PSCredential オブジェクト。

型:PSCredential
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Database

データベースの名前を指定します。 このコマンドレットは、ServerInstance パラメーターで指定されたインスタンス内のこのデータベースに接続します。

Database パラメーターが指定されていない場合、使用されるデータベースは、現在のパスで SQLSERVER:\SQL フォルダーとデータベース名の両方を指定するかどうかによって異なります。 パスに SQL フォルダーとデータベース名の両方が指定されている場合、このコマンドレットはパスで指定されたデータベースに接続します。 パスが SQL フォルダーに基づいていない場合、またはパスにデータベース名が含まれていない場合、このコマンドレットは現在のログイン ID の既定のデータベースに接続します。 IgnoreProviderContext パラメーター スイッチを指定した場合、このコマンドレットは現在のパスで指定されたデータベースを考慮せず、現在のログイン ID の既定値として定義されているデータベースに接続します。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-DedicatedAdministratorConnection

このコマンドレットが専用管理者接続 (DAC) を使用してデータベース エンジンのインスタンスに接続することを示します。

DAC は、システム管理者が、新しい標準接続を受け入れられないインスタンスのトラブルシューティングなどのアクションに使用します。

DAC をサポートするようにインスタンスを構成する必要があります。

DAC が有効になっていない場合、このコマンドレットはエラーを報告し、実行されません。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-DisableCommands

バッチ ファイルで実行するとセキュリティが損なわれる可能性がある sqlcmd 機能の一部を、このコマンドレットでオフにすることを示します。

これにより、Windows PowerShell 変数が Invoke-Sqlcmd スクリプトに渡されなくなります。

SQLCMDINI スクリプト変数で指定されたスタートアップ スクリプトが実行されません。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-DisableVariables

このコマンドレットが sqlcmd スクリプト変数を無視することを示します。 これは、$(variable_name など、変数と同じ形式の文字列を含む可能性のある多数の INSERT ステートメントがスクリプトに含まれている場合に便利です。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Encrypt

SQL Server に接続するときに使用する暗号化の種類。

この値は、Microsoft.Data.SqlClient ドライバーの SqlConnection オブジェクトの Encrypt プロパティ SqlConnectionEncryptOption にマップされます。

指定しない場合、既定値は Mandatoryです。

このパラメーターは、モジュールの v22 の新機能です。 詳細については、「関連リンクの を参照してください。

型:String
指定可能な値:Mandatory, Optional, Strict
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-EncryptConnection

このコマンドレットが、ServerInstance パラメーターで指定されたデータベース エンジンのインスタンスへの接続に Secure Sockets Layer (SSL/TLS) 暗号化を使用することを示します。

モジュールの v22 以降では、このパラメーターは非推奨です。 接続は既定で暗号化されます。 代わりに、新しい -Encrypt パラメーターを使用することを検討してください。 詳細については、「関連リンクの を参照してください。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ErrorLevel

このコマンドレットは、重大度レベルが指定された値以上のエラー メッセージのみを表示するように指定します。 このパラメーターが指定されていないか、0 に設定されていない場合、すべてのエラー メッセージが表示されます。 データベース エンジンのエラー重大度の範囲は 1 から 24 です。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-FailoverPartner

プライマリ サーバーがダウンしている場合に接続するパートナー サーバーの名前またはアドレス。

型:String
配置:Named
規定値:""
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-HostName

ワークステーション名を指定します。 ワークステーション名は、sp_who システム ストアド プロシージャと sys.processes カタログ ビューのホスト名列で報告されます。 このパラメーターを指定しない場合、既定値は、Invoke-Sqlcmd が実行されるコンピューターの名前です。 このパラメーターを使用して、さまざまな Invoke-Sqlcmd セッションを識別できます。

型:String
Aliases:WorkstationID
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-HostNameInCertificate

SQL Server TLS/SSL 証明書の検証に使用するホスト名。 SQL Server インスタンスで Force Encryption が有効になっていて、ホスト名/短縮名を使用してインスタンスに接続する場合は、このパラメーターを渡す必要があります。 このパラメーターを省略した場合、強制暗号化が有効になっている SQL Server インスタンスに接続するには、完全修飾ドメイン名 (FQDN) を -ServerInstance に渡す必要があります。

このパラメーターは、モジュールの v22 の新機能です。 詳細については、「関連リンクの を参照してください。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-IgnoreProviderContext

このコマンドレットは、現在の SQLSERVER:\SQL パスによって確立されたデータベース コンテキストを無視することを示します。 Database パラメーターが指定されていない場合、このコマンドレットは現在のログイン ID または Windows アカウントに既定のデータベースを使用します。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-IncludeSqlUserErrors

このコマンドレットは、既定では無視される SQL ユーザー スクリプト エラーを返します。 このパラメーターを指定すると、このコマンドレットは sqlcmd ユーティリティの既定の動作と一致します。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-InputFile

このコマンドレットへのクエリ入力として使用するファイルを指定します。 このファイルには、Transact-SQL ステートメント、XQuery ステートメント、sqlcmd コマンド、スクリプト変数を含めることができます。 ファイルへの完全なパスを指定します。 ファイルは UTF-8 を使用してエンコードされる必要があります。

信頼できるソースからのみスクリプトを実行する必要があります。 すべての入力スクリプトが適切な NTFS アクセス許可で保護されていることを確認します。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-KeyVaultAccessToken

Azure Key Vault 内のキー コンテナーのアクセス トークンを指定します。 クエリ対象の列が、Azure Key Vault のキー コンテナーに格納されている列マスター キーを使用して Always Encrypted で保護されている場合は、このパラメーターを使用します。 または、このコマンドレットを呼び出す前に、Add-SqlAzureAuthenticationContext を使用して Azure に対する認証を行うことができます。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ManagedHsmAccessToken

Azure Key Vault 内のマネージド HSM のアクセス トークンを指定します。 クエリ対象の列が、Azure Key Vault のマネージド HSM に格納されている列マスター キーを使用して Always Encrypted で保護されている場合は、このパラメーターを使用します。 または、このコマンドレットを呼び出す前に、Add-SqlAzureAuthenticationContext を使用して Azure に対する認証を行うことができます。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-MaxBinaryLength

バイナリや varbinary などのバイナリ文字列データ型の列に対して返される最大バイト数を指定します。 既定値は 1,024 バイトです。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-MaxCharLength

char、nchar、varchar、nvarchar など、文字型または Unicode データ型の列に返される最大文字数を指定します。 既定値は 4,000 文字です。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-MultiSubnetFailover

アプリケーションが異なるサブネット上の AlwaysOn 可用性グループ (AG) に接続している場合、このパラメーターを渡すと、(現在) アクティブなサーバーの検出と接続が高速化されます。

注: .NET Framework 4.6.1 以降のバージョンでは、-MultiSubnetFailover を渡す必要はありません。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-NewPassword

SQL Server 認証ログイン ID の新しいパスワードを指定します。 このコマンドレットはパスワードを変更してから終了します。 ログインの現在のパスワードを指定するパスワードを使用して、Username パラメーターと Password パラメーターも指定する必要があります。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-OutputAs

このコマンドレットが取得する結果の種類を指定します。

このパラメーターの値を指定しない場合、コマンドレットは値を DataRows に設定します。

型:OutputType
Aliases:As
指定可能な値:DataSet, DataTables, DataRows
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-OutputSqlErrors

このコマンドレットが Invoke-Sqlcmd 出力にエラー メッセージを表示することを示します。

型:Boolean
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Password

Username パラメーターで指定された SQL Server 認証ログイン ID のパスワードを指定します。 パスワードでは大文字と小文字が区別されます。 可能であれば、Windows 認証を使用します。 可能な場合は、空のパスワードを使用しないでください。強力なパスワードを使用してください。

パスワード パラメーターの後にパスワードを指定すると、モニターを表示できるすべてのユーザーにパスワードが表示されます。

.ps1 スクリプトでパスワードの後にパスワードをコーディングすると、スクリプト ファイルを読んでいるすべてのユーザーにパスワードが表示されます。

ファイルに適切な NTFS アクセス許可を割り当てて、他のユーザーがファイルを読み取れないようにします。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ProgressAction

スクリプト、コマンドレット、またはプロバイダーによって生成された進行状況の更新 (Write-Progress コマンドレットによって生成された進行状況バーなど) に対する PowerShell の応答方法を決定します。 Write-Progress コマンドレットは、コマンドの状態を示す進行状況バーを作成します。

型:ActionPreference
Aliases:proga
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Query

このコマンドレットが実行する 1 つ以上のクエリを指定します。 クエリには、Transact-SQL または XQuery ステートメント、または sqlcmd コマンドを指定できます。 セミコロンで区切られた複数のクエリを指定できます。 sqlcmd GO 区切り記号は指定しないでください。 文字列に含まれる二重引用符をエスケープします。 "MyTable" などの引用符で囲まれた識別子ではなく、[MyTable] などの角かっこで囲まれた識別子を使用することを検討してください。

型:String
配置:0
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-QueryTimeout

クエリがタイムアウトするまでの秒数を指定します。タイムアウト値が指定されていない場合、クエリはタイムアウトしません。タイムアウトは、1 ~ 65535 の整数値である必要があります。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ServerInstance

データベース エンジンのインスタンスの名前を指定する文字列または SQL Server 管理オブジェクト (SMO) オブジェクトを指定します。 既定のインスタンスの場合は、コンピューター名 MyComputer のみを指定します。 名前付きインスタンスの場合は、ComputerName\InstanceName という形式を使用します。

型:PSObject
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-SeverityLevel

このコマンドレットが ERRORLEVEL Windows PowerShell 変数に返すエラー メッセージの重大度レベルの下限を指定します。

このコマンドレットは、重大度が SeverityLevel パラメーターで指定されている以上の場合、実行するクエリによって生成されたエラー メッセージから最も高い重大度レベルを返します。

SeverityLevel が指定されていないか、0 に設定されている場合、このコマンドレットは 0 を ERRORLEVEL に返します。

データベース エンジンのエラー メッセージの重大度レベルの範囲は 1 から 24 です。

このコマンドレットは、重大度が 10 の情報メッセージの重大度を報告しません。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-StatisticsVariable

コマンドレットの実行時に SQL Server ランタイム統計を割り当てる PowerShell 変数の名前を指定します。

このパラメーターの一般的な用途は、ExecutionTime (プロバイダーがコマンドレットの処理に費やした累積時間 (ミリ秒))、または IduRows (INSERT、DELETE、UPDATE ステートメントの影響を受ける行の合計数) をキャプチャすることです。

詳細については、「SQL Serverのプロバイダー統計 参照してください。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-SuppressProviderContextWarning

このコマンドレットが、現在の SQLSERVER:\SQL パス設定のデータベース コンテキストでコマンドレットのデータベース コンテキストを確立するために使用したという警告を抑制することを示します。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-TrustServerCertificate

信頼を検証するために証明書チェーンのウォークをバイパスしながらチャネルを暗号化するかどうかを示します。

このパラメーターは、モジュールの v22 の新機能です。 詳細については、「関連リンクの を参照してください。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Username

データベース エンジンのインスタンスに SQL Server 認証接続を確立するためのログイン ID を指定します。

パスワードは、Password パラメーターを使用して指定する必要があります。

ユーザー名とパスワードを指定しない場合、このコマンドレットは、Windows PowerShell セッションを実行している Windows アカウントを使用して Windows 認証接続を試行します。 可能であれば、Windows 認証を使用します。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Variable

sqlcmd スクリプトで使用する sqlcmd スクリプト変数のセットを指定し、変数の値を設定します。

Windows PowerShell 配列を使用して、複数の変数とその値を指定します。または、キーが変数名と変数値の値を表す Hashtable を使用します。

配列を使用すると、パラメーター値がトリミングされます。 この動作は、v21 との下位互換性のためにモジュールの v22 に保持されていました。 この動作に依存しないことをお勧めします。この動作は、モジュールの将来のメジャー バージョンで変更される可能性があります。

Hashtable 型のパラメーターは、モジュールの v22 以降でのみ使用できます。

型:PSObject
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

System.Management.Automation.PSObject

出力

System.Object