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

Beschreibung

Das cmdlet Invoke-Sqlcmd führt ein Skript aus, das die Sprachen und Befehle enthält, die vom SQL Server SQLCMD-Hilfsprogramm unterstützt werden.

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

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

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

Dieses Cmdlet unterstützt nicht die Verwendung von Befehlen, die in erster Linie mit der interaktiven Skriptbearbeitung zusammenhängen.

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

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

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

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

Sie können die Ausgabe von SQL Server-Nachrichten anzeigen, z. B. solche, die aus der SQL PRINT-Anweisung resultieren, indem Sie den Verbose-Parameter angeben.

Beispiele

Beispiel 1: Herstellen einer Verbindung mit einer benannten Instanz 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 einer benannten Instanz des SQL-Datenbankmoduls auf einem Computer und führt ein einfaches 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 mit Transact-SQL Anweisungen und SQLCMD-Befehlen, 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 sichern.

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 Parameter Variable.

Das Array definiert mehrere SQLCMD-Variablen.

Die $-Zeichen in der SELECT-Anweisung, die die SQLCMD-Variablen identifizieren, werden mithilfe des Zeichens "Back-Tick (')" escapet.

Beispiel 4: Aufrufen eines Skripts und Übergeben von Variablen aus dem SQL-Datenbankmodul

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 Instanz des SQL-Datenbankmoduls zu navigieren.

Anschließend wird Get-Item aufgerufen, um ein SQL Management Object Server-Objekt für die 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 positionsbezogenen Zeichenfolge 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 positionale Zeichenfolge, um die Eingabe für den Abfrageparameter 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 Parameter "As DataSet", um die Daten in einem .Net System.Data.DataSet-Objekt zu erfassen und das Ergebnis in der Variablen "$DS" zu speichern. Das Objekt kann zur weiteren 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 Parameter "As DataTables", um die Daten in einer Auflistung von .Net System.Data.DataTable-Objekten zu erfassen. Der Befehl ruft zwei Tabellen mit unterschiedlichen Spaltensätzen ab.

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

Beispiel 9: Vollzugriff auf 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

Mit diesem Befehl wird der Parameter -ConnectionString, um die von diesem Cmdlet hergestellte Verbindung vollständig zu steuern, anstatt die Invoke-Sqlcmd, um die Verbindungszeichenfolge basierend auf den parametern zu erstellen, die in der 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
...

Mit diesem Befehl wird der Parameter -OutputSqlErrors, 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 bereitstellt, in der der Fehler aufgetreten ist.

Beispiel 11: Herstellen einer Verbindung mit einer Azure SQL-Datenbank (oder verwalteten 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 der Azure SQL-Datenbank (oder verwalteten 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 der Azure SQL-Datenbank (oder verwalteten Instanz) mithilfe einer vom System zugewiesenen verwalteten Identität (SAMI)

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'

Beispiel 14: Herstellen einer Verbindung mit der Azure SQL-Datenbank (oder verwalteten Instanz) mithilfe einer vom Benutzer zugewiesenen verwalteten Identität (UAMI)

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'

Beispiel 15: Herstellen einer Für Read-Only Routing konfigurierten Verfügbarkeitsgruppe 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 parameter -ApplicationName und -HostName, um die beiden Ergebnisse visuell zu unterscheiden: Dies ist eine gängige Technik, die verwendet werden kann, um Verbindungen und ihre Absichten nachzuverfolgen, über das hier dargestellte -ApplicationIntent Beispiel hinaus.

Beispiel 16: Erfassen von Verbindungsstatistiken über -StatisticsVariable Parameter

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 den parameter -StatisticsVariable verwenden, um Informationen über die Verbindung, die ausgeführten Anweisungen und die Ausführungszeit beim Ausführen einiger T-SQL-Daten zu erfassen, die eine temporäre Tabelle erstellt, einen Wert einfügen 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 Weiterleiten der Servernamen durch das Cmdlet), erfasst die StatisticsVariable ein Array von Statistiken, eine für jede Verbindung. Ergebnisse können dann mithilfe von ($stats.IduRows | Measure-Object -Sum).Sumaggregiert werden.

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

Beispiel 17: Ausführen einer Abfrage, die Daten entschlüsselt, die aus Spalten verschlüsselt werden, die mit Always Encrypted verschlüsselt wurden. Gehen Sie davon aus, dass der Spaltenmasterschlüssel in einem Schlüsseltresor im 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 SQL Server-Befehl beendet und eine Fehlerstufe an die Windows PowerShell ERRORLEVEL-Variable zurückgibt, wenn bei diesem Cmdlet ein Fehler auftritt.

Die zurückgegebene Fehlerstufe ist 1, wenn der Fehler einen Schweregrad größer als 10 hat, und die Fehlerstufe 0 ist, wenn der Fehler einen Schweregrad von 10 oder weniger aufweist.

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

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-AccessToken

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

Dies kann z. B. zum Herstellen einer Verbindung mit SQL Azure DB und SQL Azure Managed Instance mithilfe eines Service Principal oder einer Managed Identity verwendet werden (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 UserName, Passwordoder Anmelde informationen nicht an, wenn Sie diesen Parameter verwenden.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ApplicationIntent

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

Zulässige Werte sind: ReadOnly und ReadWrite.

Typ:ApplicationIntent
Zulässige Werte:ReadWrite, ReadOnly
Position:Named
Standardwert:ReadWrite
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ApplicationName

Der Name der Anwendung, die der Verbindung zugeordnet ist.

Typ:String
Position:Named
Standardwert:.NET SqlClient Data Provider
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ConnectionString

Gibt eine Verbindungszeichenfolge an, die mit dem Server verbunden werden soll.

Typ:String
Position:Named
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ConnectionTimeout

Gibt die Anzahl der Sekunden an, wenn dieses Cmdlet nicht erfolgreich eine Verbindung mit einer Instanz des Datenbankmoduls herstellen kann. Der Timeoutwert muss ein ganzzahliger Wert zwischen 0 und 65534 sein. Wenn 0 angegeben ist, werden Verbindungsversuche nicht unterbrochen.

Typ:Int32
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Credential

Das PSCredential-Objekt, dessen Felder "Benutzername" und "Kennwort" zum Herstellen einer Verbindung mit der SQL-Instanz verwendet werden.

Typ:PSCredential
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Database

Gibt den Namen einer Datenbank an. Mit diesem Cmdlet wird eine Verbindung mit dieser Datenbank in der Instanz hergestellt, die im Parameter "ServerInstance" angegeben ist.

Wenn der Parameter "Database" nicht angegeben ist, hängt die verwendete Datenbank davon ab, ob der aktuelle Pfad sowohl den SQLSERVER:\SQL-Ordner 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 herstellt, 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 herstellt. Wenn Sie die Parameteroption 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.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-DedicatedAdministratorConnection

Gibt an, dass dieses Cmdlet eine dedizierte Administratorverbindung (DAC) verwendet, um eine Verbindung mit einer Instanz des Datenbankmoduls herzustellen.

DAC wird von Systemadministratoren für Aktionen wie die Problembehandlung von Instanzen verwendet, die keine neuen Standardverbindungen akzeptieren.

Die Instanz muss für die Unterstützung von DAC konfiguriert werden.

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

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-DisableCommands

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

Sie verhindert, dass Windows PowerShell-Variablen an das skript Invoke-Sqlcmd übergeben werden.

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

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-DisableVariables

Gibt an, dass dieses Cmdlet sqlcmd-Skriptingvariablen ignoriert. Dies ist nützlich, wenn ein Skript viele INSERT-Anweisungen enthält, die Zeichenfolgen enthalten können, die dasselbe Format wie Variablen aufweisen, z. B. $(variable_name).

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Encrypt

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

Dieser Wert ist der Encrypt Eigenschaft SqlConnectionEncryptOption für das SqlConnection-Objekt des Microsoft.Data.SqlClient-Treibers zugeordnet.

Wenn nicht angegeben, wird der Standardwert Mandatory.

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

Typ:String
Zulässige Werte:Mandatory, Optional, Strict
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-EncryptConnection

Gibt an, dass dieses Cmdlet ssl/TLS-Verschlüsselung (Secure Sockets Layer) für die Verbindung mit der Instanz des im Parameter "ServerInstance" angegebenen Datenbankmoduls verwendet.

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

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren: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. Der Schweregrad des Datenbankmodulfehlers reicht von 1 bis 24.

Typ:Int32
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-FailoverPartner

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

Typ:String
Position:Named
Standardwert:""
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-HostName

Gibt einen Arbeitsstationsnamen an. Der Arbeitsstationsname wird von der gespeicherten sp_who Systemprozedur und in der Hostnamenspalte der Sys.processes-Katalogansicht gemeldet. 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.

Typ:String
Aliase:WorkstationID
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-HostNameInCertificate

Der Hostname, der beim Überprüfen des SQL Server TLS/SSL-Zertifikats verwendet werden soll. Sie müssen diesen Parameter übergeben, wenn Ihre SQL Server-Instanz für die Erzwingungsverschlüsselung aktiviert ist und Sie eine Verbindung mit einer Instanz mit hostname/shortname herstellen möchten. Wenn dieser Parameter nicht angegeben wird, ist das Übergeben des vollqualifizierten Domänennamens (Fully Qualified Domain Name, FQDN) an -ServerInstance erforderlich, um eine Verbindung mit einer SQL Server-Instanz herzustellen, die für die Erzwingungsverschlüsselung aktiviert ist.

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

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-IgnoreProviderContext

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

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren: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.

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-InputFile

Gibt eine Datei an, die als Abfrageeingabe für dieses Cmdlet verwendet werden soll. Die Datei kann Transact-SQL Anweisungen, XQuery-Anweisungen und sqlcmd-Befehle und Skriptingvariablen enthalten. Geben Sie den vollständigen Pfad zur Datei an. Es wird erwartet, dass die Datei mit UTF-8 codiert wird.

Sie sollten nur Skripts aus vertrauenswürdigen Quellen ausführen. Stellen Sie sicher, dass alle Eingabeskripts mit den entsprechenden NTFS-Berechtigungen gesichert sind.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-KeyVaultAccessToken

Gibt ein Zugriffstoken für Schlüsseltresor in Azure Key Vault an. Verwenden Sie diesen Parameter, wenn eine spalte, die abgefragt werden soll, mit Always Encrypted mit einem Spaltenmasterschlüssel geschützt ist, der 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.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ManagedHsmAccessToken

Gibt ein Zugriffstoken für verwaltete HSMs im Azure Key Vault an. Verwenden Sie diesen Parameter, wenn eine spalte, die abgefragt werden soll, mit Always Encrypted mit einem Spaltenmasterschlüssel geschützt ist, der 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.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-MaxBinaryLength

Gibt die maximale Anzahl von Bytes an, die für Spalten mit binären Zeichenfolgen-Datentypen zurückgegeben werden, z. B. binär und varbinary. Der Standardwert ist 1.024 Byte.

Typ:Int32
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-MaxCharLength

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

Typ:Int32
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-MultiSubnetFailover

Wenn Ihre Anwendung eine Verbindung mit einer AlwaysOn Availability Group (AG) in verschiedenen Subnetzen herstellt, bietet das Übergeben dieses Parameters eine schnellere Erkennung und Verbindung mit dem (derzeit) aktiven Server.

Hinweis: Das Übergeben von -MultiSubnetFailover ist in .NET Framework 4.6.1 oder höheren Versionen nicht erforderlich.

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-NewPassword

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

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-OutputAs

Gibt den Typ der Ergebnisse an, die dieses Cmdlet abruft.

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

Typ:OutputType
Aliase:As
Zulässige Werte:DataSet, DataTables, DataRows
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-OutputSqlErrors

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

Typ:Boolean
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Password

Gibt das Kennwort für die ANMELDE-ID der SQL Server-Authentifizierung an, die im Parameter "Username" angegeben wurde. Bei Kennwörtern wird zwischen Groß- und Kleinschreibung unterschieden. Verwenden Sie nach Möglichkeit die Windows-Authentifizierung. Verwenden Sie nach Möglichkeit kein leeres 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 das Kennwort gefolgt von Ihrem Kennwort in einem .ps1 Skript codieren, wird Ihr Kennwort von jedem Benutzer angezeigt, der die Skriptdatei liest.

Weisen Sie der Datei die entsprechenden NTFS-Berechtigungen zu, um zu verhindern, dass andere Benutzer die Datei lesen können.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ProgressAction

Bestimmt, wie PowerShell auf Statusaktualisierungen reagiert, die von einem Skript, Cmdlet oder Anbieter generiert werden, z. B. auf die Statusanzeigen, die vom Cmdlet Write-Progress generiert werden. Das Cmdlet Write-Progress erstellt Statusanzeigen, die den Status eines Befehls anzeigen.

Typ:ActionPreference
Aliase:proga
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Query

Gibt eine oder mehrere Abfragen an, die dieses Cmdlet ausführt. Die Abfragen können Transact-SQL- oder XQuery-Anweisungen oder sqlcmd-Befehle sein. Mehrere Abfragen, die durch ein Semikolon getrennt sind, können angegeben werden. Geben Sie das sqlcmd GO-Trennzeichen nicht an. Escape aller doppelten Anführungszeichen, die in der Zeichenfolge enthalten sind. Erwägen Sie die Verwendung von klammern Bezeichnern wie [MyTable] anstelle von Bezeichnern wie "MyTable".

Typ:String
Position:0
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-QueryTimeout

Gibt die Anzahl von Sekunden an, bevor das Timeout der Abfragen erfolgt. Wenn kein Timeoutwert angegeben ist, wird kein Timeout für die Abfragen ausgeführt. Das Timeout muss ein ganzzahliger Wert zwischen 1 und 65535 sein.

Typ:Int32
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ServerInstance

Gibt eine Zeichenfolge oder ein SMO-Objekt (SQL Server Management Objects) an, das den Namen einer Instanz des Datenbankmoduls angibt. Geben Sie für Standardinstanzen nur den Computernamen "MyComputer" an. Verwenden Sie für benannte Instanzen das Format "ComputerName\InstanceName".

Typ:PSObject
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-SeverityLevel

Gibt die untere Grenze für den Schweregrad der Fehlermeldung an, die dieses Cmdlet zur 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, der Schweregrad ist gleich oder höher als im Parameter "SeverityLevel" angegeben.

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

Die Schweregrad der Fehlermeldungen des Datenbankmoduls reichen von 1 bis 24.

Dieses Cmdlet meldet keine Schweregrade für Informationsnachrichten, die einen Schweregrad von 10 aufweisen.

Typ:Int32
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-StatisticsVariable

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

Die allgemeine Verwendung für diesen Parameter besteht darin, die ExecutionTime (die kumulierte Zeit (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 Anbieterstatistik für SQL Server-.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-SuppressProviderContextWarning

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

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-TrustServerCertificate

Gibt an, ob der Kanal verschlüsselt wird, während die Zertifikatkette umgangen wird, um die Vertrauensstellung zu überprüfen.

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

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Username

Gibt die Anmelde-ID zum Herstellen einer SQL Server-Authentifizierungsverbindung zu einer Instanz des Datenbankmoduls an.

Das Kennwort muss über den Parameter "Password" angegeben werden.

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

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren: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 eine Hashtable verwenden, bei der der Schlüssel den Variablennamen und den Wert des Variablenwerts darstellt.

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

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

Typ:PSObject
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

Eingaben

System.Management.Automation.PSObject

Ausgaben

System.Object