Eu tenho o seguinte script do PowerShell para criar uma pasta em um local de compartilhamento. O compartilhamento tem permissões de controle total para todos. Eu concedi todas as permissões para testes.
O problema é que o script funciona bem quando executo manualmente. Ele também funciona bem quando eu o executo como conta de serviço do SQL Server Agent. Mas o mesmo script falha quando tento executar como parte do trabalho do SQL Server Agent. Estou faltando alguma coisa aqui?
$path = "\\server\shared\path\01222020"
New-Item -path $path -ItemType Directory -Force
Exception:
Date 1/22/2020 5:25:10 PM
Log Job History (test)
Step ID 1
Server serverA
Job Name Test
Step Name Test
Duration 00:00:01
Sql Severity 0
Sql Message ID 0
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 0
Message
Executed as user: domain\agent_service_account. A job step received an error at
line 9 in a PowerShell script. The corresponding line is 'New-Item -path $path
-ItemType Directory '. Correct the script and reschedule the job. The error
information returned by PowerShell is: 'Invalid Path:
'\\server\shared\path\01222020'. '. Process Exit Code -1. The step failed.
Ao acessar caminhos UNC ou qualquer 'local' que não seja uma unidade local (ou seja, registro), a partir de uma etapa de trabalho do PowerShell, você precisa prefixar o caminho com
Microsoft.PowerShell.Core\FileSystem::
. Isso informa ao SQLPS qual provedor usar, o que não é necessário no PowerShell normal, mas é necessário na implementação do SQL Server.Alternativamente, você pode alterar o diretório de antemão para uma unidade local (cd C:) e deve funcionar sem prefixar o nome do provedor, mas você pode querer permanecer no caminho padrão
SQLSERVER:\SQL\SERVERNAME\INSTANCENAME
dependendo do que seu script requer.Mais informações:
https://dbatools.io/agent/
https://social.technet.microsoft.com/Forums/windowsserver/en-US/ec7f3ae8-d196-459e-b9dc-e6ed0df93004/running-powershell-from-sql-server-using-unc-paths
sqlcheckpoint,
Por favor, dê uma olhada no link abaixo, que descreve quais módulos do Powershell são usados pelo SQL Agent. É SQLPS ou SqlServer dependendo da sua versão do SQL Server.
https://learn.microsoft.com/en-us/sql/powershell/run-windows-powershell-steps-in-sql-server-agent?view=sql-server-ver15
É muito provável que o cmdlet New-Item não seja encontrado no módulo powershell usado pelo SQLAgent.
Você pode criar um trabalho SQLAgent com uma etapa CmdExec, que por sua vez chama powershell.exe.
powershell.exe -ExecutionPolicy ByPass -NoProfile -File PATH_TO_YOUR_SCRIPT
Veja o link abaixo para todas as opções/parâmetros para powershell.exe
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_powershell_exe?view=powershell-5.1