ติดอยู่ใน Powershell sqlserver


14

ฉันเป็นมือใหม่ที่ชอบความสามารถ

ดังนั้นฉันจึงสร้างสคริปต์ที่ใช้Restore-SqlDatabasecommandlet อย่างไรก็ตามหลังจากที่ฉันเรียกใช้แล้วมันทำให้ Powershell อยู่ในสถานะที่ต่างออกไป

PS D:\theFolder\> .\myRestoreDatabaseScript.ps1
... snip does the work ...
PS SQLSERVER:\>

ฉันจะคืนค่า Powershell กลับไปที่อินเทอร์เฟซ "ปกติ" ได้อย่างไร

นอกจากนี้สิ่งที่เป็นPS SQLSERVERคำนำหน้าเรียกว่า? ฉันลองใช้ Google เพื่อทำสิ่งนี้แล้วก็ว่างเปล่า

คำตอบ:


21

จากบทความ MS PowerShell ของเซิร์ฟเวอร์ SQL

•ผู้ให้บริการเซิร์ฟเวอร์ SQL ซึ่งเปิดใช้งานกลไกการนำทางอย่างง่ายคล้ายกับเส้นทางของระบบไฟล์ คุณสามารถสร้างพา ธ ที่คล้ายกับพา ธ ของระบบไฟล์ซึ่งไดรฟ์นั้นเชื่อมโยงกับโมเดลวัตถุการจัดการ SQL Server และโหนดนั้นขึ้นอยู่กับคลาสของโมเดลวัตถุ จากนั้นคุณสามารถใช้คำสั่งที่คุ้นเคยเช่นcdและdirเพื่อนำทางพา ธ ที่คล้ายกับวิธีที่คุณนำทางโฟลเดอร์ในหน้าต่างพรอมต์คำสั่ง คุณสามารถใช้คำสั่งอื่น ๆ เช่นrenหรือdelเพื่อดำเนินการกับโหนดในพา ธ

มีผู้ให้บริการเช่นนี้โหลดช่วยให้คุณรักษา SQLServer แบบเดียวกับที่คุณจะปฏิบัติต่อไดรฟ์ (ตัวอักษร)

ดังนั้นน่าจะเป็นหนึ่งในรหัสของคุณที่คุณเคยใช้CDในการย้ายเข้าสู่ผู้ให้บริการ SQLServer ( cd sqlserver:)

หากคุณต้องการที่จะได้รับกลับไปโดยเฉพาะที่คุณต้องการใช้d:\thefoldercd d:\thefolder

หากคุณต้องการกลับไปยังจุดที่คุณเริ่มต้นเมื่อเสร็จแล้วคุณอาจต้องเก็บตำแหน่งไดเรกทอรีปัจจุบันไว้ในตัวแปรที่เป็นจุดเริ่มต้นของสคริปต์จากนั้นใช้cdที่ส่วนท้ายของสคริปต์เพื่อเปลี่ยนกลับไปเป็น ไดเรกทอรีเดิม

หรือคุณสามารถทำได้ตามที่ @ alroc แนะนำไว้ในความคิดเห็นของเขาให้ใช้push-locationและpop-locationcmdlets เพื่อจัดเก็บและดึงข้อมูลตำแหน่งปัจจุบัน


3
คุณไม่ต้องบันทึกไดเรกทอรีปัจจุบันลงในตัวแปร ใช้push-locationก่อนนำเข้าsqlpsและpop-locationหลังการนำเข้าและคุณก็พร้อมใช้งาน
alroc

@ alroc ฉันคิดว่าอาจมีบางอย่างเช่นนั้น แต่ฉันไม่ได้ตระหนักถึงสิ่งนั้น :) มีประโยชน์
Ƭᴇcʜιᴇ007

7

ดูเหมือนว่าจะใช้งานได้สำหรับฉัน:

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSqlCmd.sql" | out-null

1

เพียงพิมพ์C:พรอมต์คำสั่งเพื่อกลับไปที่พรอมต์ปกติ (เช่น C: \>)

สำหรับข้อมูลสิ่งที่อาจทริกเกอร์พรอมต์ SMO (เช่นPS SQLSERVER:> ) จากพรอมต์C: \>ปกติ) คือเมื่อคุณโหลดแอสเซมบลี SMO โดยไม่มีOut-Null (out-Null จะไม่แสดงผลลัพธ์ที่ส่งคืนโดย cmdlet )

กล่าวอีกนัยหนึ่งเพื่อหลีกเลี่ยงการเข้าไปในพรอมต์ SMO โดยไม่ตั้งใจเมื่อโหลดชุดประกอบ SMO เพียงใช้ท่อOut-Nullดังนี้

[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null

เนื่องจาก Microsoft เลิกใช้งานวิธี LoadWithPartialName ()ให้ใช้Add-Typeแทน:

Add-Type -Path "your_path_to_assembly\Smo.dll"

หมายเหตุ: การรับเส้นทางไปยังแอสเซมบลี / dll ของคุณ - ใช้การGetAssemblies ()วิธีการดังต่อไปนี้:

[System.AppDomain]::CurrentDomain.GetAssemblies() | ? {$_.Location -match 'Smo.dll'}

HTH

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