Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

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

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

PowerShell Cmdlets ที่ใช้จัดการ Windows Services

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

Get-Help \*-Service

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

  • Get-Service — ช่วยให้ได้ services บนคอมพิวเตอร์ท้องถิ่นหรือระยะไกลทั้งในสถานะ running หรือ stopped;
  • New-Service – สร้าง service Cmdlet สร้างรายการใหม่สำหรับ Windows service ในรีจิสทรีและฐานข้อมูล service;
  • Restart-Service – รีสตาร์ท service Cmdlet ส่งข้อความ restart ผ่าน Windows Service Controller;
  • Resume-Service – ทำให้ service ทำงานต่อ Cmdlet ส่งข้อความ resume ไปยัง Windows Service Manager;
  • Set-Service — เปลี่ยนการตั้งค่าของ local หรือ remote service รวมถึงสถานะ คำอธิบาย ชื่อที่แสดง หรือโหมดเริ่มต้น คุณยังสามารถใช้ cmdlet นี้เพื่อเริ่ม หยุด หรือระงับ service;
  • Start-Service – เริ่ม service;
  • Stop-Service – หยุด service (cmdlet ส่งข้อความหยุดไปยัง Windows Service Manager);
  • Suspend-Service – ระงับ service บริการที่ถูกระงับยังคงทำงานอยู่ แต่ไม่ทำอะไรจนกว่าจะ resume (ตัวอย่างเช่น ด้วย Resume-Service cmdlet)

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

Get-Help Start-Service

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

วิธีตรวจสอบสถานะ Windows Service ด้วย Get-Service

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

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

หากคุณไม่ทราบชื่อ service ที่แน่นอน คุณสามารถค้นหาได้โดย displayed name โดยใช้พารามิเตอร์ –DisplayName คุณสามารถใช้รายการค่าและ wildcard ได้

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

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

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

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

เพื่อแสดงคุณสมบัติทั้งหมดของ service ให้ใช้ cmdlet Select-Object:

Get-Service spooler | Select-Object *

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

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

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

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

cmdlet Get-Service มีสองพารามิเตอร์ที่ช่วยให้คุณดู service dependencies:

  • -DependentServices ช่วยแสดง services ที่พึ่งพา service ที่กำหนด
  • -RequiredServices แสดง services ที่ service ที่กำหนดพึ่งพา

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

Get-Service –Name Spooler -RequiredServices

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

คำสั่งต่อไปนี้แสดง services ที่พึ่งพา Spooler:

Get-Service –Name Spooler -DependentServices

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

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

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

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

เพื่อแสดง services ที่มี startup type เป็น manual ให้รันคำสั่งนี้:

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

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

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

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

วิธีหยุด เริ่ม หรือรีสตาร์ท Service ด้วย PowerShell

คุณสามารถหยุด service โดยใช้ cmdlet Stop-Service เพื่อหยุด Spooler ให้รันคำสั่ง:

Stop-Service -Name spooler

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

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

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

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

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

เพื่อบังคับให้ service หยุด ให้ใช้พารามิเตอร์ –Force คุณควรจำว่า dependent services ทั้งหมดก็จะหยุดด้วย:

Stop-Service samss –Force -Passthru

คำสั่งต่อไปนี้จะหยุด services ที่ระบุ (bits, spooler) หากพวกเขาอยู่ในสถานะ "Running":

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

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

บางครั้ง services ค้างอยู่ในสถานะ "Stopping" และต้องถูก kill โดยบังคับ

Cmdlet Start-Service เริ่ม service ที่หยุดแล้ว:

Start-Service -Name spooler -PassThru

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

Service จะไม่เริ่ม หาก dependent services ใดๆ ถูกหยุด เพื่อค้นหาและเริ่มพวกเขา ให้ใช้ one-liner PowerShell ต่อไปนี้:

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

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

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

Get-Service samss | Format-List name, canpauseandcontinue

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

เพื่อแสดงรายการ services ทั้งหมดที่อาจถูกระงับ ให้รันคำสั่งนี้:

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

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

ลองระงับ SQLBrowser service:

Suspend-Service -Name SQLBrowser

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

เพื่อ resume service ที่ถูกระงับ ให้ใช้ cmdlet Resume-Service :

Resume-Service -Name SQLBrowser

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

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

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

Cmdlet Restart-Service จะรีสตาร์ท service:

Restart-Service -Name spooler

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

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

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

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

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

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

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

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

ลองเปลี่ยน startup type ของ Spooler เป็น automatic:

Set-Service spooler –startuptype automatic –passthru

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

คุณสามารถตั้งค่า startup type เป็น manual:

Set-Service spooler –startuptype manual –passthru

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

วิธีสร้างหรือลบ Windows Service ผ่าน PowerShell

New-Service – เป็น cmdlet สำหรับสร้าง service ใหม่ใน Windows ระบุชื่อและ executable file สำหรับ service ใหม่ (คุณแม้แต่สามารถรัน PowerShell script เป็น Windows service ได้)

ลองสร้าง service ใหม่ชื่อ TestSvc:

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

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

รับข้อมูลเกี่ยวกับ startup type และคำอธิบายของ service โดยใช้ cmdlet Get-WmiObject

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

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

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

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

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

เพื่อลบ service ให้รันคำสั่งนี้:

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

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

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

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

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

เพื่อเปลี่ยน username และ password สำหรับ Windows Service ให้รันคำสั่งต่อไปนี้:

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

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

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