web-dev-qa-db-ja.com

PowerShellコマンド 'New-Item'がSQL Serverエージェントジョブから呼び出されると失敗する

共有場所にフォルダーを作成する次のPowerShellスクリプトがあります。共有には、すべてのユーザーに対するフルコントロールのアクセス許可があります。テストのためのすべての許可を与えました。

問題は、スクリプトを手動で実行すると正常に動作することです。 SQL Serverエージェントサービスアカウントとして実行すると、問題なく実行されます。しかし、SQL Serverエージェントジョブの一部として実行しようとすると、同じスクリプトが失敗します。ここで何か不足していますか?

$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

PowerShellジョブステップからUNCパス、またはローカルドライブではない「場所」(レジストリなど)にアクセスする場合は、パスの前にMicrosoft.PowerShell.Core\FileSystem::を付ける必要があります。これにより、使用するプロバイダーがSQLPSに通知されます。これは、通常のPowerShellでは必要ありませんが、SQL Serverの実装では必須です。

または、事前にディレクトリをローカルドライブ(cd C :)に変更すると、プロバイダー名のプレフィックスを付けなくても機能しますが、スクリプトが必要とするものによっては、デフォルトのSQLSERVER:\SQL\SERVERNAME\INSTANCENAMEパスをそのまま使用することもできます。

より詳しい情報:

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

7
HandyD