在SQL Server代理中运行Powershell脚本时出错


9

我有一个通过SQL Server代理运行的SQL作业(正在运行SQL Server 2012 Enterprise)。作业的最后一步是运行位于网络共享上的应用程序。不幸的是,我不知道应用程序所在的文件夹的名称(该文件夹是版本号),因此我正在使用PowerShell查找它:

set-location "\\server\companydocuments\MyApp\Application Files\"
$name = Get-ChildItem | sort name -desc | select -f 1 | select name
cd $name.name
& ".\Application.exe"

如果我在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\'"

我以为这可能是权限问题,所以我尝试在我的凭据(这是测试服务器,不是生产服务器)下运行SQL Server代理,但仍然遇到相同的错误。我也尝试过将网络驱动器映射到共享文件夹而不是UNC路径,但是存在相同的错误。

谁能建议我如何连接到该文件夹​​?

Answers:


9

我相信您的问题将是SQLPS提供商。由于SQL Server Agent中的PowerShell步骤会自动将您置于该提供程序的上下文中,因此在常规控制台中运行的某些命令将无法以相同的方式起作用。写起来做Set-Location。您基本上必须告诉SQLPS提供者您要使用。

您的代码如下所示:

set-location -Path Microsoft.PowerShell.Core\FileSystem::"\\server\companydocuments\MyApp\Application Files\"

如果需要,还可以将其余部分包装成两行:


cd (Get-ChildItem | Sort-Object name -Descending | Select name -First 1).name
& ".\Application.exe"

@ShawnMelton如何在远程服务器上运行powershell命令?dba.stackexchange.com/questions/83068/...
马塞罗Miorelli

我们也遇到了同样的问题,并发cd c:现在脚本开始时对上下文/位置问题进行了排序。然后,所有UNC路径都按预期工作。
James Khoury

cd c:是using的别名Set-Location C:,因此它是同一命令。

2

另一种选择是使用操作系统命令,并将powershell.exe c:/path/script.ps1作为命令,然后将脚本保存在script.ps1中。这将确保使用操作系统Powershell而不是使用提供程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.