Sql server 如何从存储过程执行PowerShell文件
如何从存储过程内部执行PowerShell文件 我没有幸从存储过程中执行PowerShell文件Sql server 如何从存储过程执行PowerShell文件,sql-server,powershell,stored-procedures,Sql Server,Powershell,Stored Procedures,如何从存储过程内部执行PowerShell文件 我没有幸从存储过程中执行PowerShell文件 exec xp_cmdshell 'powershell ""E:\PowershellScripts\todayErrorLog.ps1""' 当我运行存储过程时,如果文件中出现错误,则拒绝访问。我知道ps1文件本身很好,因为我可以在命令行和代理作业中执行它。所以我认为这是一个给予存储过程足够权限的问题 在此之前,我确保使用此脚本启用xp\u cmdshell -- To allow adva
exec xp_cmdshell 'powershell ""E:\PowershellScripts\todayErrorLog.ps1""'
当我运行存储过程时,如果文件中出现错误,则拒绝访问。我知道ps1文件本身很好,因为我可以在命令行和代理作业中执行它。所以我认为这是一个给予存储过程足够权限的问题
在此之前,我确保使用此脚本启用xp\u cmdshell
-- 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
为了从存储过程执行PowerShell脚本文件,我还需要做什么
这是存储过程:
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) 您可以从命令行运行PS (2) 无法从xp\u cmdshell中运行脚本 (3) 将包含该文件的文件夹更改为由所有人完全控制 (4) 尝试通过xp\u cmdshell运行脚本
或者,对于测试,您可以将运行的登录SQL代理更改为您的凭据。然后代理以“您”的身份运行,就像您在命令行上运行一样。您的问题是代理使用的帐户没有足够的权限访问该文件 如何检查: (1) 您可以从命令行运行PS (2) 无法从xp\u cmdshell中运行脚本 (3) 将包含该文件的文件夹更改为由所有人完全控制 (4) 尝试通过xp\u cmdshell运行脚本
或者,对于测试,您可以将运行的登录SQL代理更改为您的凭据。然后代理以“您”的身份运行,就像您在命令行上运行一样。您是否考虑过只从存储过程中执行您提到的SQLAgent作业?我从未尝试过从proc直接运行powershell,但我已经从proc中执行了代理作业,这里有大量的示例和在线帮助来实现这一点。这都是因为:。有人建议我将代理作业转换为存储过程,这样我的MVC控制器就可以知道该过程何时完成。您是否考虑过只在存储过程中执行您提到的SQLAgent作业?我从未尝试过从proc直接运行powershell,但我已经从proc中执行了代理作业,这里有大量的示例和在线帮助来实现这一点。这都是因为:。有人建议我将我的代理作业转换为存储过程,这样我的MVC控制器就可以知道该过程何时完成。当我尝试在存储过程中执行文件时,我遇到了问题。代理是否能够将其作为计划作业运行(而不是通过SMS以交互方式运行)?通过SMS以交互方式运行作业使用您的登录凭据,而不是代理凭据。我可以将其作为计划作业运行--根本问题是,我希望能够使用MVC控制器方法触发代理作业按需运行,并在作业完成后刷新视图。我被告知需要运行存储过程而不是作业,存储过程异步运行作业,并且在作业完成时不会通知我。代理运行它没有问题。当我尝试在存储过程中执行文件时,我遇到了问题。代理是否能够将其作为计划作业运行(而不是通过SMS以交互方式运行)?通过SMS以交互方式运行作业使用您的登录凭据,而不是代理凭据。我可以将其作为计划作业运行--根本问题是,我希望能够使用MVC控制器方法触发代理作业按需运行,并在作业完成后刷新视图。我被告知需要运行存储过程而不是作业,存储过程异步运行作业,并且在作业完成时不会通知我。