Comment exécuter sqlcmd à partir de powershell?
J'ai une chaîne de caractères dans powershell, qui contient un natif de commande sqlcmd. La commande peut être exécutée avec succès dans cmd.exe. J'ai de la difficulté à les mettre en powershell. Quelqu'un peut aider? Merci.
C'est sql.sql
select @@servername
go
select @@servicename
C'est le résultat quand j'execute la commande sqlcmd de cmd.exe
C:\Users\test>sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
--------------------------------------------------
thesimpsons\INSTANCE1
(1 rows affected)
--------------------------------------------------
INSTANCE1
(1 rows affected)
C:\Users\test>
C'est le script powershell pour appeler la commande sqlcmd.
$sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
"@
Invoke-Command $sql
Lorsque j'exécute ce script powershell, j'ai obtenu l'erreur suivante.
PS C:\TEMP> $sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
"@
Invoke-Command $sql
Invoke-Command : Parameter set cannot be resolved using the specified named parame
ters.
At line:5 char:15
+ Invoke-Command <<<< $sql
+ CategoryInfo : InvalidArgument: (:) [Invoke-Command], ParameterBin
dingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands
.InvokeCommandCommand
Vous devez vous connecter pour publier un commentaire.
À l'appel d'un exécutable Win32 vous souhaitez utiliser l'opérateur d'appel
&
comme ceci:Vous pouvez également arrêter l'utilisation de l'externe 'SQLCMD.EXE" et utiliser le Invoquer-applet de commande Sqlcmd à la place:
Il suffit d'ouvrir le "sqlps de" l'utilité et l'exécuter
Veuillez voir L'exécution de SQL Server PowerShell
Vous pouvez également charger les composants logiciels enfichables SQL Server manuellement dans PowerShell avant d'utiliser 'Invoke-Sqlcmd';
pour MS SQL Server 2012, vous pouvez le faire en cours d'exécution
Import-Module SqlPs
C'est la manière dont je construis certains des alias de commande dans mes scripts
Vous pouvez ensuite utiliser $args variable à l'intérieur d'elle et même de commencer il remotly.
Remarque :
Cela permet de commenter chaque param.
Attention de ne pas oublier un "`" et pas d'espace après eux, où ils sont à la fin de la ligne.
Utilisation
Invoke-Expression
plutôt queInvoke-Command
Le premier paramètre de position de la commande invoke-command est -scriptblock, et il s'attend à un bloc de script argument. Pour profiter d'une chaîne ici pour construire la commande, puis l'exécuter avec la commande invoke-command, vous avez besoin de convertir la chaîne ici pour un bloc de script:
À la fois le nom de l'instance et le nom d'utilisateur doit être pleinement qualifié
<domain_name>\Instanc_name
et<domai_name>\Username
. Seulement votre nom d'instance est correctement écrits.C'est ce qui a fonctionné pour moi pour l'utilisation de l'utilitaire sqlcmd de l'intérieur le script powershell à l'aide de l' & opérateur, voir l'exemple de générer un fichier csv:
$sv
a serveur de nom commeSERVERNAME\INSTANCE
$PROCFILE
est commed:\TSTSQL\Sqlquery.SQL
$filename
estd:\TSTSQL\Desiredoutfilename.CSV
$dbclean
est un paramètre passé pour le fichier sql