SQL ServerエージェントでのPowershellスクリプトの実行エラー


9

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パスの代わりにネットワークドライブを共有フォルダーにマッピングしようとしましたが、同じエラーが発生しました。

誰かがこのフォルダに接続する方法を提案できますか?

回答:


9

あなたの問題はSQLPSプロバイダーになると思います。SQL ServerエージェントでのPowerShellステップにより、自動的にそのプロバイダーのコンテキストに入るので、通常のコンソールで機能する一部のコマンドは同じように機能しません。ここでは、で書き込みが行われまし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"

@ShawnMeltonリモートサーバーでのPowerShellコマンドの実行についてはどうですか?dba.stackexchange.com/questions/83068/...
マルチェロMiorelli

これと同じ問題がありcd c:、スクリプトの冒頭でa を実行すると、コンテキスト/場所の問題がソートされました。次に、すべてのUNCパスが期待どおりに機能しました。
James Khoury

cd c:はを使用するエイリアスSet-Location C:であるため、同じコマンドです。

2

もう1つの方法は、オペレーティングシステムコマンドを使用して、powershell.exe c:/path/script.ps1をコマンドとして指定し、スクリプトをscript.ps1に保存することです。これにより、プロバイダーを使用する代わりにOS powershellを使用できるようになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.