SQL Serverエージェント(SQL Server 2012 Enterpriseの実行)を介して実行されるSQLジョブがあります。ジョブの最後のステップは、ネットワーク共有にあるアプリケーションを実行することです。残念ながら、アプリケーションが入っているフォルダーの名前(フォルダーはバージョン番号です)がわからないので、PowerShellを使用して検索します。
set-location "\\server\companydocuments\MyApp\Application Files\"
$name = Get-ChildItem | sort name -desc | select -f 1 | select name
cd $name.name
& ".\Application.exe"
SQL ServerでPowerShellウィンドウを開くと、正常に動作します。 SQL Serverエージェントでこれを実行すると、次のエラーが発生します。
A job step received an error at line 1 in a PowerShell script.
The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'"
アクセス許可の問題かもしれないと思ったので、資格情報(運用サーバーではなくテストサーバー)でSQL Serverエージェントを実行してみましたが、それでも同じエラーが発生します。 UNCパスの代わりに共有ドライブにネットワークドライブをマッピングしようとしましたが、同じエラーが発生しました。
誰でも私がこのフォルダに接続する方法を提案できますか?
あなたの問題はSQLPS
プロバイダーになると思います。 SQL ServerエージェントでのPowerShellステップにより、自動的にそのプロバイダーのコンテキストに入るので、通常のコンソールで機能する一部のコマンドは同じように機能しません。書き込みが行われました here with Set-Location
。基本的には、使用するプロバイダーをSQLPS
に通知する必要があります。
コードは次のようになります。
set-location -Path Microsoft.PowerShell.Core\FileSystem::"\\server\companydocuments\MyApp\Application Files\"
必要に応じて、残りを2行にラップすることもできます。
cd (Get-ChildItem | Sort-Object name -Descending | Select name -First 1).name
& ".\Application.exe"
もう1つの方法は、オペレーティングシステムコマンドを使用して、powershell.exe c:/path/script.ps1をコマンドとして指定し、スクリプトをscript.ps1に保存することです。これにより、プロバイダーを使用する代わりにOS powershellを使用できるようになります。