共有場所にフォルダーを作成する次の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.
PowerShellジョブステップからUNCパス、またはローカルドライブではない「場所」(レジストリなど)にアクセスする場合は、パスの前にMicrosoft.PowerShell.Core\FileSystem::
を付ける必要があります。これにより、使用するプロバイダーがSQLPSに通知されます。これは、通常のPowerShellでは必要ありませんが、SQL Serverの実装では必須です。
または、事前にディレクトリをローカルドライブ(cd C :)に変更すると、プロバイダー名のプレフィックスを付けなくても機能しますが、スクリプトが必要とするものによっては、デフォルトのSQLSERVER:\SQL\SERVERNAME\INSTANCENAME
パスをそのまま使用することもできます。
より詳しい情報: