คุณสามารถจัดการบริการ Windows ได้ไม่เพียงแค่จากเครื่องมือบรรทัดคำสั่ง services.msc snap-in หรือ sc.exe แต่ยังใช้ PowerShell ได้อีกด้วย ในบทความนี้ เราจะพิจารณาสถานการณ์ต่างๆ ในการจัดการบริการ Windows ด้วย PowerShell
PowerShell Cmdlets ที่ใช้เพื่อจัดการบริการของ Windows
มีแปด cmdlet ของบริการพื้นฐานเพื่อดูสถานะของบริการ Windows และจัดการ หากต้องการรับรายการ cmdlet ของการจัดการบริการทั้งหมด ให้เรียกใช้คำสั่งนี้:
Get-Help \*-Service
- รับบริการ — อนุญาตให้รับบริการบนคอมพิวเตอร์ในพื้นที่หรือระยะไกลทั้งในสถานะทำงานหรือหยุดทำงาน
- บริการใหม่ – สร้างบริการ 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 ด้วย Get-Service ได้อย่างไร
คุณสามารถรับรายการบริการและสถานะ (ทำงาน/หยุดทำงาน) บนคอมพิวเตอร์ในพื้นที่หรือระยะไกลโดยใช้ รับ-บริการ cmdlet The –ชื่อ พารามิเตอร์อนุญาตให้เลือกบริการตามชื่อ ชื่อบริการสามารถระบุได้โดยใช้อักขระตัวแทน *
.
หากคุณไม่ทราบชื่อบริการที่แน่นอน คุณสามารถค้นหาได้จากชื่อที่แสดงโดยใช้ –ชื่อที่แสดง พารามิเตอร์. คุณสามารถใช้รายการค่าและสัญลักษณ์แทนได้
ใช้ รับบริการ 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 *
Select-Object cmdlet ช่วยให้สามารถรับคุณสมบัติเฉพาะของบริการได้ ตัวอย่างเช่น คุณต้องการดูชื่อ สถานะ และตัวเลือกที่มีของบริการตัวจัดคิว:
Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*
รับบริการ cmdlet มีสองพารามิเตอร์ที่ช่วยให้คุณสามารถดูการขึ้นต่อกันของบริการ:
- -DependentServices อนุญาตให้แสดงบริการขึ้นอยู่กับบริการที่กำหนด
- -RequiredServices แสดงบริการที่ขึ้นอยู่กับบริการที่กำหนด
คำสั่งต่อไปนี้แสดงบริการที่จำเป็นในการเริ่มบริการตัวจัดคิว:
Get-Service –Name Spooler -RequiredServices
คำสั่งต่อไปนี้แสดงบริการที่ขึ้นอยู่กับ Spooler:
Get-Service –Name Spooler -DependentServices
หากคุณต้องการค้นหาบริการที่มีสถานะหรือพารามิเตอร์เฉพาะ ให้ใช้ Where-Object cmdlet ตัวอย่างเช่น มาดูรายการบริการที่ทำงานอยู่:
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 -Name spooler
cmdlet ของบริการหยุดไม่แสดงสิ่งใดหลังจากดำเนินการ หากต้องการดูผลลัพธ์ ให้ใช้ -PassThru พารามิเตอร์
โปรดทราบว่าบริการบางอย่างไม่สามารถหยุดได้ หากมีบริการที่ต้องพึ่งพา คุณจะเห็นข้อผิดพลาด:
Cannot stop service because it has dependent services. It can only be stopped if force flag set.
หากต้องการบังคับให้หยุดให้บริการ ให้ใช้ปุ่ม –Force พารามิเตอร์. คุณควรจำไว้ว่าบริการที่ขึ้นต่อกันทั้งหมดจะหยุดเช่นกัน:
Stop-Service samss –Force -Passthru
คำสั่งต่อไปนี้จะหยุดบริการที่ระบุ (บิต สพูลเลอร์) หากอยู่ในสถานะ "กำลังทำงาน":
get-service bits,spooler | where {$_.status -eq 'running'} | stop-service –passthru
บางครั้งบริการวางสายในสถานะ "หยุด" และต้องถูกฆ่าตาย
เริ่มบริการ cmdlet เริ่มบริการที่หยุด:
Start-Service -Name spooler -PassThru
บริการจะไม่เริ่มทำงาน หากบริการที่ขึ้นต่อกันหยุดลง ในการค้นหาและเริ่มต้นใช้ PowerShell one-liner ต่อไปนี้:
get-service samss | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}
ระงับการให้บริการ cmdlet สามารถหยุดบริการชั่วคราวได้หากรองรับสถานะนี้ หากต้องการทราบว่าสามารถระงับบริการได้หรือไม่ ให้ใช้ รับบริการ cmdlet ด้วย CanPauseAndContinue ทรัพย์สิน
Get-Service samss | Format-List name, canpauseandcontinue
หากต้องการแสดงรายการบริการทั้งหมดที่อาจหยุดชั่วคราว ให้เรียกใช้คำสั่งนี้:
Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}
ขอระงับบริการ SQLBrowser:
Suspend-Service -Name SQLBrowser
หากต้องการกลับมาใช้บริการที่ถูกระงับ ให้ใช้ Resume-Service cmdlet:
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
การใช้ Set-Service เพื่อเปลี่ยนการตั้งค่าบริการ
Set-Service cmdlet อนุญาตให้คุณเปลี่ยนพารามิเตอร์หรือการตั้งค่าของบริการบนคอมพิวเตอร์ในพื้นที่หรือระยะไกล เนื่องจากสถานะของบริการเป็นคุณสมบัติ คุณสามารถใช้ cmdlet นี้เพื่อเริ่ม หยุด หรือระงับบริการ เซ็ต-บริการ มี -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 ให้เรียกใช้คำสั่งต่อไปนี้:
$svc = get-wmiobject win32_service -filter "name='TestSvc'"
$svc.GetMethodParameters("change")
รายการพารามิเตอร์เมธอด Change() จะปรากฏขึ้น นับว่าพารามิเตอร์ StartName และ StartPassword อยู่ที่ใด:อยู่ที่ 20 th และ 21 st ตามลำดับ
$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 ส่วนใหญ่อนุญาตให้จัดการบริการบนคอมพิวเตอร์ระยะไกลได้