Invoke-Sqlcmd

Esegue uno script contenente istruzioni supportate dall'utilità SQLCMD SQL Server.

Sintassi

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

Descrizione

Il cmdlet Invoke-Sqlcmd esegue uno script contenente i linguaggi e i comandi supportati dall'utilità SQLCMD SQL Server.

I comandi supportati sono istruzioni Transact-SQL e il subset della sintassi XQuery supportata dal motore di database.

Questo cmdlet accetta anche molti dei comandi supportati in modo nativo da SQLCMD, ad esempio GO e QUIT.

Questo cmdlet accetta anche le variabili di scripting SQLCMD, ad esempio SQLCMDUSER. Per impostazione predefinita, questo cmdlet non imposta le variabili di scripting SQLCMD.

Questo cmdlet non supporta l'uso di comandi correlati principalmente alla modifica interattiva dello script.

I comandi non supportati includono: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace e :serverlist.

Quando questo cmdlet viene eseguito, il primo set di risultati restituito dallo script viene visualizzato come tabella formattata.

Se i set di risultati successivi contengono elenchi di colonne diversi rispetto al primo, tali set di risultati non vengono visualizzati.

Se i set di risultati successivi dopo il primo set hanno lo stesso elenco di colonne, le righe vengono aggiunte alla tabella formattata contenente le righe restituite dal primo set di risultati.

È possibile visualizzare SQL Server output dei messaggi, ad esempio quelli risultanti dall'istruzione SQL PRINT, specificando il parametro Verbose.

Esempio

Esempio 1: Connettersi a un'istanza denominata ed eseguire uno script

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

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

Questo comando si connette a un'istanza denominata del motore di database SQL in un computer ed esegue uno script Transact-SQL di base.

Esempio 2: Richiamare i comandi in un file di script e salvare l'output in un file di testo

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

Questo comando legge un file contenente istruzioni Transact-SQL e comandi SQLCMD, esegue il file e scrive l'output in un altro file.

Il file di output può contenere informazioni proprietarie, pertanto è necessario proteggere i file di output con le autorizzazioni NTFS appropriate.

Esempio 3: Richiamare uno script e passare i valori delle variabili da una stringa

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

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

Questo comando usa una matrice di stringhe di caratteri come input per il parametro Variable.

La matrice definisce più variabili SQLCMD.

L'istruzione $ accede all'istruzione SELECT che identifica le variabili SQLCMD viene eseguito l'escape usando il carattere back-tick (') .

Esempio 4: Richiamare uno script e passare variabili dal motore di database 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

Questo comando usa Set-Location per passare al percorso del provider di SQL ServerWindows PowerShell per un'istanza del motore di database SQL.

Chiama quindi Get-Item per recuperare un oggetto SQL Management Object Server da usare come parametro ServerInstance di Invoke-Sqlcmd.

Esempio 5: Eseguire una query e visualizzare un output dettagliato

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

Questo comando usa il parametro Windows PowerShellVerbose per restituire l'output del messaggio del comando SQL PRINT.

Esempio 6: Richiamare un comando usando una stringa posizionale come input

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

Questo comando usa una stringa posizionale per fornire l'input al parametro Query.

Viene inoltre illustrato come Invoke-Sqlcmd usa il percorso corrente per impostare il contesto del database su MyDatabase.

Esempio 7: Acquisire dati in un oggetto 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 }

Questo comando usa il parametro As DataSet per acquisire i dati in un oggetto .Net System.Data.DataSet e archivia il risultato nella variabile '$DS'. L'oggetto può essere usato per un'ulteriore elaborazione.

Esempio 8: Ottenere set di colonne specifici

$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

Il primo comando usa il parametro As DataTables per acquisire i dati in una raccolta di oggetti .Net System.Data.DataTable. Il comando ottiene due tabelle con set di colonne diversi.

Ogni tabella può essere elaborata singolarmente, in base al proprio schema.

Esempio 9: Ottenere il controllo completo di una connessione

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

Questo comando consente agli utenti del parametro -ConnectionString di ottenere il controllo completo della connessione stabilita da questo cmdlet, anziché il Invoke-Sqlcmd per compilare la stringa di connessione in base ai parametri passati alla riga di comando.

Questo è utile per le proprietà meno comuni che è possibile usare.

Esempio 10: Eseguire una stored procedure e acquisire gli errori 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
...

Questo comando consente di usare il parametro -OutputSqlErrors per segnalare gli errori all'utente. Si noti che il messaggio di errore in questo caso fornisce informazioni aggiuntive come il nome SP e il numero di riga in cui si è verificato l'errore.

Esempio 11: Connettersi al database Azure SQL (o Istanza gestita) usando un token di accesso

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'

Esempio 12: Connettersi al database Azure SQL (o Istanza gestita) usando un'entità servizio

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'

Esempio 13: Connettersi al database Azure SQL (o Istanza gestita) usando un'identità gestita assegnata dal sistema (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'

Esempio 14: Connettersi al database Azure SQL (o Istanza gestita) usando un'identità gestita assegnata dall'utente (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'

Esempio 15: Connettersi a un gruppo di disponibilità configurato per il routing Read-Only tramite -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

che mostra che, a seconda del valore del -ApplicationIntent parametro, la connessione viene instradata a un server diverso nel gruppo di disponibilità. Si osservino inoltre gli usi dei -ApplicationName parametri e -HostName per distinguere visivamente i due risultati: si tratta di una tecnica comune che può essere usata per tracciare le connessioni e le relative finalità, oltre all'esempio -ApplicationIntent illustrato qui.

Esempio 16: Acquisire le statistiche di connessione tramite il parametro -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 questo esempio viene illustrato come usare il -StatisticsVariable parametro per acquisire informazioni sulla connessione, le istruzioni eseguite e il tempo di esecuzione durante l'esecuzione di alcuni T-SQL che crea una tabella temporanea, inserisce un valore e infine genera una selezione per ottenere tutte le righe inserite.

Nota: quando la stessa query viene eseguita su più server ,ad esempio eseguendo il piping dei nomi del server tramite il cmdlet, viene StatisticsVariable acquisita una matrice di statistiche, una per ogni connessione. I risultati possono quindi essere aggregati usando, ad esempio, ($stats.IduRows | Measure-Object -Sum).Sum.

Per altre informazioni sulle statistiche disponibili, vedere Statistiche provider per SQL Server.

Esempio 17: eseguire una query che decrittografa i dati recuperati dalle colonne crittografate usando Always Encrypted. Si supponga che la chiave master della colonna sia archiviata in un insieme di credenziali delle chiavi in 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

Parametri

-AbortOnError

Indica che questo cmdlet arresta il comando SQL Server e restituisce un livello di errore alla variabile Windows PowerShell ERRORLEVEL se questo cmdlet rileva un errore.

Il livello di errore restituito è 1 se il livello di gravità dell'errore è maggiore di 10, mentre è 0 se il livello di gravità dell'errore è minore o uguale a 10.

Se viene specificato anche il parametro ErrorLevel, questo cmdlet restituisce 1 solo se la gravità del messaggio di errore è uguale o superiore al valore specificato per ErrorLevel.

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

-AccessToken

Token di accesso usato per eseguire l'autenticazione per SQL Server, come alternativa all'autenticazione utente/password o a Windows.

Questa operazione può essere usata, ad esempio, per connettersi a SQL Azure DB e SQL Azure Managed Instance usando un Managed IdentityService Principal oggetto o (vedere i riferimenti nella parte inferiore di questa pagina)

Negli scenari comuni, questo parametro viene ottenuto con un valore simile (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token a (richiede il modulo Az.Account)

Non specificare UserName, Password o Credential quando si usa questo parametro.

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

-ApplicationIntent

Tipo di carico di lavoro dell'applicazione durante la connessione a un database in un gruppo di disponibilità di SQL Server.

I valori consentiti sono: ReadOnly e ReadWrite.

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

-ApplicationName

Nome dell'applicazione associata alla connessione.

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

-ConnectionString

Specifica un stringa di connessione per connettersi al server.

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

-ConnectionTimeout

Specifica il numero di secondi in cui questo cmdlet viene eseguito il timeout se non riesce a connettersi correttamente a un'istanza del motore di database. Il valore di timeout deve essere un valore integer compreso tra 0 e 65534. Se si specifica 0, non si verifica alcun timeout dei tentativi di connessione.

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

-Credential

L'oggetto PSCredential i cui campi Nome utente e password verranno usati per connettersi all'istanza di SQL.

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

-Database

Specifica il nome di un database. Questo cmdlet si connette a questo database nell'istanza specificata nel parametro ServerInstance.

Se il parametro Database non è specificato, il database utilizzato dipende dal fatto che il percorso corrente specifica sia la cartella SQLSERVER:\SQL che un nome di database. Se il percorso specifica sia la cartella SQL che un nome di database, questo cmdlet si connette al database specificato nel percorso. Se il percorso non è basato sulla cartella SQL o il percorso non contiene un nome di database, questo cmdlet si connette al database predefinito per l'ID di accesso corrente. Se si specifica l'opzione di parametro IgnoreProviderContext, questo cmdlet non considera alcun database specificato nel percorso corrente e si connette al database definito come predefinito per l'ID di accesso corrente.

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

-DedicatedAdministratorConnection

Indica che questo cmdlet usa una connessione amministratore dedicata per connettersi a un'istanza del motore di database.

La connessione DAC viene utilizzata dagli amministratori di sistema per azioni quali la risoluzione dei problemi relativi alle istanze che non accettano nuove connessioni standard.

L'istanza deve essere configurata in modo da supportare le connessioni DAC.

Se l'applicazione livello dati non è abilitata, questo cmdlet segnala un errore e non verrà eseguito.

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

-DisableCommands

Indica che questo cmdlet disattiva alcune funzionalità sqlcmd che potrebbero compromettere la sicurezza durante l'esecuzione nei file batch.

Impedisce Windows PowerShell variabili da passare allo script di Invoke-Sqlcmd.

Lo script di avvio specificato nella variabile di scripting SQLCMDINI non viene eseguito.

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

-DisableVariables

Indica che questo cmdlet ignora le variabili di scripting sqlcmd. Ciò risulta utile quando uno script contiene numerose istruzioni INSERT che possono includere stringhe con lo stesso formato di variabili, ad esempio $(nome_variabile).

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

-Encrypt

Tipo di crittografia da usare durante la connessione a SQL Server.

Questo valore esegue il Encrypt mapping alla proprietà SqlConnectionEncryptOption nell'oggetto SqlConnection del driver Microsoft.Data.SqlClient.

Quando non è specificato, il valore predefinito è Mandatory.

Questo parametro è nuovo nella versione 22 del modulo. Per altre informazioni, vedere Strict Connection Encryption in Collegamenti correlati.

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

-EncryptConnection

Indica che questo cmdlet usa la crittografia SECURE Sockets Layer (SSL/TLS) per la connessione all'istanza del motore di database specificato nel parametro ServerInstance.

A partire dalla versione 22 del modulo, questo parametro è deprecato. Connections sono crittografati per impostazione predefinita. Prendere in considerazione l'uso del nuovo parametro -Encrypt. Per altri dettagli, vedere Strict Connection Encryption in Collegamenti correlati.

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

-ErrorLevel

Specifica che questo cmdlet visualizza solo i messaggi di errore il cui livello di gravità è uguale o superiore al valore specificato. Tutti i messaggi di errore vengono visualizzati se questo parametro non è specificato o impostato su 0. I livelli di gravità degli errori del motore di database sono compresi tra 1 e 24.

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

-FailoverPartner

Nome o indirizzo del server partner a cui connettersi se il server primario è inattivo.

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

-HostName

Specifica il nome di una workstation. Il nome della workstation viene indicato dalla stored procedure di sistema sp_who e nella colonna hostname della vista del catalogo sys.processes. Se questo parametro non viene specificato, il valore predefinito è il nome del computer in cui viene eseguito Invoke-Sqlcmd. Questo parametro può essere usato per identificare sessioni di Invoke-Sqlcmd diverse.

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

-HostNameInCertificate

Nome host da usare per la convalida del certificato TLS/SSL di SQL Server. È necessario passare questo parametro se l'istanza di SQL Server è abilitata per Forza crittografia e si vuole connettersi a un'istanza usando nome host/nome breve. Se questo parametro viene omesso, è necessario passare il nome di dominio completo (FQDN) a -ServerInstance per connettersi a un'istanza di SQL Server abilitata per Forza crittografia.

Questo parametro è nuovo nella versione 22 del modulo. Per altri dettagli, vedere Strict Connection Encryption in Collegamenti correlati.

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

-IgnoreProviderContext

Indica che questo cmdlet ignora il contesto del database stabilito dal percorso SQLSERVER:\SQL corrente. Se il parametro Database non viene specificato, questo cmdlet usa il database predefinito per l'ID di accesso corrente o l'account di Windows.

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

-IncludeSqlUserErrors

Indica che questo cmdlet restituisce errori di script utente SQL che altrimenti vengono ignorati per impostazione predefinita. Se questo parametro viene specificato, questo cmdlet corrisponde al comportamento predefinito dell'utilità sqlcmd.

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

-InputFile

Specifica un file da utilizzare come input della query per questo cmdlet. Il file può contenere istruzioni Transact-SQL, istruzioni XQuery, comandi sqlcmd e variabili di scripting. Specificare il percorso completo del file. Nel percorso o nel nome del file non sono consentiti spazi. Il file deve essere codificato con UTF-8.

È consigliabile eseguire script solo da origini attendibili. Assicurarsi che tutti gli script di input siano protetti con le autorizzazioni NTFS appropriate.

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

-KeyVaultAccessToken

Specifica un token di accesso per gli insiemi di credenziali delle chiavi in Azure Key Vault. Usare questo parametro se una colonna su cui eseguire una query è protetta con Always Encrypted usando una chiave master della colonna archiviata in un insieme di credenziali delle chiavi in Azure Key Vault. In alternativa, è possibile eseguire l'autenticazione in Azure con Add-SqlAzureAuthenticationContext prima di chiamare questo cmdlet.

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

-ManagedHsmAccessToken

Specifica un token di accesso per i moduli di protezione hardware gestiti in Azure Key Vault. Usare questo parametro se una colonna su cui eseguire query è protetta con Always Encrypted usando una chiave master della colonna archiviata in un modulo di protezione hardware gestito in Azure Key Vault. In alternativa, è possibile eseguire l'autenticazione in Azure con Add-SqlAzureAuthenticationContext prima di chiamare questo cmdlet.

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

-MaxBinaryLength

Specifica il numero massimo di byte restituiti per le colonne con tipi di dati stringa binari, ad esempio binary e varbinary. Il valore predefinito è 1.024 byte.

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

-MaxCharLength

Specifica il numero massimo di caratteri restituiti per le colonne con tipi di dati carattere o Unicode, ad esempio char, nchar, varchar e nvarchar. Il valore predefinito è 4.000 caratteri.

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

-MultiSubnetFailover

Se l'applicazione si connette a un gruppo di disponibilità AlwaysOn in subnet diverse, il passaggio di questo parametro fornisce un rilevamento più rapido e la connessione al server attivo (attualmente).

Nota: il passaggio di -MultiSubnetFailover non è necessario con .NET Framework 4.6.1 o versioni successive.

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

-NewPassword

Specifica una nuova password per un ID di accesso per l'autenticazione di SQL Server. Questo cmdlet modifica la password e quindi viene chiusa. È inoltre necessario specificare i parametri Nome utente e Password, con Password che specifica la password corrente per l'account di accesso.

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

-OutputAs

Specifica il tipo dei risultati ottenuti da questo cmdlet.

Se non si specifica un valore per questo parametro, il cmdlet imposta il valore su DataRows.

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

Indica che questo cmdlet visualizza i messaggi di errore nell'output Invoke-Sqlcmd.

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

-Password

Specifica la password per l'ID di accesso SQL Server autenticazione specificato nel parametro Username. Per le password viene fatta distinzione tra maiuscole e minuscole. Se possibile, usare l'autenticazione di Windows. Non utilizzare una password vuota e se possibile utilizzare una password complessa.

Se si specifica il parametro Password seguito dalla password, la password è visibile a chiunque possa visualizzare il monitoraggio.

Se si codifica la password seguita dalla password in uno script di .ps1, chiunque legge il file di script visualizzerà la password.

Assegnare le autorizzazioni NTFS appropriate al file per impedire ad altri utenti di leggere il file.

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

-Query

Specifica una o più query eseguite da questo cmdlet. Le query possono essere istruzioni Transact-SQL o XQuery oppure comandi sqlcmd. È possibile specificare più query separandole con punti e virgola. Non utilizzare il separatore sqlcmd GO. Utilizzare caratteri di escape per tutte le virgolette doppie (") incluse nella stringa. Provare a utilizzare identificatori tra parentesi, ad esempio [MyTable], anziché identificatori delimitati come "MyTable".

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

-QueryTimeout

Specifica il numero di secondi prima del timeout delle query. Se non viene specificato un valore di timeout, le query non timeout. Il timeout deve essere un valore intero compreso tra 1 e 65535.

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

-ServerInstance

Specifica una stringa di caratteri o un oggetto SMO (Management Objects) SQL Server che specifica il nome di un'istanza del motore di database. Per le istanze predefinite, specificare solo il nome del computer MyComputer. Per le istanze denominate, usare il formato NomeComputer\NomeIstanza.

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

-SeverityLevel

Specifica il limite inferiore per il livello di gravità del messaggio di errore che questo cmdlet restituisce alla variabile Windows PowerShell ERRORLEVEL.

Questo cmdlet restituisce il livello di gravità più alto dai messaggi di errore generati dalle query eseguite, a condizione che la gravità sia uguale o superiore a quella specificata nel parametro SeverityLevel.

Se SeverityLevel non è specificato o impostato su 0, questo cmdlet restituisce 0 a ERRORLEVEL.

I livelli di gravità dei messaggi di errore del motore di database sono compresi tra 1 e 24.

Questo cmdlet non segnala i livelli di gravità per i messaggi informativi con gravità pari a 10

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

-StatisticsVariable

Specificare il nome di una variabile di PowerShell a cui verranno assegnate le statistiche di runtime SQL Server quando viene eseguito il cmdlet.

L'uso comune per questo parametro consiste nell'acquisire ( ExecutionTime la quantità cumulativa di tempo (in millisecondi) usata dal provider per l'elaborazione del cmdlet o IduRows (il numero totale di righe interessate dalle istruzioni INSERT, DELETE e UPDATE).

Per altre informazioni, vedere Statistiche provider per SQL Server.

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

-SuppressProviderContextWarning

Indica che questo cmdlet elimina l'avviso che questo cmdlet ha usato nel contesto del database dall'impostazione corrente del percorso SQLSERVER:\SQL per stabilire il contesto del database per il cmdlet.

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

-TrustServerCertificate

Indica se il canale verrà crittografato durante il bypass della catena di certificati per convalidare l'attendibilità.

Questo parametro è nuovo nella versione 22 del modulo. Per altri dettagli, vedere Strict Connection Encryption in Collegamenti correlati.

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

-Username

Specifica l'ID di accesso per stabilire una connessione mediante l'autenticazione di SQL Server a un'istanza del motore di database.

La password deve essere specificata tramite il parametro Password.

Se nome utente e password non sono specificati, questo cmdlet tenta una connessione di autenticazione di Windows usando l'account di Windows che esegue la sessione di Windows PowerShell. Se possibile, usare l'autenticazione di Windows.

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

-Variable

Specifica un set di variabili di scripting sqlcmd da usare nello script sqlcmd e imposta un valore per le variabili.

Usare una matrice Windows PowerShell per specificare più variabili e i relativi valori. In alternativa, usare un oggetto Hashtable in cui la chiave rappresenta il nome della variabile e il valore della variabile.

Quando si usa una matrice, i valori dei parametri vengono tagliati. Questo comportamento è stato mantenuto nella versione 22 del modulo per la compatibilità con le versioni precedenti con la versione 21. È consigliabile non basarsi su questo comportamento, che potrebbe cambiare in una versione principale futura del modulo.

Il parametro di tipo Hashtable è disponibile solo nella versione 22+ del modulo.

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

Input

System.Management.Automation.PSObject

Output

System.Object