เกิดข้อผิดพลาดในการเรียกใช้สคริปต์ Powershell ใน SQL Server Agent


9

ฉันมีงาน SQL ที่ทำงานผ่านตัวแทนของเซิร์ฟเวอร์ SQL (กำลังเรียกใช้ SQL Server 2012 Enterprise) ขั้นตอนสุดท้ายของงานคือการเรียกใช้แอพพลิเคชั่นที่อยู่บนเครือข่ายแชร์ น่าเสียดายที่ฉันไม่ทราบชื่อโฟลเดอร์ที่มีแอปพลิเคชันอยู่ (โฟลเดอร์คือหมายเลขเวอร์ชั่น) ดังนั้นฉันจึงใช้ PowerShell เพื่อค้นหา:

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

ถ้าฉันเปิดหน้าต่าง PowerShell บน SQL Server มันก็ใช้ได้ดี เมื่อฉันเรียกใช้สิ่งนี้ในตัวแทนของเซิร์ฟเวอร์ SQL ฉันได้รับข้อผิดพลาดต่อไปนี้:

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 ที่ทำงานภายใต้ข้อมูลรับรองของฉัน (เป็นเซิร์ฟเวอร์ทดสอบไม่ใช่การผลิต) แต่ฉันยังคงได้รับข้อผิดพลาดเดียวกัน ฉันได้ลองแมปไดรฟ์เครือข่ายไปยังโฟลเดอร์ที่ใช้ร่วมกันแทนเส้นทาง UNC แต่เกิดข้อผิดพลาดเดียวกัน

ใครช่วยแนะนำฉันสามารถเชื่อมต่อกับโฟลเดอร์นี้ได้อย่างไร

คำตอบ:


9

ฉันเชื่อว่าปัญหาของคุณจะเป็นSQLPSผู้ให้บริการ เนื่องจากขั้นตอน PowerShell ในตัวแทนของเซิร์ฟเวอร์ SQL ทำให้คุณเข้าสู่บริบทของผู้ให้บริการนั้นโดยอัตโนมัติคำสั่งบางคำสั่งที่ทำงานในคอนโซลปกติของคุณจะไม่ทำงานเหมือนกัน เขียนขึ้นมาได้ทำที่นี่Set-Locationด้วย โดยทั่วไปคุณต้องบอกSQLPSผู้ให้บริการว่าคุณต้องการใช้

รหัสของคุณจะมีลักษณะดังนี้:

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

คุณสามารถตัดส่วนที่เหลือออกเป็นสองบรรทัดได้หากคุณต้องการ:


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

@ShawnMelton แล้วการรันคำสั่ง powershell บนเซิร์ฟเวอร์ระยะไกลล่ะ? dba.stackexchange.com/questions/83068/…
Marcello Miorelli

เรามีปัญหาเดียวกันนี้และพบว่าcd c:การเริ่มต้นสคริปต์จัดเรียงเนื้อหาบริบท / ตำแหน่ง จากนั้นเส้นทาง UNC ทั้งหมดทำงานตามที่คาดไว้
James Khoury

cd c:เป็นนามแฝงที่จะใช้Set-Location C:ดังนั้นจึงเป็นคำสั่งเดียวกัน

2

อีกทางเลือกหนึ่งคือการใช้คำสั่งระบบปฏิบัติการและให้ powershell.exe c: /path/script.ps1 เป็นคำสั่งและบันทึกสคริปต์ของคุณใน script.ps1 สิ่งนี้จะช่วยให้มั่นใจได้ว่าจะใช้ระบบปฏิบัติการ powershell แทนที่จะใช้ผู้ให้บริการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.