如何从存储过程中执行PowerShell文件?
我没有幸运从存储过程中执行PowerShell文件。
exec xp_cmdshell 'powershell ""E:\PowershellScripts\todayErrorLog.ps1""'
当我运行存储过程时,我得到访问被拒绝的文件错误。我知道ps1文件本身很好,因为我可以在命令行和代理作业上执行它。所以我认为这是给存储过程足够的权限。
以前,我确保使用此脚本启用xp_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
答案 0 :(得分:0)
您的问题是因为代理正在使用的帐户没有足够的权限来访问该文件。
如何检查:
(1)您可以从命令行运行PS (2)您无法在xp_cmdshell中运行该脚本 (3)将包含该文件的文件夹更改为Everyone完全控制 (4)尝试通过xp_cmdshell运行脚本
或者,对于测试,您可以将正在运行的SQL代理登录到您的凭据。然后代理运行为"你",就像在命令行上运行一样。