2016-06-02 7 views
0

Ich habe eine Batch-Datei, die ein SQL-Skript aufruft, um eine E-Mail zu senden. Diese Batchdatei ist in eine Powershell eingebettet. Wie gebe ich einen Erfolgs- oder Fehlerrückgabecode von der Batchdatei an die Powershell zurück? Ich habe folgendes versuchtRückgabewert von Batch-Datei an Powershell

In Batch-Datei

exit /b %ERRORLEVEL% 

In Power

cmd.exe /c 'C:\scripts\send_email_sp_prd.bat F' 
if($LastExitCode -eq -0){ 
write-host "Success" 
} 
else 
{ 
write-host "Failure" 
} 

Auch wenn das SQL-Skript fehlschlägt, wird die Batch-Dateien einen Wert von 0 Rückkehr das ist nicht das, was ich will . Gibt es einen besseren/richtigen Weg, dies zu tun?

+1

Stoppen Sie die Einbettung von Batchdateien in Ihre Powershell und tun Sie einfach alles in Powershell. – TheMadTechnician

Antwort

1

Persönlich würde ich die Batch-Datei beseitigen und dies alles über PowerShell tun, wird dies in Bezug auf die Manipulation oder Validierung gegen Befehlsausgabe viel einfacher sein. Installieren Sie im Installationsprogramm für SQL Management Studio auf der Featureauswahl "Management Tools", um das PowerShell-Modul zu erhalten. Sobald das Modul installiert wurde, können Sie ein Skript erstellen, um Ihren Auftrag auszuführen. Hier ist etwas, das ich schnell erstellt, aber Sie könnten wahrscheinlich ähnlich dieser oder etwas verwenden:

Function Invoke-Sqljob { 

[CmdletBinding()] 
param(
    [Parameter(Mandatory=$true)] 
    [String[]] $ServerInstance, 

    [Parameter(Mandatory=$true)] 
    [String[]] $DatabaseName, 

    [Parameter(Mandatory=$true)] 
    [String[]] $Query 
    ) 

Import-Module SQLPS 

Invoke-Sqlcmd -ServerInstance "$ServerInstance" -Database "$DatabaseName" -Query "$Query" 

} 

Sie würden ausführen Invoke-Sqljob wie folgt:

Invoke-Sqljob -ServerInstance "DB_Server\SQL_Instance" -Database "DB_Name_Here" -Query "EXEC send_mail_sp_prd" 

Wenn Sie nicht in der Lage sind oder lieber die SQL-Authentifizierung verwenden Sie könnten die Parameter -Username und -Password des Cmdlets Invoke-Sqlcmd verwenden.

Hoffe das hilft Ihnen Problem zu lösen.

+0

Danke Tyler und Entschuldigung für die verzögerte Antwort. Dies war ein Teil des Codes, der von jemand anderem geschrieben wurde, und ich wollte ihn nicht zu sehr ändern, aber am Ende habe ich alles von Stapel auf PowerShell geändert. –

+0

Kein Problem Vibhav MS, ich bin froh, dass Sie alles in PowerShell konvertieren und arbeiten konnten! –

1

Ich bin nicht sicher, ob Ihr Beitrag ist das Skript, wörtlich, aber Sie haben ein - vor der 0. Versuchen Sie, die erste Zeile des wenn Block $ lastexitcode -eq 0

if($LastExitCode -eq 0){ 
    write-host "Success" 
} 
else 
{ 
    write-host "Failure" 
} 
Wechsel
+0

Danke für das Hinweisen, aber das war Typ, als ich es hier eingegeben habe. –