ก่อนที่ฉันจะโดนยิงฉันรู้วิธีกำหนดเวลางานเริ่มบริการใหม่ด้วย PowerShell หรือให้สิทธิ์ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบเพื่อเริ่มบริการใหม่ นั่นไม่ใช่ปัญหา อย่างไรก็ตามปัญหาคือการรวมกันของทั้งสามงานรวมกัน
ฉันมีบริการ windows ที่ต้องการประมวลผลไฟล์ในโฟลเดอร์เครือข่าย ดังนั้นจึงเข้าสู่ระบบด้วย "บัญชีบริการ" ที่จริงแล้วเป็นเพียงบัญชีโดเมนปกติ บัญชีโดเมนนี้ไม่ใช่ผู้ดูแล แต่มีสิทธิ์การเข้าถึงโฟลเดอร์ดังกล่าว บริการทำงานได้ดีและทำงานได้
อย่างไรก็ตามบางครั้งมีข้อผิดพลาดในไฟล์ใดไฟล์หนึ่งที่ป้องกันไฟล์อื่นไม่ให้ถูกประมวลผล โดยปกติจะใช้เวลาสักครู่ก่อนที่คนจะสังเกตเห็นและมีงานค้างบางส่วน
ดังนั้นฉันจึงสร้างสคริปต์การตรวจสอบใน PowerShell ที่สำรวจโฟลเดอร์เครือข่ายสำหรับไฟล์ที่ผิดพลาดเหล่านี้ หากพบไฟล์เหล่านั้นจะถูกย้ายไปยังโฟลเดอร์ชั่วคราวเพื่อตรวจสอบและจำเป็นต้องเริ่มบริการใหม่
ฉันให้สิทธิ์บัญชีบริการผ่านนโยบายกลุ่มเพื่อเริ่มและหยุดบริการ
เมื่อฉันเข้าสู่เซิร์ฟเวอร์ด้วยบัญชีบริการฉันสามารถเริ่มบริการด้วยตนเองโดยใช้ Services MMC ฉันยังสามารถเรียกใช้สคริปต์ powershell และทำสิ่งที่ควรจะทำ: สำรวจโฟลเดอร์ย้ายไฟล์และเริ่มบริการ ที่ดี!
ในระยะต่อไปฉันสร้างงานที่กำหนดเวลาไว้ซึ่งทำงานทุกๆ 10 นาที งานใช้บัญชีบริการเดียวกับบริการเพื่อเรียกใช้งานสคริปต์ PowerShell มีการทำเครื่องหมายที่ช่อง "ดำเนินการด้วยสิทธิ์ระดับสูง" อย่างที่ฉันบอกว่าสคริปต์ powershell ต้องการการเข้าถึงไดรฟ์เครือข่ายดังนั้นฉันจึงไม่สามารถเรียกใช้ในฐานะผู้ดูแลระบบเซิร์ฟเวอร์ในพื้นที่และฉันไม่ต้องการใช้ข้อมูลประจำตัวของผู้ดูแลโดเมนสำหรับงานที่มีลักษณะเช่นนี้ (ฉันพยายามใช้หลักการของสิทธิ์น้อยที่สุดเท่าที่จะทำได้)
ฉันให้สิทธิ์บริการบัญชี "เข้าสู่ระบบเป็นชุดงาน" บนเซิร์ฟเวอร์ภายในโดยใช้ Local Security Policy MMC
ตอนนี้สำหรับส่วนที่ฉันไม่สามารถเข้าใจได้: ในเวลาที่กำหนดภารกิจที่กำหนดเวลาไว้เสร็จสมบูรณ์แล้วและสคริปต์ PowerShell กำลังดำเนินการอยู่ สคริปต์สำรวจความคิดเห็นโฟลเดอร์และไฟล์ข้อผิดพลาดจะถูกย้าย สิ่งเดียวที่ใช้งานไม่ได้คือการเริ่มบริการใหม่ ... ?! อีกครั้งการรันสคริปต์ด้วยตนเองเมื่อผู้ใช้รายเดียวกันทำงานได้อย่างสมบูรณ์
ฉันไม่ค่อยเห็นตัวแสดงเหตุการณ์มากนัก แต่การบันทึกสคริปต์ของฉันระบุข้อผิดพลาดนี้:
TerminatingError (Stop-Service): "ไม่สามารถเปิด Service Control Manager บนคอมพิวเตอร์ '.' การดำเนินการนี้อาจต้องใช้สิทธิ์อื่น ๆ "
คำสั่งที่ฉันใช้เพื่อเริ่มบริการใหม่คือ:
Stop-Service -Verbose -DisplayName $($service[1])
...
Start-Service -Verbose -DisplayName $($service[1])
(ฉันใช้ windows server 2012 R2 และ powershell รุ่น 4 บนโดเมน 2008 R2)
อัปเดต: ฉันทั้งคู่พยายามตั้งค่าสิทธิ์บริการสำหรับผู้ใช้โดยใช้ subinacl (ตามที่อธิบายไว้ที่นี่ ) และตั้งค่าสตริง SDDL ด้วยตนเอง (ดังอธิบายไว้ที่นี่ ) ดังนั้นแฟล็กควบคุมของฉันจึงมีลักษณะดังนี้ (A ;; CCLCSWRPWPDTLOCRRC ;; S-1- X-XX-XXXXXXXXXX-XXXXXXXX-xxxxxxxxx-XXXX) ฉันพยายามตั้งค่าสิทธิ์ของบริการเป็น Full Control ใน GPO สิ่งเหล่านี้ไม่สามารถแก้ไขปัญหาได้ ฉันต้องมีปัญหากับสิทธิ์ใช้งานบางแห่งที่ฉันยังคงมองเห็นอยู่เพราะเมื่อฉันกำหนดเวลางานด้วยบัญชีโดเมนที่เป็นผู้ดูแลระบบภายในเซิร์ฟเวอร์ก็ทำงานได้ดี
Set-Service $($service[1]) -status stopped -ComputerName . -Verbose ....
แทนStop-Service
CmdLet ได้อย่างไร เห็นได้ชัดว่า Stop-Service และ Start-Service ไม่สามารถใช้รีโมตได้ตามคำตอบนี้: ไม่สามารถใช้ Get-Service –ComputerName บนคอมพิวเตอร์ระยะไกลและข้อความแสดงข้อผิดพลาดของคุณอาจเกี่ยวข้องกับการพยายามเชื่อมต่อกับ localhost "remote" (<== นั่นคือจุดที่นั่น)