Gre*_*reg 9 sql-server powershell sql-server-2012 sql-server-agent jobs
我有一个通过 SQL Server 代理(运行 SQL Server 2012 Enterprise)运行的 SQL 作业。作业的最后一步是运行位于网络共享上的应用程序。不幸的是,我不知道应用程序所在文件夹的名称(文件夹是版本号),所以我使用 PowerShell 来查找它:
set-location "\\server\companydocuments\MyApp\Application Files\"
$name = Get-ChildItem | sort name -desc | select -f 1 | select name
cd $name.name
& ".\Application.exe"
Run Code Online (Sandbox Code Playgroud)
如果我在 SQL Server 上打开一个 PowerShell 窗口,那么它工作正常。当我在 SQL Server 代理中运行它时,出现以下错误:
A job step received an error at line 1 in a PowerShell script.
The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'"
Run Code Online (Sandbox Code Playgroud)
我认为这可能是权限问题,所以我尝试在我的凭据下运行 SQL Server 代理(它是测试服务器,而不是生产服务器),但我仍然遇到相同的错误。我还尝试将网络驱动器映射到共享文件夹而不是 UNC 路径,但出现相同的错误。
谁能建议我如何连接到这个文件夹?
小智 9
我相信您的问题将是SQLPS
提供商。由于 SQL Server 代理中的 PowerShell 步骤会自动将您置于该提供程序的上下文中,因此在您的普通控制台中运行的某些命令将不会以相同的方式运行。写起来做此用Set-Location
。您基本上必须告诉SQLPS
您要使用的提供程序。
您的代码如下所示:
set-location -Path Microsoft.PowerShell.Core\FileSystem::"\\server\companydocuments\MyApp\Application Files\"
Run Code Online (Sandbox Code Playgroud)
如果您想,您也可以将其余部分包装成两行:
cd (Get-ChildItem | Sort-Object name -Descending | Select name -First 1).name
& ".\Application.exe"
Run Code Online (Sandbox Code Playgroud)