คำถามติดแท็ก powershell

Windows PowerShell ™เป็นเชลล์บรรทัดคำสั่งสำหรับงานและภาษาสคริปต์ที่ออกแบบมาโดยเฉพาะสำหรับการทำงานอัตโนมัติของ Windows คำถามที่ใช้แท็กนี้ควร จำกัด การโต้ตอบโดยตรงกับระดับฐานข้อมูล คำถามทั่วไปเกี่ยวกับการเขียนสคริปต์ powershell ควรส่งไปที่ [StackOverflow] (/programming/tagged/powershell)

3
ฉันควรใช้เทคนิค PowerShell ใดเพื่อพูดคุยกับ SQL Server
ในที่สุดฉันต้องการใช้ PowerShell เพื่อแทนที่สคริปต์ KornShell เก่าที่เราใช้สำหรับการมอนิเตอร์อินสแตนซ์ SQL แม้ว่าฉันจะมีช่วงเวลาที่ยากลำบาก แต่ก็ทำให้สมองของฉันได้รับวิธีที่ต่างกันที่ PowerShell สามารถพูดคุยกับเซิร์ฟเวอร์ SQL ได้ ไม่แน่ใจว่าเป็นของพวกเขาทั้งหมดหรือไม่ แต่นี่เป็นวิธีที่ต่างกันทั้งหมด 5 วิธีที่ฉันสามารถสืบค้นรุ่นของเซิร์ฟเวอร์ SQL: 1. SQLConnection. NET Class $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server=MyServer;Database=Master;Integrated Security=True" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = "Select @@version as SQLServerVersion" $SqlCmd.Connection = $SqlConnection $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand = $SqlCmd $DataSet …

6
วิธีที่มีประสิทธิภาพมากที่สุดในการค้นหาอินสแตนซ์ที่ทำงานอยู่ทั้งหมดของ SQL Server โดยใช้ PowerShell คืออะไร
ฉันได้รับมอบหมายให้ค้นหาอินสแตนซ์ทั้งหมดของ SQL Server ที่ทำงานอยู่ภายในโดเมนของเรา ในหลายกรณีมีหลายอินสแตนซ์ต่อเซิร์ฟเวอร์ ฉันเห็นวิธี PowerShell สองวิธีที่แตกต่างกันในการค้นหาอินสแตนซ์เหล่านี้ แต่ดูเหมือนจะไม่พบอินสแตนซ์ทั้งหมด 1) ใช้ WMI $srvr = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer $computerName $instances = $srvr | ForEach-Object {$_.ServerInstances} | Select @{Name="fullName";Expression={$computerName +"\"+ $_.Name}} return $instances 2) ใช้รีจิสตรีระยะไกล (เช่นเดียวกับ Get-SQLInstance 1 ) ปัญหาที่ใหญ่ที่สุดที่ฉันพบคือเซิร์ฟเวอร์ทั้งหมดที่ฉันรู้จักไม่ทำงานกับผู้ให้บริการ SQL Server WMI และไม่อนุญาตให้ใช้รีจิสตรีระยะไกล มีวิธีที่สามหรือไม่? ฉันสามารถใช้ Remote Desktop เพื่อเข้าถึงเซิร์ฟเวอร์ทั้งหมด แต่ฉันกำลังดูเครื่องจักรประมาณ 30 เครื่องและต้องการหลีกเลี่ยงขั้นตอนแบบแมนนวลหากเป็นไปได้ …

2
การอ้างอิงบริบทของเอเจนต์ SQL PowerShell
ที่งานใหม่ของฉันเรามีอินสแตนซ์ที่มีชื่อหลายรายการในแต่ละเซิร์ฟเวอร์ เช่น Server1 \ Dev Server1 \ DevIntegrated Server1 \ QA ฉันมีสคริปต์ SQL PowerShell ในงานที่เรียกไปยังระบบปฏิบัติการเรียกใช้Foo.exeแต่ต้องผ่านพารามิเตอร์บรรทัดคำสั่ง (สตริงการเชื่อมต่อ) งาน SQL Agent จะมีอยู่ในแต่ละอินสแตนซ์ด้วยขั้นตอนการพิมพ์ PowerShell ที่จำเป็นต้องรู้ว่าบริบทปัจจุบันคืออะไร ieการดำเนินการนี้เริ่มต้นบน DevIntegrated ฉันไม่ต้องการให้สคริปต์เริ่มต้นด้วย ... $thisInstance = "Dev" ... โดยเฉพาะอย่างยิ่งเมื่อฉันต้องแก้ไขว่าเมื่อเราย้ายไปยังสภาพแวดล้อม (เซิร์ฟเวอร์ใหม่และอินสแตนซ์ที่มีชื่อ) ในอีกไม่กี่เดือนข้างหน้า ถ้าฉันเริ่ม SQLPS ฉันสามารถกำหนดอินสแตนซ์ของฉันโดยการแบ่งส่วนและทำให้ผลลัพธ์ของ Get-Location หรือทำงาน (Invoke-Sqlcmd -Query "SELECT @@servername AS ServerName" -SuppressProviderContextWarning).ServerName เมื่อตัวแทนของ SQL เริ่มงานประเภท PowerShell จะเริ่มใน …

1
ใน PowerShell การดึงข้อความที่พิมพ์จาก SSMS
ทีม DBA ของเราไม่ตรวจสอบการสำรองข้อมูลโดยใช้ด้านล่างTSQL(ซึ่งสามารถทำการสำรองข้อมูลได้อย่างง่ายดายและใช้เวลาไม่นานดังนั้นฉันจึงไม่เข้าใจสาเหตุ) RESTORE VERIFYONLY FROM DISK = 'D:\Backups\LOCATION' พวกเขามีปัญหาในอดีตดังนั้นแม้ว่าเราจะคิดว่าพวกเขาต้องการเรียนรู้จากมันพวกเขาก็ยังไม่ได้ ฉันสร้างสคริปต์ Powershell เพื่อทำเช่นนี้เพราะเรามีเซิร์ฟเวอร์มากกว่า 100 แห่งและฉันต้องการเรียกใช้สคริปต์นี้กับการสำรองข้อมูลทั้งหมดเพียงเพื่อให้มั่นใจว่าถูกต้อง สคริปต์ด้านล่างทำงานอย่างถูกต้อง (ในกรณีที่มันไม่ผิดพลาดหรือผิดพลาด) ฉันอยากรู้ว่ามีวิธีที่จะได้รับข้อความที่พิมพ์กลับมาใน Powershell ซึ่งปกติแล้วเราจะได้รับใน SSMS ซึ่งระบุว่าชุดสำรองในไฟล์ 1 คือ ถูกต้องเป็นการตรวจสอบ $SqlCon = New-Object System.Data.SqlClient.SqlConnection $SqlCon.ConnectionString = "SERVER=SERV\INST;Integrated Security=true;DATABASE=master" $baks = Get-ChildItem "D:\Backups\" -Filter *.BAK foreach ($bak in $baks) { $SqlCon.Open() $cd = New-Object System.Data.SqlClient.SqlCommand $cd.Connection …

4
รับ id ของงานหรือชื่องานจากภายในการดำเนินงาน
ฉันมีฐานข้อมูลกลางที่ฉันเขียนผลลัพธ์งานบนเซิร์ฟเวอร์ทั้งหมดของฉันกลับไป ฉันส่งพารามิเตอร์ 3 ตัวผ่าน powershell ในงาน SQL กลับไปที่ sp บนเซิร์ฟเวอร์กลางที่ตรวจสอบว่างานควรจะทำงานในเวลานั้น ฯลฯ ข้อมูลจะถูกเปิดเผยผ่าน SSRS เพื่อให้เราเห็นงานล้มเหลว / งานที่ต้องทำงานนาน / & งานที่ไม่ได้ทำงาน แต่ควรมี (หรือถ้ามีคนยุ่งกับตาราง) ในการทำเช่นนี้ฉันมี 2 ขั้นตอนงานในแต่ละงานบนเซิร์ฟเวอร์ทุกเครื่องและฉันต้องการลดสคริปต์ลงเหลือเพียง 1 ขั้นตอนในแต่ละงาน .. อาจเป็นไปได้ที่จะโทรหาจากเครือข่ายที่ใช้ร่วมกัน .. แต่ปัญหาของฉันคือหนึ่งในสามพารามิเตอร์ที่ฉันผ่าน ฉันต้องการรับ jobid ที่กำลังเรียกใช้หรือชื่องานจากภายในงานที่กำลังดำเนินการดังนั้นฉันไม่ต้อง hardcode พารามิเตอร์ name 3 พารามิเตอร์ที่ฉันผ่านคือ jobid สถานะ (สำเร็จ / ล้มเหลว), errormsg สคริปต์ powershell ที่ฉันเขียนนั้นค่อนข้างตรงไปตรงมา เรียกใช้-sqlcmd -ServerInstance "MYRemoteSYSTEM" …

1
เชื่อมต่อกับ LocalDB ผ่าน SQLCMD ใน PowerShell
ฉันพยายามเข้าถึงเซิร์ฟเวอร์ "localdb \ MSSQLLocalDB" บนคอมพิวเตอร์ของฉันผ่าน PowerShell ด้วยยูทิลิตี้ SQLCMD ฉันใช้ PowerShell v5, .NET v5.0 และชื่อเซิร์ฟเวอร์คือ(localdb)\MSSQLLocalDBเมื่อฉันเชื่อมต่อกับมันใน Microsoft SQL Server Management Studio 2014 PS C:\> sqlcmd -S localdb\MSSQLLocalDBและPS C:\> sqlcmd -S .\localdb\MSSQLLocalDBทำให้เกิดข้อผิดพลาดนี้: Sqlcmd: ข้อผิดพลาด: Microsoft ODBC Driver 11 สำหรับ SQL Server: อินเทอร์เฟซเครือข่ายเซิร์ฟเวอร์ SQL: ข้อผิดพลาดการค้นหาเซิร์ฟเวอร์ / อินสแตนซ์ที่ระบุ [xFFFFFFFF] ฉันสอบถามชื่อเซิร์ฟเวอร์ใน Management Studio ด้วยSELECT @@ServerNameและใช้หลังจากนั้น-Sในคำสั่งด้านบนและได้รับข้อผิดพลาดเดียวกัน PS …

1
ระบุสาเหตุที่แท้จริงสำหรับสาเหตุที่ฐานข้อมูลติดค้างอยู่ในสถานะเรียกคืน
ฉันรู้ว่ามีคำถามที่แก้ปัญหาของฐานข้อมูลที่ติดอยู่ในRESTORINGสถานะและได้ใช้โซลูชั่นเหล่านั้นเพื่อนำฐานข้อมูลด้วยตนเองกลับมาออนไลน์ แต่สถานการณ์ของฉันแตกต่างกันบ้าง ฉันมีการกู้คืนอัตโนมัติโดยใช้สคริปต์ Powershell ซึ่งคืนค่าสำเนาการผลิตไปยังอินสแตนซ์ DEV สคริปต์ไม่เปลี่ยนแปลงประมาณปีและบางครั้งกระบวนการกู้คืนจะเสร็จสิ้น แต่ฐานข้อมูลที่กู้คืนติดอยู่ในRESTORINGสถานะ (บางครั้งสคริปต์ทำงานได้ดีบางครั้งก็ล้มเหลวเช่นนี้) แต่ละครั้งถ้าฉันรันกระบวนการที่ทำงานด้วยตนเองอีกครั้งหรือถ้าฉันกู้คืนฐานข้อมูลด้วยตนเองจากส่วนติดต่อผู้ใช้ของ SSMS หรือผ่าน T-SQL จะเสร็จสมบูรณ์โดยไม่มีปัญหา ฉันพบคำตอบที่แนะนำให้เรียกใช้CHECKDBบนฐานข้อมูลที่คืนค่า แต่ไม่มีอะไรออกมาเป็นสาเหตุของปัญหานี้ เนื่องจากสคริปต์คืนค่าคืนค่าการสำรองข้อมูลทั้งหมดของฐานข้อมูลและใช้"WITH RECOVERY"ตัวเลือกฉันพยายามค้นหาสิ่งที่อาจหยุดกระบวนการกู้คืนแม้ว่าฉันจะกู้คืนโดยใช้"WITH RECOVERY"จริง ข้อเสนอแนะใด ๆ ที่ชื่นชมจริง ๆ ตั้งแต่ฉันติดอยู่ที่พยายามที่จะเข้าใจว่าทำไมสิ่งนี้เกิดขึ้นเป็นครั้งคราว ฉันอยากจะแก้ปัญหาต้นเหตุของปัญหามากกว่าจะรักษาอาการซึ่งก็คือการกู้คืนฐานข้อมูลด้วยตนเองอีกครั้ง ปรับปรุง: Github สรุปสาระสำคัญได้ @Brent แนะนำ - ที่นี่

2
เกิดข้อผิดพลาดในการเรียกใช้สคริปต์ Powershell ใน SQL Server Agent
ฉันมีงาน 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 …

2
มีการรวบรวมสคริปต์ PowerShell ใด ๆ ที่ช่วยงานบำรุงรักษา SQL Server หรือไม่
ฉันกำลังศึกษา PowerShell และฉันได้รับอย่างช้า ๆ ในการทำงาน DBA แบบวันต่อวัน จนถึงตอนนี้ฉันได้เห็นสคริปต์ PowerShell ที่ไม่ได้เชื่อมต่อสำหรับกิจกรรมการดูแลระบบที่แตกต่างกันจำนวนมาก สิ่งที่ฉันต้องการทราบคือมีคอลเลกชันหรือพื้นที่เก็บข้อมูลสคริปต์อย่างเป็นทางการ (หรือที่รู้จัก) PowerShell ที่ผู้คนมักจะไปที่สคริปต์ SQL Server PowerShell สำหรับกิจกรรม DBA ทั่วไป (เช่นสคริปต์ T-SQL ของ Ola Hallengren)

2
PowerShell เพื่อรับตัวนับหน่วยความจำเซิร์ฟเวอร์ sql และแสดงค่า
ฉันกำลังเขียนสคริปต์ powershell เพื่อจับภาพเคาน์เตอร์เซิร์ฟเวอร์ SQL ต่อไปนี้: SQL Server: ตัวจัดการหน่วยความจำ: หน่วยความจำเซิร์ฟเวอร์ทั้งหมด (KB) SQL Server: ตัวจัดการหน่วยความจำ: หน่วยความจำเซิร์ฟเวอร์เป้าหมาย (KB) เครื่องของฉันมีเซิร์ฟเวอร์ SQL 3 อินสแตนซ์ดังนั้นฉันต้องการให้สคริปต์นี้จับตัวนับทั้งหมดแบบไดนามิกและรายงานค่าสำหรับ 1 ตัวอย่างเท่านั้น ฉันพยายามเขียนสิ่งต่อไปนี้: Get-counter -List *SQL*Memory* | Select paths, counter | format-list # doesn't display full list Get-counter -List *SQL*Memory* | Select paths, counter | where {_.counter -like "*server memory*"} |format-list …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.