ปัญหาเกี่ยวกับเซิร์ฟเวอร์การแพตช์จากระยะไกลโดยใช้ winrm และ Microsoft.Update.Session


10

ฉันมีเครือข่ายพร้อมเซิร์ฟเวอร์ windows 2003, 2008 และ 2008r2 ฉันมีสคริปต์ PowerShell ที่ฉันเขียนเพื่อแก้ไขเครื่องท้องถิ่นโดยใช้วัตถุ com "Microsoft.Update" (คล้ายกับการ อัปเดต PowerShell ของ Windows Update ) สคริปต์ของฉันทำงานได้อย่างน่าอัศจรรย์ในพื้นที่ แต่ฉันต้องการใช้ฟังก์ชั่นจากระยะไกลเนื่องจากฉันมีเซิร์ฟเวอร์จำนวนพอสมควรที่จะจัดการ ในกรณีนั้นมันจะล้มลง (คล้ายกับโพสต์อื่นซึ่งไม่ได้แก้ไข)

อย่างไรก็ตามฉันสามารถจำกัดความล้มเหลวให้แคบลงได้ถึงสองวิธีในแต่ละชั้นเรียน

(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateDownloader()
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateInstaller()

หากคุณเรียกใช้สิ่งเหล่านี้ใน PowerShell ภายในเครื่องในฐานะผู้ดูแลระบบคุณจะไม่มีปัญหา หากคุณพยายามใช้คำสั่ง invoke-(หรือเข้าสู่เซสชันหรือ winrs) คุณจะได้รับข้อผิดพลาดดังต่อไปนี้ (นี่เป็นการทดสอบกับ localhost แต่โฮสต์ใดจะทำฉันได้ลองด้วยวิธีการรับรองความถูกต้องที่แตกต่างกันเช่น credssp และ kerberos);

PS C:\> Invoke-Command -ComputerName localhost -ScriptBlock { (New-Object -ComObject "microsoft.update.session").createUpdateDownloader()}
Exception calling "CreateUpdateDownloader" with "0" argument(s): "Access is denied. (Exception from HRESULT: 0x80070005
 (E_ACCESSDENIED))"
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

ฉันเคยเห็นสิ่งนี้พูดถึงในบล็อกว่าเป็นบั๊ก แต่ไม่มีการสำรองข้อมูลสำหรับการอ้างสิทธิ์นั้น มีวิธีแก้ไขสองวิธีอยู่และทั้งคู่ก็ไม่ทำให้ฉันมีความสุข

  • ใช้ psexec เพื่อรันคำสั่งในฐานะผู้ใช้ระบบ PSExec คือสิ่งที่ฉันพยายามไม่ใช้เนื่องจากพิสูจน์แล้วว่าไม่น่าเชื่อถือ ฉันยังต้องการวิธีแก้ปัญหา powerhell บริสุทธิ์
  • สร้างงานที่กำหนดเวลาไว้และบอกให้เรียกใช้สคริปต์ของคุณในฐานะผู้ใช้ระบบ (ผ่านโพสต์ของเขา ) สิ่งนี้ไม่เพียง แต่ยุ่ง แต่ฉันจะไม่ได้รับผลการอัพเดท ฉันจะต้องลงชื่อเข้าใช้ไฟล์หรืออัปเดตฐานข้อมูลหรือบางอย่าง

ฉันเปิดให้วิธีอื่นในการเรียกใช้การอัปเดตในโฮสต์จากระยะไกลเนื่องจากดูเหมือนว่าจะมีปัญหาผู้คนจำนวนมากกำลังกดปุ่ม

ฉันพบเอกสารบางอย่างที่อธิบายข้อความ แต่ไม่ใช่เหตุผลหรือวิธีแก้ปัญหา

ส่งคืนค่าส่งคืน S_OK ถ้าสำเร็จ มิฉะนั้นส่งคืนรหัสข้อผิดพลาด COM หรือ Windows

This method can also return the following error codes.
Return code   Description
E_INVALIDARGA parameter value is invalid. 
E_ACCESSDENIED    This method cannot be called from a remote computer.

จะรู้ได้อย่างไรว่าฉันอยู่บนคอมพิวเตอร์ระยะไกล


ดูเหมือนจะซับซ้อนกว่าการยืนขึ้นอินสแตนซ์ WSUS และไปตามเส้นทางนั้น คุณเคยคิดเส้นทางนั้นไหม?
Driftpeasant

คุณไม่สามารถควบคุมได้อย่างแน่นอนว่าจะซื้อเซิร์ฟเวอร์เมื่อใดและตรวจสอบให้แน่ใจว่าจะกลับมาพร้อมกับ WSUS เพียงอย่างเดียว เราใช้ประโยชน์จากมันสำหรับการปรับปรุงตัวเอง ฉันสนใจถ้าคุณสามารถกระตุ้นให้ทำตามที่ต้องการ
reconbot

ฉันมีปัญหาเดียวกันกับการใช้ PowerShell Web Access บน Server 2012 เบื้องหลังมันยังใช้การควบคุมระยะไกลของ PowerShell ข้อผิดพลาดเดียวกัน
Peter Hahndorf

1
คำตอบที่เป็นไปได้ที่นี่serverfault.com/a/474031/23300
Nic

@reconbot ฉันรู้ว่ามันเป็นคำถามที่เก่ามาก แต่ฉันก็กำลังเผชิญกับปัญหา คุณได้รับการแก้ไขหรือวิธีอื่นหรือไม่?
เครื่องคำนวณ

คำตอบ:


6

คุณไม่สามารถทำมันให้เป็นคู่ได้เพราะ MS ไม่อนุญาตให้คุณทำผ่าน WUApi

ดูรายละเอียดได้ที่นี่: http://msdn.microsoft.com/en-us/library/windows/desktop/aa387288(v=vs.85).aspx

คุณสามารถลองใช้งานตามกำหนดเวลาเพื่อทำสิ่งนี้ให้สำเร็จ


0

คำสั่งดังกล่าวจำเป็นต้องถูกรันด้วยสิทธิพิเศษบนเครื่องระยะไกลซึ่งจำเป็นต้องเรียกใช้ในฐานะผู้ใช้ที่เป็นผู้ดูแลระบบโดเมนหรือผู้ดูแลระบบของเครื่องระยะไกล

หากคุณเป็นกรณีแรกฉันไม่มีความช่วยเหลือ แต่คุณเป็นเพียงผู้ดูแลระบบในพื้นที่ไม่ใช่จากระยะไกลใช้get-credentialแบบนี้

$cred = get-credential

Invoke-Command -ComputerName localhost -credential $cred -scriptblock {}

แบบฟอร์มทางเลือกและแบบตรงอื่น ๆ คือการInvoke-Commandขอข้อมูลประจำตัว:

Invoke-Command -scriptblock {$ENV:username} -Credential ""

ฉันกำลังใช้งานข้อมูลรับรองของบัญชีผู้ดูแลระบบข้อผิดพลาดระบุว่า "วิธีนี้ไม่สามารถเรียกจากคอมพิวเตอร์ระยะไกลได้"
reconbot

0

ฉันสามารถใช้งานได้โดยการตั้งค่าจุดปลายทาง JEA บนเซิร์ฟเวอร์ระยะไกลเพื่อทำงานเป็นบัญชีเสมือนในท้องถิ่น

จากhttps://docs.microsoft.com/en-us/powershell/jea/session-configurations :

บัญชีเสมือนท้องถิ่น

หากบทบาทที่สนับสนุนโดยจุดปลาย JEA นี้ถูกใช้เพื่อจัดการเครื่องโลคัลและบัญชีผู้ดูแลระบบภายในนั้นเพียงพอที่จะเรียกใช้คำสั่งได้สำเร็จคุณควรกำหนดค่า JEA ให้ใช้บัญชีเสมือนในเครื่อง บัญชีเสมือนเป็นบัญชีชั่วคราวที่ไม่เหมือนใครสำหรับผู้ใช้เฉพาะและมีอายุการใช้งานยาวนานในช่วง PowerShell บนเซิร์ฟเวอร์สมาชิกหรือเวิร์กสเตชันบัญชีเสมือนเป็นของกลุ่มผู้ดูแลระบบของเครื่องคอมพิวเตอร์และมีการเข้าถึงทรัพยากรระบบส่วนใหญ่ ใน Active Directory Domain Controller บัญชีเสมือนเป็นของกลุ่ม Domain Admins ของโดเมน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.