2016-07-28 7 views
1

Wie führe ich eine PowerShell-Datei aus einer gespeicherten Prozedur aus?So führen Sie eine PowerShell-Datei aus der gespeicherten Prozedur aus

Ich hatte kein Glück, die PowerShell-Datei innerhalb einer gespeicherten Prozedur auszuführen.

Wenn ich die gespeicherte Prozedur ausführen, bekomme ich Zugriff verweigert Fehler in der Datei. Ich weiß, dass die ps1-Datei selbst gut ist, weil ich sie sowohl in der Befehlszeile als auch als Agent-Job ausführen kann. Ich denke, es geht darum, der gespeicherten Prozedur ausreichende Berechtigungen zu geben.

Access denied errors

Früher stellte ich sicher, xp_cmdshell mit diesem Skript aktivieren

-- To allow advanced options to be changed. 
EXEC sp_configure 'show advanced options', 1; 
GO 

-- To update the currently configured value for advanced options. 
RECONFIGURE; 
GO 

-- To enable the feature. 
EXEC sp_configure 'xp_cmdshell', 1; 
GO 

-- To update the currently configured value for this feature. 
RECONFIGURE; 
GO 

Was muss ich tun müssen, um das Powershell-Skript-Datei aus der gespeicherten Prozedur ausführen?

Dies ist die gespeicherte Prozedur:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[RefreshErrorQuery] 
    -- No parameters  
AS 
BEGIN 
    SET NOCOUNT ON; 
    -- Step 1 
    exec xp_cmdshell 'powershell ""E:\PowershellScripts\todayErrorLog.ps1""' 

    -- Step 2: TODO: Run SSIS package 
END 
+1

Haben Sie darüber nachgedacht, nur den SQLAgent-Job auszuführen, den Sie in der gespeicherten Prozedur erwähnt haben? Ich habe nie versucht, Powershell direkt von einem Proc auszuführen, aber ich habe Agentenjobs innerhalb eines Procs ausgeführt, und es gibt reichlich Beispiele, sowohl hier als auch in der Online-Hilfe, um das zu tun. –

+1

Es ist alles nur deshalb: http://stackoverflow.com/questions/38624228/trigger-stored-procedure-from-view-and-refresh-view-after-stored-procedure-compl. Ein Vorschlag war, dass ich meinen Agent-Job in eine gespeicherte Prozedur umwandelte, damit mein MVC-Controller wissen konnte, wann der Prozess beendet war. –

Antwort

0

Ihr Problem ist, weil das Konto, dass der Agent über ausreichende Berechtigungen nicht verwendet die Datei zuzugreifen.

Wie überprüfen:

(1) Sie können PS ausgeführt von der Kommandozeile (2) Sie können das Skript nicht aus xp_cmdshell ausführen (3) Ändern Sie den Ordner die Datei auf die volle Kontrolle durch Jeder enthält (4) Versuchen Sie, das Skript über xp_cmdshell auszuführen.

Alternativ können Sie für einen Test die Anmeldung, unter der SQL Agent ausgeführt wird, unter Ihren Anmeldeinformationen ändern. Dann wird der Agent als "Sie" ausgeführt, genauso wie wenn Sie in der Befehlszeile ausgeführt werden.

+0

Agent hat kein Problem damit. Wenn ich versuche, die Datei in einer gespeicherten Prozedur auszuführen, habe ich das Problem. –

+0

Kann der Agent ihn als geplanten Job ausführen (statt ihn interaktiv über SMS auszuführen)? Wenn Sie den Job interaktiv über SMS ausführen, werden Ihre Anmeldeinformationen anstelle der Anmeldeinformationen des Agenten verwendet. –

+0

Ich kann es als einen geplanten Job ausführen - das zugrunde liegende Problem ist, dass ich gerne eine MVC-Controller-Methode verwenden könnte, um einen Agent-Job auszulösen, um bei Bedarf zu starten und die Ansicht zu aktualisieren, sobald der Job erledigt ist. Mir wurde gesagt, dass ich eine gespeicherte Prozedur anstelle eines Jobs ausführen muss, und die gespeicherte Prozedur führt den Job asynchron aus und informiert mich nicht, wenn es abgeschlossen ist. –