Error al ejecutar Powershell Script en el Agente SQL Server


9

Tengo un trabajo SQL que se ejecuta a través del Agente SQL Server (Ejecución de SQL Server 2012 Enterprise). El último paso del trabajo es ejecutar una aplicación ubicada en un recurso compartido de red. Desafortunadamente, no sé el nombre de la carpeta en la que se encuentra la aplicación (la carpeta es el número de versión), así que estoy usando PowerShell para encontrarlo:

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

Si abro una ventana de PowerShell en SQL Server, entonces funciona bien. Cuando ejecuto esto en el Agente SQL Server, aparece el siguiente error:

A job step received an error at line 1 in a PowerShell script.
The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'"

Pensé que podría ser un problema de permisos, así que probé el Agente SQL Server que se ejecuta con mis credenciales (es un servidor de prueba, no de producción) pero sigo teniendo el mismo error. También he intentado asignar una unidad de red a la carpeta compartida en lugar de rutas UNC, pero el mismo error.

¿Alguien puede sugerir cómo puedo conectarme a esta carpeta?

Respuestas:


9

Creo que su problema será el SQLPSproveedor. Dado que los pasos de PowerShell en el Agente SQL Server lo ubican automáticamente en el contexto de ese proveedor, algunos comandos que funcionan en su consola normal no funcionarán de la misma manera. Aquí se realizó una redacción con Set-Location. Básicamente, debe decirle SQLPSal proveedor que desea usar.

Su código se vería como a continuación:

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

También podría envolver el resto en dos líneas si quisiera:


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

@ShawnMelton, ¿qué pasa con la ejecución de comandos de PowerShell en un servidor remoto? dba.stackexchange.com/questions/83068/…
Marcello Miorelli

Hemos tenido este mismo problema y descubrimos que hacer un cd c:al comienzo del script solucionó el problema de contexto / ubicación. Entonces, todas las rutas UNC funcionaron como se esperaba.
James Khoury

cd c:es un alias para usar Set-Location C:, por lo que es el mismo comando.

2

La otra alternativa sería usar el comando del sistema operativo y dar powershell.exe c: /path/script.ps1 como comando y guardar su script en script.ps1. Esto asegurará el uso de OS PowerShell en lugar de usar el proveedor.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.