Invoke-Sqlcmd

Führt ein Skript mit Anweisungen aus, die vom SQL Server SQLCMD-Hilfsprogramm unterstützt werden.

Syntax

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>]
      [<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>]
      [<CommonParameters>]

Beschreibung

Das Cmdlet Invoke-Sqlcmd führt ein Skript mit den Sprachen und Befehlen aus, die vom SQL Server SQLCMD-Hilfsprogramm unterstützt werden.

Die unterstützten Befehle sind Transact-SQL-Anweisungen und die Teilmenge der XQuery-Syntax, die von der Datenbank-Engine unterstützt wird.

Dieses Cmdlet akzeptiert auch viele der von SQLCMD nativ unterstützten Befehle, z. B. GO und QUIT.

Dieses Cmdlet akzeptiert auch die SQLCMD-Skriptvariablen, z. B. SQLCMDUSER. Standardmäßig legt dieses Cmdlet keine SQLCMD-Skriptvariablen fest.

Dieses Cmdlet unterstützt nicht die Verwendung von Befehlen, die sich hauptsächlich auf die interaktive Skriptbearbeitung beziehen.

Die Befehle :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace und :serverlist werden nicht unterstützt.

Wenn dieses Cmdlet ausgeführt wird, wird das erste Resultset, das das Skript zurückgibt, als formatierte Tabelle angezeigt.

Wenn nachfolgende Resultsets andere Spaltenlisten als die erste enthalten, werden diese Resultsets nicht angezeigt.

Wenn nachfolgende Resultsets nach dem ersten Satz dieselbe Spaltenliste aufweisen, werden ihre Zeilen an die formatierte Tabelle angefügt, die die Zeilen enthält, die vom ersten Resultset zurückgegeben wurden.

Sie können SQL Server Nachrichtenausgabe anzeigen, z. B. die, die sich aus der SQL PRINT-Anweisung ergeben, indem Sie den Verbose-Parameter angeben.

Beispiele

Beispiel 1: Herstellen einer Verbindung mit einem benannten instance und Ausführen eines Skripts

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

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

Dieser Befehl stellt eine Verbindung mit einem benannten instance der SQL-Datenbank-Engine auf einem Computer her und führt ein grundlegendes Transact-SQL-Skript aus.

Beispiel 2: Aufrufen von Befehlen in einer Skriptdatei und Speichern der Ausgabe in einer Textdatei

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

Dieser Befehl liest eine Datei, die Transact-SQL-Anweisungen und SQLCMD-Befehle enthält, führt die Datei aus und schreibt die Ausgabe in eine andere Datei.

Die Ausgabedatei kann proprietäre Informationen enthalten, daher sollten Sie die Ausgabedateien mit den entsprechenden NTFS-Berechtigungen schützen.

Beispiel 3: Aufrufen eines Skripts und Übergeben von Variablenwerten aus einer Zeichenfolge

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

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

Dieser Befehl verwendet ein Array von Zeichenfolgen als Eingabe für den Variablenparameter.

Das Array definiert mehrere SQLCMD-Variablen.

Die $-Zeichen in der SELECT-Anweisung, die die SQLCMD-Variablen identifizieren, werden mithilfe des Zeichens back-tick (') mit Escapezeichen versehen.

Beispiel 4: Aufrufen eines Skripts und Übergeben von Variablen aus der SQL-Datenbank-Engine

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

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

Dieser Befehl verwendet Set-Location, um zum SQL ServerWindows PowerShell-Anbieterpfad für eine instance der SQL-Datenbank-Engine zu navigieren.

Anschließend wird Get-Item aufgerufen, um ein SQL Management Object Server-Objekt zur Verwendung als ServerInstance-Parameter von Invoke-Sqlcmd abzurufen.

Beispiel 5: Ausführen einer Abfrage und Anzeigen ausführlicher Ausgabe

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

Dieser Befehl verwendet den Windows PowerShellVerbose-Parameter, um die Nachrichtenausgabe des SQL PRINT-Befehls zurückzugeben.

Beispiel 6: Aufrufen eines Befehls mithilfe einer Positionszeichenfolge als Eingabe

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

Dieser Befehl verwendet eine Positionszeichenfolge, um die Eingabe für den Query-Parameter zu liefern.

Außerdem wird veranschaulicht, wie Invoke-Sqlcmd den aktuellen Pfad verwendet, um den Datenbankkontext auf MyDatabase festzulegen.

Beispiel 7: Erfassen von Daten in einem DataSet-Objekt

$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 }

Dieser Befehl verwendet den As DataSet-Parameter, um die Daten in einem .Net System.Data.DataSet-Objekt zu erfassen und das Ergebnis in der Variablen "$DS" zu speichern. Das Objekt kann für die weitere Verarbeitung verwendet werden.

Beispiel 8: Abrufen bestimmter Spaltensätze

$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

Der erste Befehl verwendet den As DataTables-Parameter, um die Daten in einer Sammlung von .Net System.Data.DataTable-Objekten zu erfassen. Der Befehl ruft zwei Tabellen mit unterschiedlichen Spaltensätzen ab.

Jede Tabelle kann basierend auf einem eigenen Schema einzeln verarbeitet werden.

Beispiel 9: Vollständige Kontrolle über eine Verbindung

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

Dieser Befehl verwendet den -ConnectionString-Parameter, um die vollständige Kontrolle über die Verbindung zu erhalten, die dieses Cmdlet herstellt, anstatt die Invoke-Sqlcmd, um die Verbindungszeichenfolge basierend auf den Parametern zu erstellen, die über die Befehlszeile übergeben werden.

Dies ist nützlich für weniger häufige Eigenschaften, die Sie möglicherweise verwenden möchten.

Beispiel 10: Ausführen einer gespeicherten Prozedur und Erfassen der SQL-Fehler

$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
...

Dieser Befehl verwendet den -OutputSqlErrors-Parameter , um die Fehler an den Benutzer zu melden. Beachten Sie, dass die Fehlermeldung in diesem Fall zusätzliche Informationen wie den SP-Namen und die Zeilennummer enthält, an der der Fehler aufgetreten ist.

Beispiel 11: Herstellen einer Verbindung mit Azure SQL Datenbank (oder verwaltete Instanz) mithilfe eines Zugriffstokens

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'

Beispiel 12: Herstellen einer Verbindung mit Azure SQL Datenbank (oder verwaltete Instanz) mithilfe eines Dienstprinzipals

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'

Beispiel 13: Herstellen einer Verbindung mit Azure SQL Datenbank (oder verwaltete Instanz) mithilfe einer verwalteten Identität

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).

## Obtain access token from the machine
if (Get-Command -All az -ErrorAction SilentlyContinue -CommandType Application) {
  # Obtain the Access Token from the Azure provider for database resources (using az az cli)
  az login
  $access_token = az account get-access-token --resource https://database.windows.net/ --query accessToken -o tsv
} else {
  # az cli not around: fall back and assume this is a VM in Azure
  $response = Invoke-WebRequest `
    -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net'`
    -Method GET`
    -Headers @{Metadata="true"}
  $access_token = ($response.Content | ConvertFrom-Json).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'

Dieses Beispiel ähnelt dem obigen. Es zeigt Nur die Flexibilität des AccessToken-Parameters .

Beispiel 14: Herstellen einer Verbindung mit einer Verfügbarkeitsgruppe, die für Read-Only Routing konfiguriert ist, mithilfe von -ApplicationIntent

# 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

Dies zeigt, dass die Verbindung abhängig vom Wert des -ApplicationIntent Parameters an einen anderen Server in der Ag weitergeleitet wird. Beobachten Sie übrigens die Verwendung der -ApplicationName Parameter und -HostName zur visuellen Unterscheidung der beiden Ergebnisse: Dies ist eine gängige Technik, die verwendet werden kann, um Verbindungen und ihre Absichten nachzuverfolgen, über das hier gezeigte Beispiel -ApplicationIntent hinaus.

Beispiel 15: Erfassen von Verbindungsstatistiken über den Parameter "-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

In diesem Beispiel wird gezeigt, wie Sie mithilfe des -StatisticsVariable Parameters Informationen zur Verbindung, den ausgeführten Anweisungen und der Ausführungszeit erfassen, wenn T-SQL ausgeführt wird, das eine temporäre Tabelle erstellt, einen Wert einfügt und schließlich eine Auswahl ausgibt, um alle eingefügten Zeilen abzurufen.

Hinweis: Wenn dieselbe Abfrage für mehrere Server ausgeführt wird (z. B. durch Das Piping der Servernamen über das Cmdlet), erfasst das StatisticsVariable ein Array von Statistiken, eins für jede Verbindung. Ergebnisse können dann aggregiert werden, indem Sie z. B ($stats.IduRows | Measure-Object -Sum).Sum. verwenden.

Weitere Informationen zu den verfügbaren Statistiken finden Sie unter Anbieterstatistik für SQL Server.

Beispiel 16: Führen Sie eine Abfrage aus, mit der Daten entschlüsselt werden, die aus mithilfe von Always Encrypted verschlüsselten Spalten abgerufen wurden. Angenommen, die Spalte master Schlüssel in einem Schlüsseltresor in Azure Key Vault gespeichert ist.

# 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

Parameter

-AbortOnError

Gibt an, dass dieses Cmdlet den Befehl SQL Server beendet und eine Fehlerebene an die Windows PowerShell ERRORLEVEL-Variable zurückgibt, wenn für dieses Cmdlet ein Fehler auftritt.

Bei einem Fehlerschweregrad über 10 wird die Fehlerstufe 1 und bei einem Fehlerschweregrad von maximal 10 die Fehlerstufe 0 zurückgegeben.

Wenn auch der ErrorLevel-Parameter angegeben ist, gibt dieses Cmdlet 1 nur zurück, wenn der Schweregrad der Fehlermeldung gleich oder höher als der für ErrorLevel angegebene Wert ist.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AccessToken

Das Zugriffstoken, das zur Authentifizierung bei SQL Server verwendet wird, als Alternative zur Benutzer-/Kennwort- oder Windows-Authentifizierung.

Dies kann beispielsweise verwendet werden, um eine Verbindung mit SQL Azure DB und SQL Azure Managed Instance mit einem Service Principal oder einem Managed Identity herzustellen (siehe Verweise unten auf dieser Seite).

In gängigen Szenarien wird dieser Parameter mit etwa (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token abgerufen (erfordert das Az.Account-Modul).

Geben Sie bei Verwendung dieses Parameters keinen Benutzernamen, kein Kennwort oder keine Anmeldeinformationen an.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationIntent

Der Anwendungsworkloadtyp beim Herstellen einer Verbindung mit einer Datenbank in einer SQL Server Verfügbarkeitsgruppe.

Zulässige Werte sind ReadOnly und ReadWrite.

Type:ApplicationIntent
Accepted values:ReadWrite, ReadOnly
Position:Named
Default value:ReadWrite
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationName

Der Name der Anwendung, die der Verbindung zugeordnet ist.

Type:String
Position:Named
Default value:.NET SqlClient Data Provider
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ConnectionString

Gibt einen Verbindungszeichenfolge an, um eine Verbindung mit dem Server herzustellen.

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-ConnectionTimeout

Gibt die Anzahl der Sekunden an, bei denen für dieses Cmdlet ein Zeitüberschreitungsintervall besteht, wenn keine verbindung mit einer instance der Datenbank-Engine hergestellt werden kann. Der Timeoutwert muss ein ganzzahliger Wert zwischen 0 und 65534 sein. Wenn 0 angegeben wird, verursachen Verbindungsversuche kein Timeout.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Das PSCredential-Objekt, dessen Felder Benutzername und Kennwort verwendet werden, um eine Verbindung mit dem SQL-instance herzustellen.

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Database

Gibt den Namen einer Datenbank an. Dieses Cmdlet stellt eine Verbindung mit dieser Datenbank in der instance her, die im ServerInstance-Parameter angegeben ist.

Wenn der Database-Parameter nicht angegeben wird, hängt die verwendete Datenbank davon ab, ob der aktuelle Pfad sowohl den Ordner SQLSERVER:\SQL als auch einen Datenbanknamen angibt. Wenn der Pfad sowohl den SQL-Ordner als auch einen Datenbanknamen angibt, stellt dieses Cmdlet eine Verbindung mit der Datenbank her, die im Pfad angegeben ist. Wenn der Pfad nicht auf dem SQL-Ordner basiert oder der Pfad keinen Datenbanknamen enthält, stellt dieses Cmdlet eine Verbindung mit der Standarddatenbank für die aktuelle Anmelde-ID her. Wenn Sie den Parameterschalter IgnoreProviderContext angeben, berücksichtigt dieses Cmdlet keine datenbank, die im aktuellen Pfad angegeben ist, und stellt eine Verbindung mit der Datenbank her, die als Standard für die aktuelle Anmelde-ID definiert ist.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DedicatedAdministratorConnection

Gibt an, dass dieses Cmdlet eine dedizierte Administratorverbindung (Dedicated Administrator Connection, DAC) verwendet, um eine Verbindung mit einer instance der Datenbank-Engine herzustellen.

DACs werden vom Systemadministrator beispielsweise für die Problembehandlung von Instanzen verwendet, die keine neuen Standardverbindungen akzeptieren.

Die Instanz muss für die Unterstützung von DACs konfiguriert sein.

Wenn DAC nicht aktiviert ist, meldet dieses Cmdlet einen Fehler und wird nicht ausgeführt.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DisableCommands

Gibt an, dass dieses Cmdlet einige sqlcmd-Features deaktiviert, die die Sicherheit bei der Ausführung in Batchdateien beeinträchtigen können.

Es verhindert, dass Windows PowerShell Variablen an das Invoke-Sqlcmd-Skript übergeben werden.

Das in der SQLCMDINI-Skriptvariablen angegebene Startskript wird nicht ausgeführt.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DisableVariables

Gibt an, dass dieses Cmdlet sqlcmd-Skriptvariablen ignoriert. Dies erweist sich als nützlich, wenn ein Skript mehrere INSERT-Anweisungen enthält, die Zeichenfolgen im selben Format wie Variablen enthalten können, wie z. B. $(variable_name).

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encrypt

Der Verschlüsselungstyp, der beim Herstellen einer Verbindung mit SQL Server verwendet werden soll.

Dieser Wert wird der Encrypt Eigenschaft SqlConnectionEncryptOption des SqlConnection-Objekts des Microsoft.Data.SqlClient-Treibers zugeordnet.

Wenn keine Angabe erfolgt, lautet der Standardwert Mandatory.

Dieser Parameter ist neu in v22 des Moduls. Weitere Informationen finden Sie Strict Connection Encryption unter Verwandte Links.

Type:String
Accepted values:Mandatory, Optional, Strict
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-EncryptConnection

Gibt an, dass dieses Cmdlet SSL/TLS-Verschlüsselung (Secure Sockets Layer) für die Verbindung mit der instance der Datenbank-Engine verwendet, die im ServerInstance-Parameter angegeben ist.

Ab v22 des Moduls ist dieser Parameter veraltet. Connections sind standardmäßig verschlüsselt. Verwenden Sie stattdessen den neuen Parameter -Encrypt. Weitere Informationen finden Sie Strict Connection Encryption unter Verwandte Links.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ErrorLevel

Gibt an, dass dieses Cmdlet nur Fehlermeldungen anzeigt, deren Schweregrad gleich oder höher als der angegebene Wert ist. Alle Fehlermeldungen werden angezeigt, wenn dieser Parameter nicht angegeben oder auf 0 festgelegt ist. Schweregrade für Datenbank-Engine-Fehler liegen zwischen 1 und 24.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FailoverPartner

Der Name oder die Adresse des Partnerservers, mit dem eine Verbindung hergestellt werden soll, wenn der primäre Server ausgefallen ist.

Type:String
Position:Named
Default value:""
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostName

Gibt einen Arbeitsstationsnamen an. Der Arbeitsstationsname wird durch die gespeicherte Systemprozedur sp_who und in der Spalte hostname der sys.processes-Katalogsicht angegeben. Wenn dieser Parameter nicht angegeben ist, ist der Standardwert der Name des Computers, auf dem Invoke-Sqlcmd ausgeführt wird. Dieser Parameter kann verwendet werden, um verschiedene Invoke-Sqlcmd Sitzungen zu identifizieren.

Type:String
Aliases:WorkstationID
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostNameInCertificate

Der Hostname, der beim Überprüfen des TLS/SSL-Zertifikats von SQL Server verwendet werden soll. Sie müssen diesen Parameter übergeben, wenn Ihr SQL Server instance für "Verschlüsselung erzwingen" aktiviert ist und Sie eine Verbindung mit einem instance mithilfe des Hostnamens/Kurznamens herstellen möchten. Wenn dieser Parameter ausgelassen wird, ist die Übergabe des vollqualifizierten Domänennamens (Fully Qualified Domain Name, FQDN) an -ServerInstance erforderlich, um eine Verbindung mit einem für die Verschlüsselung erzwingen aktivierten SQL Server instance herzustellen.

Dieser Parameter ist in v22 des Moduls neu. Weitere Informationen finden Sie Strict Connection Encryption unter Verwandte Links.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IgnoreProviderContext

Gibt an, dass dieses Cmdlet den Datenbankkontext ignoriert, der vom aktuellen SQLSERVER:\SQL-Pfad eingerichtet wurde. Wenn der Database-Parameter nicht angegeben ist, verwendet dieses Cmdlet die Standarddatenbank für die aktuelle Anmelde-ID oder das aktuelle Windows-Konto.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeSqlUserErrors

Gibt an, dass dieses Cmdlet SQL-Benutzerskriptfehler zurückgibt, die andernfalls standardmäßig ignoriert werden. Wenn dieser Parameter angegeben ist, entspricht dieses Cmdlet dem Standardverhalten des Sqlcmd-Hilfsprogramms.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputFile

Gibt eine Datei an, die als Abfrageeingabe für dieses Cmdlet verwendet werden soll. Die Datei kann Transact-SQL-Anweisungen, XQuery-Anweisungen sowie sqlcmd-Befehle und Skriptvariablen enthalten. Geben Sie den vollständigen Pfad zur Datei an. Leerzeichen im Dateipfad oder -namen sind nicht zulässig. Es wird erwartet, dass die Datei mit UTF-8 codiert wird.

Skripts sollten nur aus vertrauenswürdigen Quellen ausgeführt werden. Stellen Sie sicher, dass alle Eingabeskripts durch die geeigneten NTFS-Berechtigungen abgesichert sind.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-KeyVaultAccessToken

Gibt ein Zugriffstoken für Schlüsseltresore in Azure Key Vault an. Verwenden Sie diesen Parameter, wenn eine abzufragte Spalte mit Always Encrypted mithilfe einer Spalte master schlüssel geschützt ist, die in einem Schlüsseltresor in Azure Key Vault gespeichert ist. Alternativ können Sie sich bei Azure mit Add-SqlAzureAuthenticationContext authentifizieren, bevor Sie dieses Cmdlet aufrufen.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ManagedHsmAccessToken

Gibt ein Zugriffstoken für verwaltete HSMs in Azure Key Vault an. Verwenden Sie diesen Parameter, wenn eine abzufragte Spalte mit Always Encrypted geschützt ist, indem eine Spalte master Schlüssel verwendet wird, die in einem verwalteten HSM in Azure Key Vault gespeichert ist. Alternativ können Sie sich bei Azure mit Add-SqlAzureAuthenticationContext authentifizieren, bevor Sie dieses Cmdlet aufrufen.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxBinaryLength

Gibt die maximale Anzahl von Bytes an, die für Spalten mit binären Zeichenfolgendatentypen wie binary und varbinary zurückgegeben werden. Der Standardwert ist 1.024 Bytes.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxCharLength

Gibt die maximale Anzahl von Zeichen an, die für Spalten mit Zeichen- oder Unicode-Datentypen zurückgegeben werden, wie char, nchar, varchar und nvarchar. Der Standardwert ist 4.000 Zeichen.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MultiSubnetFailover

Wenn Ihre Anwendung eine Verbindung mit einer AlwaysOn-Verfügbarkeitsgruppe (AG) in verschiedenen Subnetzen herstellt, ermöglicht die Übergabe dieses Parameters eine schnellere Erkennung und Verbindung mit dem (derzeit) aktiven Server.

Hinweis: Das Übergeben von -MultiSubnetFailover ist bei .NET Framework Version 4.6.1 oder höher nicht erforderlich.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NewPassword

Gibt ein neues Kennwort für eine Anmelde-ID der SQL Server-Authentifizierung an. Dieses Cmdlet ändert das Kennwort und beendet dann. Sie müssen auch die Parameter Benutzername und Kennwort angeben, wobei Password das aktuelle Kennwort für die Anmeldung angibt.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutputAs

Gibt den Typ der Ergebnisse an, die dieses Cmdlet erhält.

Wenn Sie keinen Wert für diesen Parameter angeben, legt das Cmdlet den Wert auf DataRows fest.

Type:OutputType
Aliases:As
Accepted values:DataSet, DataTables, DataRows
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutputSqlErrors

Gibt an, dass dieses Cmdlet Fehlermeldungen in der Invoke-Sqlcmd Ausgabe anzeigt.

Type:Boolean
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Password

Gibt das Kennwort für die anmelde-ID der SQL Server-Authentifizierung an, die im Username-Parameter angegeben wurde. Bei Kennwörtern wird nach Groß- und Kleinschreibung unterschieden. Verwenden Sie nach Möglichkeit die Windows-Authentifizierung. Lassen Sie das Kennwortfeld nicht leer, sondern verwenden Sie möglichst ein sicheres Kennwort.

Wenn Sie den Parameter Password gefolgt von Ihrem Kennwort angeben, ist das Kennwort für jeden sichtbar, der Ihren Monitor sehen kann.

Wenn Sie kennwort gefolgt von Ihrem Kennwort in einem .ps1-Skript codieren, wird jedem, der die Skriptdatei liest, Ihr Kennwort angezeigt.

Weisen Sie der Datei die geeigneten NTFS-Berechtigungen zu, um zu verhindern, dass sie von anderen Benutzern gelesen werden kann.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Query

Gibt eine oder mehrere Abfragen an, die von diesem Cmdlet ausgeführt werden. Die Abfragen können als Transact-SQL- oder XQuery-Anweisungen bzw. sqlcmd-Befehle vorliegen. Es können mehrere durch Semikolons (;) getrennte Abfragen angegeben werden. Das sqlcmd-Trennzeichen GO sollte nicht angegeben werden. Doppelte Anführungszeichen in einer Zeichenfolge müssen mit einem Escapezeichen versehen werden. Verwenden Sie Bezeichner in eckigen Klammern, z. B. [MeineTabelle], anstelle von Bezeichnern in Anführungszeichen, wie "MeineTabelle".

Type:String
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-QueryTimeout

Gibt die Anzahl der Sekunden vor dem Timeout der Abfragen an. Wenn kein Timeoutwert angegeben wird, tritt für die Abfragen kein Timeout auf. Das Timeout muss ein ganzzahliger Wert zwischen 1 und 65535 sein.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ServerInstance

Gibt eine Zeichenfolge oder ein SMO-Objekt (SQL Server Management Objects) an, das den Namen eines instance der Datenbank-Engine angibt. Geben Sie für Standardinstanzen nur den Computernamen MyComputer an. Verwenden Sie für benannte Instanzen das Format ComputerName\Instanzname.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-SeverityLevel

Gibt den unteren Grenzwert für den Schweregrad der Fehlermeldung an, den dieses Cmdlet an die Windows PowerShell Variable ERRORLEVEL zurückgibt.

Dieses Cmdlet gibt den höchsten Schweregrad aus den von den ausgeführten Abfragen generierten Fehlermeldungen zurück, vorausgesetzt, dass der Schweregrad gleich oder höher als im SeverityLevel-Parameter angegeben ist.

Wenn SeverityLevel nicht angegeben oder auf 0 festgelegt ist, gibt dieses Cmdlet 0 auf ERRORLEVEL zurück.

Die Schweregrade für Datenbank-Engine-Fehlermeldungen liegen zwischen 1 und 24.

Dieses Cmdlet meldet keine Schweregrade für Informationsmeldungen mit einem Schweregrad von 10.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-StatisticsVariable

Geben Sie den Namen einer PowerShell-Variablen an, der die SQL Server Laufzeitstatistiken zugewiesen wird, wenn das Cmdlet ausgeführt wird.

Dieser Parameter wird häufig verwendet, um die ExecutionTime (kumulative Zeitspanne in Millisekunden) zu erfassen, die der Anbieter für die Verarbeitung des Cmdlets aufgewendet hat, oder IduRows (die Gesamtanzahl der Zeilen, die von INSERT-, DELETE- und UPDATE-Anweisungen betroffen sind).

Weitere Informationen finden Sie unter Anbieterstatistiken für SQL Server.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SuppressProviderContextWarning

Gibt an, dass dieses Cmdlet die Warnung unterdrückt, die dieses Cmdlet im Datenbankkontext aus der aktuellen SQLSERVER:\SQL-Pfadeinstellung verwendet hat, um den Datenbankkontext für das Cmdlet einzurichten.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TrustServerCertificate

Gibt an, ob der Kanal verschlüsselt wird, während das Durchlaufen der Zertifikatkette zum Überprüfen der Vertrauensstellung umgangen wird.

Dieser Parameter ist in v22 des Moduls neu. Weitere Informationen finden Sie Strict Connection Encryption unter Verwandte Links.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Username

Gibt die Anmelde-ID an, über die eine SQL Server-Authentifizierungsverbindung mit einer Instanz der Datenbank-Engine hergestellt wird.

Das Kennwort muss über den Parameter Password angegeben werden.

Wenn Benutzername und Kennwort nicht angegeben sind, versucht dieses Cmdlet eine Windows-Authentifizierungsverbindung mithilfe des Windows-Kontos, das die Windows PowerShell Sitzung ausführt. Verwenden Sie nach Möglichkeit die Windows-Authentifizierung.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Variable

Gibt einen Satz von sqlcmd-Skriptvariablen für die Verwendung im sqlcmd-Skript an und legt einen Wert für die Variablen fest.

Verwenden Sie ein Windows PowerShell Array, um mehrere Variablen und deren Werte anzugeben. Alternativ können Sie einen Hashtable verwenden, bei dem der Schlüssel den Variablennamen und den Wert des Variablenwerts darstellt.

Bei Verwendung eines Arrays werden Parameterwerte gekürzt. Dieses Verhalten wurde aus Gründen der Abwärtskompatibilität mit v21 in v22 des Moduls beibehalten. Es wird empfohlen, sich nicht auf dieses Verhalten zu verlassen, das sich in einer zukünftigen Hauptversion des Moduls ändern kann.

Der Parameter vom Typ Hashtable ist nur in v22+ des Moduls verfügbar.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

System.Management.Automation.PSObject

Ausgaben

System.Object