Wie zum ausführen einer PowerShell-Datei, die von der gespeicherten Prozedur

Wie führe ich ein PowerShell-Datei aus innerhalb einer gespeicherten Prozedur?

Habe ich kein Glück gehabt Ausführung der PowerShell-Datei aus einer gespeicherten Prozedur.

exec xp_cmdshell 'powershell ""E:\PowershellScripts\todayErrorLog.ps1""'

Wenn ich die gespeicherte Prozedur auszuführen, bekomme ich Zugriff verweigert Fehler auf die Datei. Ich kenne die ps1-Datei selbst ist gut, da kann ich es ausführen auf der Kommandozeile und als Agent-Auftrag. So dass ich vermute, es ist eine Frage des geben die gespeicherte Prozedur ausreichende Berechtigungen.

Wie zum ausführen einer PowerShell-Datei, die von der gespeicherten Prozedur

Zuvor, machte ich sicher, dass xp_cmdshell mit diesem script

-- 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 sonst noch tun, um führen Sie die PowerShell-Skript-Datei, die von der gespeicherten Prozedur?

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
Haben Sie berücksichtigt, nur ausgeführt, dass die SQLAgent-Auftrag, den Sie von erwähnt in der gespeicherten Prozedur? Ich habe nie versucht, ausführen von powershell-direkt vom proc, aber ich habe ausgeführt-agent-Aufträge innerhalb von proc und es gibt genügend Beispiele sowohl hier als einen in on-line-Hilfe zu tun.
Es ist alles wegen dieses: stackoverflow.com/questions/38624228/.... Ein Vorschlag war, dass ich meine konvertieren-Agent-Auftrag in eine gespeicherte Prozedur, so mein MVC-controller konnte wissen, Wann der Prozess fertig war.

InformationsquelleAutor | 2016-07-28

Schreibe einen Kommentar