Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีจัดการบริการ Windows ด้วย PowerShell

คุณสามารถจัดการบริการ Windows ได้ไม่เพียงแค่จากเครื่องมือบรรทัดคำสั่ง services.msc snap-in หรือ sc.exe แต่ยังใช้ PowerShell ได้อีกด้วย ในบทความนี้ เราจะพิจารณาสถานการณ์ต่างๆ ในการจัดการบริการ Windows ด้วย PowerShell

PowerShell Cmdlets ที่ใช้เพื่อจัดการบริการของ Windows

มีแปด cmdlet ของบริการพื้นฐานเพื่อดูสถานะของบริการ Windows และจัดการ หากต้องการรับรายการ cmdlet ของการจัดการบริการทั้งหมด ให้เรียกใช้คำสั่งนี้:

Get-Help \*-Service

วิธีจัดการบริการ Windows ด้วย PowerShell

  • รับบริการ — อนุญาตให้รับบริการบนคอมพิวเตอร์ในพื้นที่หรือระยะไกลทั้งในสถานะทำงานหรือหยุดทำงาน
  • บริการใหม่ – สร้างบริการ cmdlet สร้างรายการใหม่สำหรับบริการ Windows ในรีจิสทรีและในฐานข้อมูลบริการ
  • เริ่มบริการใหม่ – เริ่มบริการใหม่ cmdlet ส่งข้อความเริ่มต้นใหม่ผ่าน Windows Service Controller;
  • ประวัติ-บริการ - กลับมาให้บริการอีกครั้ง cmdlet ส่งข้อความต่อไปยัง Windows Service Manager;
  • ตั้งค่าบริการ — เปลี่ยนการตั้งค่าของบริการในพื้นที่หรือบริการระยะไกล รวมถึงสถานะ คำอธิบาย ชื่อที่แสดง หรือโหมดเริ่มต้น คุณยังสามารถใช้ cmdlet นี้เพื่อเริ่ม หยุด หรือระงับบริการได้
  • เริ่มบริการ – เริ่มบริการ
  • หยุดบริการ – หยุดบริการ (cmdlet ส่งข้อความหยุดไปยัง Windows Service Manager);
  • ระงับบริการ – ระงับการให้บริการ บริการที่ถูกระงับยังคงทำงานอยู่ แต่จะไม่ดำเนินการใดๆ จนกว่าจะกลับมาใช้งานได้ต่อ (เช่น ด้วย Resume-Service cmdlet)

คุณสามารถรับคำอธิบายโดยละเอียดและตัวอย่างการใช้ cmdlet เฉพาะด้วย Get-Help:

Get-Help Start-Service

วิธีจัดการบริการ Windows ด้วย PowerShell

จะตรวจสอบสถานะบริการของ Windows ด้วย Get-Service ได้อย่างไร

คุณสามารถรับรายการบริการและสถานะ (ทำงาน/หยุดทำงาน) บนคอมพิวเตอร์ในพื้นที่หรือระยะไกลโดยใช้ รับ-บริการ cmdlet The –ชื่อ พารามิเตอร์อนุญาตให้เลือกบริการตามชื่อ ชื่อบริการสามารถระบุได้โดยใช้อักขระตัวแทน * .

วิธีจัดการบริการ Windows ด้วย PowerShell

หากคุณไม่ทราบชื่อบริการที่แน่นอน คุณสามารถค้นหาได้จากชื่อที่แสดงโดยใช้ –ชื่อที่แสดง พารามิเตอร์. คุณสามารถใช้รายการค่าและสัญลักษณ์แทนได้

วิธีจัดการบริการ Windows ด้วย PowerShell

ใช้ รับบริการ cmdlet ที่มี -ComputerName พารามิเตอร์เพื่อรับสถานะการบริการบนคอมพิวเตอร์ระยะไกล คุณสามารถสอบถามสถานะบริการบนคอมพิวเตอร์ระยะไกลหลายเครื่องพร้อมกันได้โดยระบุชื่อโดยคั่นด้วยเครื่องหมายจุลภาค ตัวอย่างเช่น คำสั่งที่แสดงด้านล่างได้รับสถานะบริการตัวจัดคิวบนคอมพิวเตอร์ระยะไกล ny-prnt1 และ ny-prnt2

Get-Service spooler –ComputerName ny-prnt1,ny-prnt2

Status Name DisplayName
------ ---- -----------
Running spooler Print Spooler
Stopped spooler Print Spooler

หากต้องการแสดงคุณสมบัติทั้งหมดของบริการ ให้ใช้ Select-Object cmdlet:

Get-Service spooler | Select-Object *

วิธีจัดการบริการ Windows ด้วย PowerShell

Select-Object cmdlet ช่วยให้สามารถรับคุณสมบัติเฉพาะของบริการได้ ตัวอย่างเช่น คุณต้องการดูชื่อ สถานะ และตัวเลือกที่มีของบริการตัวจัดคิว:

Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*

วิธีจัดการบริการ Windows ด้วย PowerShell

รับบริการ cmdlet มีสองพารามิเตอร์ที่ช่วยให้คุณสามารถดูการขึ้นต่อกันของบริการ:

  • -DependentServices อนุญาตให้แสดงบริการขึ้นอยู่กับบริการที่กำหนด
  • -RequiredServices แสดงบริการที่ขึ้นอยู่กับบริการที่กำหนด

คำสั่งต่อไปนี้แสดงบริการที่จำเป็นในการเริ่มบริการตัวจัดคิว:

Get-Service –Name Spooler -RequiredServices

วิธีจัดการบริการ Windows ด้วย PowerShell

คำสั่งต่อไปนี้แสดงบริการที่ขึ้นอยู่กับ Spooler:

Get-Service –Name Spooler -DependentServices

วิธีจัดการบริการ Windows ด้วย PowerShell

หากคุณต้องการค้นหาบริการที่มีสถานะหรือพารามิเตอร์เฉพาะ ให้ใช้ Where-Object cmdlet ตัวอย่างเช่น มาดูรายการบริการที่ทำงานอยู่:

Get-Service | Where-Object {$_.status -eq 'running'}

วิธีจัดการบริการ Windows ด้วย PowerShell

หากต้องการแสดงบริการด้วยประเภทการเริ่มต้นด้วยตนเอง ให้เรียกใช้คำสั่งนี้:

Get-Service | Where-Object {$_.starttype -eq 'Manual'}

วิธีจัดการบริการ Windows ด้วย PowerShell

ใช้สคริปต์ PowerShell ต่อไปนี้เพื่อตรวจสอบว่ามีบริการ Windows เฉพาะบนคอมพิวเตอร์ปัจจุบันหรือไม่:

if (Get-Service "ServiceTest" -ErrorAction SilentlyContinue)
{
Write-host "ServiceTest exists"
}

จะหยุด เริ่ม หรือเริ่มบริการใหม่ด้วย PowerShell ได้อย่างไร

คุณสามารถหยุดบริการโดยใช้ หยุดบริการ cmdlet หากต้องการหยุดสพูลเลอร์ ให้รันคำสั่ง:

Stop-Service -Name spooler

cmdlet ของบริการหยุดไม่แสดงสิ่งใดหลังจากดำเนินการ หากต้องการดูผลลัพธ์ ให้ใช้ -PassThru พารามิเตอร์

วิธีจัดการบริการ Windows ด้วย PowerShell

โปรดทราบว่าบริการบางอย่างไม่สามารถหยุดได้ หากมีบริการที่ต้องพึ่งพา คุณจะเห็นข้อผิดพลาด:

Cannot stop service because it has dependent services. It can only be stopped if force flag set.

วิธีจัดการบริการ Windows ด้วย PowerShell

หากต้องการบังคับให้หยุดให้บริการ ให้ใช้ปุ่ม –Force พารามิเตอร์. คุณควรจำไว้ว่าบริการที่ขึ้นต่อกันทั้งหมดจะหยุดเช่นกัน:

Stop-Service samss –Force -Passthru

คำสั่งต่อไปนี้จะหยุดบริการที่ระบุ (บิต สพูลเลอร์) หากอยู่ในสถานะ "กำลังทำงาน":

get-service bits,spooler | where {$_.status -eq 'running'} | stop-service –passthru

วิธีจัดการบริการ Windows ด้วย PowerShell

บางครั้งบริการวางสายในสถานะ "หยุด" และต้องถูกฆ่าตาย

เริ่มบริการ cmdlet เริ่มบริการที่หยุด:

Start-Service -Name spooler -PassThru

วิธีจัดการบริการ Windows ด้วย PowerShell

บริการจะไม่เริ่มทำงาน หากบริการที่ขึ้นต่อกันหยุดลง ในการค้นหาและเริ่มต้นใช้ PowerShell one-liner ต่อไปนี้:

get-service samss | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}

วิธีจัดการบริการ Windows ด้วย PowerShell

ระงับการให้บริการ cmdlet สามารถหยุดบริการชั่วคราวได้หากรองรับสถานะนี้ หากต้องการทราบว่าสามารถระงับบริการได้หรือไม่ ให้ใช้ รับบริการ cmdlet ด้วย CanPauseAndContinue ทรัพย์สิน

Get-Service samss | Format-List name, canpauseandcontinue

วิธีจัดการบริการ Windows ด้วย PowerShell

หากต้องการแสดงรายการบริการทั้งหมดที่อาจหยุดชั่วคราว ให้เรียกใช้คำสั่งนี้:

Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}

วิธีจัดการบริการ Windows ด้วย PowerShell

ขอระงับบริการ SQLBrowser:

Suspend-Service -Name SQLBrowser

วิธีจัดการบริการ Windows ด้วย PowerShell

หากต้องการกลับมาใช้บริการที่ถูกระงับ ให้ใช้ Resume-Service cmdlet:

Resume-Service -Name SQLBrowser

วิธีจัดการบริการ Windows ด้วย PowerShell

คำสั่งต่อไปนี้จะกลับมาให้บริการที่ถูกระงับทั้งหมด:

get-service | where-object {$_.Status -eq "Paused"} | resume-service

เริ่มบริการใหม่ cmdlet จะเริ่มต้นบริการใหม่:

Restart-Service -Name spooler

วิธีจัดการบริการ Windows ด้วย PowerShell

คำสั่งนี้เริ่มบริการเครือข่ายที่หยุดทั้งหมดบนคอมพิวเตอร์:

get-service net* | where-object {$_.Status -eq "Stopped"} | restart-service

คำสั่งเหล่านี้ไม่มี –ComputerName แต่คุณสามารถเรียกใช้ได้บนคอมพิวเตอร์ระยะไกลโดยใช้คำสั่ง Invoke-Command cmdlet หรือไพพ์

ตัวอย่างเช่น เมื่อต้องการรีสตาร์ทตัวจัดคิวงานพิมพ์บนคอมพิวเตอร์ระยะไกล ny-prnt1 ให้รันคำสั่ง:
Get-Service Spooler -ComputerName ny-prnt1 | Start-Service

ตามค่าเริ่มต้น เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถเริ่ม/หยุดบริการ Windows ได้ แต่คุณสามารถให้สิทธิ์ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบในการเริ่มต้น/หยุด/รีสตาร์ทบนบริการเฉพาะได้

การใช้ Set-Service เพื่อเปลี่ยนการตั้งค่าบริการ

Set-Service cmdlet อนุญาตให้คุณเปลี่ยนพารามิเตอร์หรือการตั้งค่าของบริการบนคอมพิวเตอร์ในพื้นที่หรือระยะไกล เนื่องจากสถานะของบริการเป็นคุณสมบัติ คุณสามารถใช้ cmdlet นี้เพื่อเริ่ม หยุด หรือระงับบริการ เซ็ต-บริการ มี -StartupType พารามิเตอร์ที่ช่วยให้เปลี่ยนประเภทการเริ่มต้นบริการได้

มาเปลี่ยนประเภทการเริ่มต้น Spooler เป็นอัตโนมัติ:

Set-Service spooler –startuptype automatic –passthru

วิธีจัดการบริการ Windows ด้วย PowerShell

คุณสามารถตั้งค่าประเภทการเริ่มต้นด้วยตนเอง:

Set-Service spooler –startuptype manual –passthru

วิธีจัดการบริการ Windows ด้วย PowerShell

จะสร้างหรือลบบริการ Windows ผ่าน PowerShell ได้อย่างไร

บริการใหม่ – เป็น cmdlet เพื่อสร้างบริการใหม่ใน Windows ระบุชื่อและไฟล์ปฏิบัติการสำหรับบริการใหม่ (คุณยังสามารถเรียกใช้สคริปต์ PowerShell เป็นบริการ Windows)

มาสร้างบริการใหม่ที่ชื่อ TestSvc:

new-service -name TestSvc -binaryPathName "C:\WINDOWS\System32\svchost.exe -k netsvcs"

วิธีจัดการบริการ Windows ด้วย PowerShell

รับข้อมูลเกี่ยวกับประเภทการเริ่มต้นและคำอธิบายของบริการโดยใช้ Get-WmiObject cmdlet

get-wmiobject win32_service -filter "name='testservice'"

วิธีจัดการบริการ Windows ด้วย PowerShell

คุณสามารถเปลี่ยนการตั้งค่าของบริการใหม่ได้โดยใช้คำสั่งต่อไปนี้:

Set-Service -Name TestSvc -Description ‘My Service’ -StartupType Manual

วิธีจัดการบริการ Windows ด้วย PowerShell

หากต้องการลบบริการ ให้รันคำสั่งนี้:

(Get-WmiObject win32_service -Filter ″name=′TestSvc′″).delete()

เปลี่ยนบัญชีผู้ใช้ที่เรียกใช้บริการ Windows

คุณสามารถใช้ PowerShell เพื่อเปลี่ยนบัญชีผู้ใช้ที่ใช้ในการเริ่มบริการ รับชื่อบัญชีที่ใช้เริ่ม TestSvc:

get-wmiobject win32_service -filter "name='TestSvc'" | Select name,startname

วิธีจัดการบริการ Windows ด้วย PowerShell

หากต้องการเปลี่ยนชื่อผู้ใช้และรหัสผ่านสำหรับบริการ Windows ให้เรียกใช้คำสั่งต่อไปนี้:

$svc = get-wmiobject win32_service -filter "name='TestSvc'"
$svc.GetMethodParameters("change")

รายการพารามิเตอร์เมธอด Change() จะปรากฏขึ้น นับว่าพารามิเตอร์ StartName และ StartPassword อยู่ที่ใด:อยู่ที่ 20 th และ 21 st ตามลำดับ

วิธีจัดการบริการ Windows ด้วย PowerShell

$svc | Invoke-WmiMethod -Name Change –ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,"Administrator","!123Pa$$w0rd")

หรือคุณสามารถป้อนชื่อบัญชี gMSA (ในกรณีนี้ไม่ได้ระบุรหัสผ่านของบัญชี)

อย่างที่คุณเห็น PowerShell ทำให้การจัดการบริการ Windows เป็นเรื่องง่าย คุณสามารถสร้าง หยุด เริ่มหรือให้บริการต่อ และเปลี่ยนแปลงคุณสมบัติได้ cmdlets ส่วนใหญ่อนุญาตให้จัดการบริการบนคอมพิวเตอร์ระยะไกลได้