web-dev-qa-db-fra.com

Commandement PowerShell 'Nouveau-Item' échoue lorsqu'il est invoqué via le travail d'agent SQL Server

J'ai le script PowerShell suivant pour créer un dossier à un emplacement d'action. La part a des autorisations de contrôle intégralement pour tout le monde. J'ai accordé toutes les autorisations pour les tests.

Le problème est le script fonctionne bien lorsque j'exécute manuellement. Il s'exécute également bien lorsque je l'exécute en tant que compte SQL Server Agent Service. Mais le même script échoue lorsque j'essaie d'exécuter dans le cadre du travail de SQL Server Agent. Est-ce que j'ai râté quelque chose?

$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.
2
sqlcheckpoint

Lorsque vous accédez à des chemins UNC ou à tout "emplacement" qui n'est pas un lecteur local (c'est-à-dire registre), à ​​partir d'une étape de travail PowerShell, vous devez préfixer le chemin avec Microsoft.PowerShell.Core\FileSystem::. Cela indique à SQLPS quel fournisseur à utiliser, ce qui n'est pas requis dans la normale PowerShell mais est requis dans la mise en œuvre du serveur SQL.

Vous pouvez également modifier le répertoire à l'avance à l'avance sur un lecteur local (CD C :) et il devrait ensuite fonctionner sans préfixer le nom du fournisseur, mais vous voudrez peut-être rester dans la valeur par défaut SQLSERVER:\SQL\SERVERNAME\INSTANCENAME Chemin selon le besoin de votre script.

Plus d'informations:

https://dbatools.io/agent/

https://social.technet.microsoft.com/forums/windowsserver/en-us/ec7f3ae8-d196-459e-b9dc-e6ed0df93004/Running-powershell-from-sql-server-utilisateur-un-paths

7
HandyD