Lỗi khi chạy Powershell Script trong SQL Server Agent


9

Tôi có một công việc SQL chạy qua SQL Server Agent (Chạy SQL Server 2012 Enterprise). Bước cuối cùng của công việc là chạy một ứng dụng nằm trên mạng chia sẻ. Thật không may, tôi không biết tên của thư mục mà ứng dụng đang ở (thư mục là số phiên bản), vì vậy tôi đang sử dụng PowerShell để tìm nó:

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

Nếu tôi mở một cửa sổ PowerShell trên SQL Server thì nó hoạt động tốt. Khi tôi chạy cái này trong SQL Server Agent, tôi gặp lỗi sau:

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

Tôi nghĩ đó có thể là sự cố về quyền nên tôi đã thử SQL Server Agent chạy theo thông tin đăng nhập của tôi (đó là máy chủ thử nghiệm, không sản xuất) nhưng tôi vẫn gặp lỗi tương tự. Tôi cũng đã thử ánh xạ ổ đĩa mạng vào thư mục dùng chung thay vì đường dẫn UNC, nhưng cùng một lỗi.

Bất cứ ai có thể đề nghị làm thế nào tôi có thể kết nối với thư mục này?

Câu trả lời:


9

Tôi tin rằng vấn đề của bạn sẽ là SQLPSnhà cung cấp. Vì các bước PowerShell trong SQL Server Agent sẽ tự động đưa bạn vào ngữ cảnh của nhà cung cấp đó, một số lệnh hoạt động trong bảng điều khiển thông thường của bạn sẽ không hoạt động theo cùng một cách. Một viết lên đã được thực hiện ở đây với Set-Location. Về cơ bản bạn phải nói với SQLPSnhà cung cấp mà bạn muốn sử dụng.

Mã của bạn sẽ trông giống như dưới đây:

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

Bạn cũng có thể gói phần còn lại thành hai dòng nếu bạn muốn:


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

@ShawnMelton, còn việc chạy các lệnh powershell trên máy chủ từ xa thì sao? dba.stackexchange.com/questions/83068/ Ấn
Marcello Miorelli

Chúng tôi đã có vấn đề tương tự và thấy làm cd c:ở phần đầu của kịch bản đã sắp xếp vấn đề bối cảnh / vị trí. Sau đó, tất cả các con đường UNC làm việc như mong đợi.
James Khoury

cd c:là một bí danh để sử dụng Set-Location C:, vì vậy nó là cùng một lệnh.

2

Cách khác là sử dụng lệnh hệ điều hành và cung cấp powershell.exe c: /path/script.ps1 làm lệnh và lưu tập lệnh của bạn trong script.ps1. Điều này sẽ đảm bảo sử dụng quyền hạn hệ điều hành thay vì sử dụng nhà cung cấp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.