ค้นหาเว็บไซต์

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


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

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

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

Get-Help \*-Service

  • รับบริการ — อนุญาตให้รับบริการบนเครื่องคอมพิวเตอร์ในพื้นที่หรือระยะไกลทั้งในสถานะกำลังทำงานหรือหยุดทำงาน

  • บริการใหม่ - สร้างบริการ cmdlet สร้างรายการใหม่สำหรับบริการ Windows ในรีจิสทรีและในฐานข้อมูลบริการ

  • เริ่มบริการใหม่ - เริ่มบริการใหม่ cmdlet ส่งข้อความรีสตาร์ทผ่าน Windows Service Controller;

  • Resume-Service - กลับมาใช้บริการต่อ cmdlet ส่งข้อความดำเนินการต่อไปยัง Windows Service Manager;

  • ตั้งค่าบริการ — เปลี่ยนการตั้งค่าของบริการภายในหรือระยะไกล รวมถึงสถานะ คำอธิบาย ชื่อที่แสดง หรือโหมดเริ่มต้น คุณยังสามารถใช้ cmdlet นี้เพื่อเริ่ม หยุด หรือระงับบริการ

  • เริ่มบริการ - เริ่มบริการ

  • Stop-Service - หยุดบริการ (cmdlet ส่งข้อความหยุดไปยัง Windows Service Manager)

  • ระงับบริการ - ระงับบริการ บริการที่ถูกระงับยังคงทำงานอยู่ แต่จะไม่ดำเนินการใดๆ จนกว่าจะกลับมาใช้งานอีกครั้ง (ตัวอย่างเช่น ด้วย Resume-Service cmdlet)

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

Get-Help Start-Service

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

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

*

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

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

Get-Service spooler -ComputerName ny-prnt1,ny-prnt2
Status Name DisplayName
------ ---- -----------
Running spooler Print Spooler
Stopped spooler Print Spooler

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

Get-Service spooler | Select-Object *

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

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

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

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

  • -RequiredServices แสดงบริการที่บริการนั้นขึ้นอยู่กับ

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

Get-Service -Name Spooler -RequiredServices

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

Get-Service -Name Spooler -DependentServices

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

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

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

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

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

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

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

คุณสามารถหยุดบริการโดยใช้ cmdlet Stop-Service หากต้องการหยุด Spooler ให้รันคำสั่ง:

Stop-Service -Name spooler

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

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

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

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

Stop-Service samss -Force -Passthru

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

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

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

cmdlet Start-Service เริ่มบริการที่หยุดทำงาน:

Start-Service -Name spooler -PassThru

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

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

cmdlet Suspend-Servce สามารถหยุดบริการชั่วคราวได้หากสนับสนุนสถานะนี้ หากต้องการทราบว่าสามารถระงับบริการได้หรือไม่ ให้ใช้ cmdlet Get-Service ที่มีคุณสมบัติ CanPauseAndContinue

Get-Service samss | Format-List name, canpauseandcontinue

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

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

มาระงับบริการ SQLBrowser:

Suspend-Service -Name SQLBrowser

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

Resume-Service -Name SQLBrowser

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

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

cmdlet รีสตาร์ทบริการ จะรีสตาร์ทบริการ:

Restart-Service -Name spooler

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

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 เพื่อเปลี่ยนการตั้งค่าบริการ

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

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

Set-Service spooler -startuptype automatic -passthru

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

Set-Service spooler -startuptype manual -passthru

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

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

มาสร้างบริการใหม่ด้วยชื่อ TestSvc:

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

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

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

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

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

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

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

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

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

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

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

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

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

$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 เป็นเรื่องง่าย คุณสามารถสร้าง หยุด เริ่มหรือกลับมาใช้บริการต่อ และเปลี่ยนคุณสมบัติได้ cmdlet ส่วนใหญ่อนุญาตให้จัดการบริการบนคอมพิวเตอร์ระยะไกล

บทความที่เกี่ยวข้อง