SQL Server Agent'ta Powershell Komut Dosyası çalıştırılırken hata oluştu


9

SQL Server Agent (SQL Server 2012 Enterprise çalıştıran) üzerinden çalışan bir SQL işi var. İşin son adımı, ağ paylaşımında bulunan bir uygulamayı çalıştırmaktır. Ne yazık ki uygulama (klasör sürüm numarasıdır) klasörün adını bilmiyorum, bu yüzden bulmak için PowerShell kullanıyorum:

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'da bir PowerShell penceresi açarsam iyi çalışır. Bu SQL Server Agent çalıştırdığınızda aşağıdaki hatayı alıyorum:

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

Ben bir izin sorunu olabileceğini düşündüm bu yüzden benim kimlik bilgileri altında çalışan SQL Server Agent denedim (bu bir test sunucusu, üretim değil) ama yine de aynı hatayı alıyorum. Ayrıca UNC yolları yerine paylaşılan klasöre bir ağ sürücüsünü eşlemeyi denedim, ancak aynı hata.

Herkes bu klasöre nasıl bağlanabileceğimi önerebilir mi?

Yanıtlar:


9

Sorununuzun SQLPSsağlayıcı olacağına inanıyorum . SQL Server Agent'taki PowerShell adımları sizi otomatik olarak bu sağlayıcının bağlamına koyduğundan, normal konsolunuzda çalışan bazı komutlar aynı şekilde çalışmaz. Bir yazma yukarı yapıldığını burada ile Set-Location. Temel SQLPSolarak kullanmak istediğiniz sağlayıcıya söylemelisiniz .

Kodunuz aşağıdaki gibi görünecektir:

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

İsterseniz geri kalanını iki satıra da sarabilirsiniz:


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

@ShawnMelton powershell komutlarını uzak bir sunucuda çalıştırmaya ne dersiniz? dba.stackexchange.com/questions/83068/…
Marcello Miorelli

Aynı sorunu yaşadık cd c:ve betiğin başında bağlam / konum sorununu sıralayan bir yaptık . Sonra tüm UNC yolları beklendiği gibi çalıştı.
James Khoury

cd c:kullanmak için bir takma addır Set-Location C:, bu yüzden aynı komuttur.

2

Diğer alternatif işletim sistemi komutunu kullanmak ve powershell.exe c: /path/script.ps1 komutunu komut olarak vermek ve betiğinizi script.ps1'e kaydetmek olacaktır. Bu, sağlayıcı kullanmak yerine OS powershell kullanımını sağlayacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.