Kesalahan menjalankan Powershell Script di SQL Server Agent

9

Saya memiliki pekerjaan SQL yang berjalan melalui SQL Server Agent (Menjalankan SQL Server 2012 Enterprise). Langkah terakhir dari pekerjaan ini adalah menjalankan aplikasi yang terletak di jaringan berbagi. Sayangnya saya tidak tahu nama folder tempat aplikasi tersebut berada (folder tersebut adalah nomor versi), jadi saya menggunakan PowerShell untuk menemukannya:

set-location "\\server\companydocuments\MyApp\Application Files\"
$name = Get-ChildItem | sort name -desc | select -f 1 | select name
cd $name.name
& ".\Application.exe"

Jika saya membuka jendela PowerShell pada SQL Server maka itu berfungsi dengan baik. Ketika saya menjalankan ini di SQL Server Agent saya mendapatkan kesalahan berikut:

A job step received an error at line 1 in a PowerShell script.
The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'"

Saya pikir itu mungkin masalah izin jadi saya sudah mencoba SQL Server Agent berjalan di bawah kredensial saya (ini adalah server pengujian, bukan produksi) tapi saya masih mendapatkan kesalahan yang sama. Saya juga mencoba memetakan drive jaringan ke folder bersama bukan jalur UNC, tetapi kesalahan yang sama.

Adakah yang bisa menyarankan bagaimana saya bisa terhubung ke folder ini?

Greg
sumber

Jawaban:

9

Saya yakin masalah Anda akan menjadi SQLPSpenyedia. Karena langkah-langkah PowerShell di SQL Server Agent secara otomatis menempatkan Anda ke dalam konteks penyedia itu beberapa perintah yang bekerja di konsol normal Anda tidak akan berfungsi dengan cara yang sama. Tulisan dilakukan di sini dengan Set-Location. Anda pada dasarnya harus memberi tahu SQLPSpenyedia yang ingin Anda gunakan.

Kode Anda akan terlihat seperti di bawah ini:

set-location -Path Microsoft.PowerShell.Core\FileSystem::"\\server\companydocuments\MyApp\Application Files\"

Anda juga bisa membungkus sisanya menjadi dua baris jika Anda ingin:


cd (Get-ChildItem | Sort-Object name -Descending | Select name -First 1).name
& ".\Application.exe"

sumber
@ShawnMelton bagaimana dengan menjalankan perintah PowerShell di server jauh? dba.stackexchange.com/questions/83068/...
Marcello Miorelli
Kami memiliki masalah yang sama dan menemukan melakukan cd c:di awal skrip mengurutkan masalah konteks / lokasi. Kemudian semua jalur UNC bekerja seperti yang diharapkan.
James Khoury
cd c:adalah alias untuk digunakan Set-Location C:, jadi ini adalah perintah yang sama.
2

Alternatif lain adalah dengan menggunakan perintah sistem operasi dan memberikan powershell.exe c: /path/script.ps1 sebagai perintah dan simpan skrip Anda di script.ps1. Ini akan memastikan menggunakan OS PowerShell daripada menggunakan penyedia.

Ketan
sumber