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

เรียกใช้สคริปต์ PowerShell Startup (เข้าสู่ระบบ) โดยใช้ GPO


Windows Group Policy อนุญาตให้คุณเรียกใช้ไฟล์สคริปต์ต่างๆ เมื่อเริ่มต้น/ปิดเครื่องคอมพิวเตอร์ หรือระหว่างการเข้าสู่ระบบ/ออกจากระบบของผู้ใช้ คุณสามารถใช้ GPO ไม่เพียงเพื่อเรียกใช้สคริปต์การเข้าสู่ระบบแบบกลุ่มแบบคลาสสิกบนคอมพิวเตอร์โดเมน (

.bat

,

.cmd

,

.vbs

) แต่ยังเรียกใช้สคริปต์ PowerShell (

.ps1

) ระหว่างการเริ่มต้น/ปิดเครื่อง/เข้าสู่ระบบ/ออกจากระบบ

ใน Windows เวอร์ชันใหม่ คุณสามารถเรียกใช้สคริปต์ PowerShell เข้าสู่ระบบ/ออกจากระบบได้โดยตรงจากตัวแก้ไข GPO (ก่อนหน้านี้จำเป็นต้องเรียกไฟล์ .ps1 จากไฟล์แบตช์ .bat เป็นพารามิเตอร์ของ

powershell.exe

เรียกใช้งานได้)

เรียกใช้คอนโซลการจัดการนโยบายกลุ่มโดเมน (

GPMC.msc

) สร้างนโยบายใหม่ (GPO) และกำหนดให้กับคอนเทนเนอร์ Active Directory เป้าหมาย (OU) กับผู้ใช้หรือคอมพิวเตอร์ (คุณสามารถใช้ตัวกรอง WMI GPO สำหรับการกำหนดเป้าหมายนโยบายแบบละเอียด) เปลี่ยนเป็นโหมดแก้ไขนโยบาย

คุณต้องเลือกส่วน GPO เพื่อเรียกใช้สคริปต์ PowerShell ขึ้นอยู่กับว่าคุณต้องการเรียกใช้สคริปต์ PS1 เมื่อใด:

  • หากคุณต้องการเรียกใช้สคริปต์ PS เมื่อผู้ใช้เข้าสู่ระบบ (ออกจากระบบ) กับคอมพิวเตอร์ (เพื่อกำหนดการตั้งค่าสภาพแวดล้อมหรือโปรแกรมของผู้ใช้: ตัวอย่างเช่น คุณต้องการสร้างลายเซ็น Outlook โดยอัตโนมัติตามคุณสมบัติของผู้ใช้ AD ปรับแต่งภาพพักหน้าจอหรือ การตั้งค่าหน้าจอเริ่มต้น) คุณต้องไปที่ส่วน GPO: การกำหนดค่าผู้ใช้ -> นโยบาย -> การตั้งค่า Windows -> สคริปต์ (เข้าสู่ระบบ/ออกจากระบบ);

  • หากคุณต้องการเรียกใช้สคริปต์ PowerShell เมื่อเริ่มต้นคอมพิวเตอร์ (เพื่อปิดใช้งานโปรโตคอลดั้งเดิม: NetBIOS และ LLMNR, SMBv1, กำหนดการตั้งค่าความปลอดภัยของคอมพิวเตอร์ ฯลฯ) หรือก่อนปิดเครื่องคอมพิวเตอร์ คุณต้องไปที่ส่วน GPO ด้วยคอมพิวเตอร์ การตั้งค่า: การกำหนดค่าคอมพิวเตอร์ -> นโยบาย -> การตั้งค่า Windows -> สคริปต์ (เริ่มต้น/ปิดเครื่อง)

วิธีเรียกใช้สคริปต์ PowerShell บน Windows Startup ด้วย Group Policy

สมมติว่าเราต้องเรียกใช้สคริปต์ PowerShell เมื่อเริ่มต้นระบบคอมพิวเตอร์ เลือกนโยบาย การเริ่มต้น และไปที่แท็บ PowerShellScripts

ตอนนี้คุณต้องคัดลอกไฟล์ด้วยสคริปต์ PowerShell ไปยังตัวควบคุมโดเมน คัดลอกไฟล์ ps1 ของคุณไปยังไดเร็กทอรี Netlogon บนตัวควบคุมโดเมน (ตัวอย่างเช่น

\\a-d.site\netlogon

).

เนื่องจากเรากำหนดค่าสคริปต์ Startup PowerShell คุณต้องตรวจสอบสิทธิ์ NTFS “Read&Execute” สำหรับ

Domain Computers

และ/หรือ

Authenticated Users

กลุ่มในการอนุญาตไฟล์ ps1

ตอนนี้คลิก เพิ่ม และระบุเส้นทาง UNC ไปยังไฟล์สคริปต์ ps1 ของคุณใน Netlogon

หากคุณเรียกใช้สคริปต์ PowerShell หลายสคริปต์ผ่าน GPO คุณสามารถควบคุมลำดับในการดำเนินการสคริปต์โดยใช้ปุ่ม ขึ้น/ลง

ในการเรียกใช้สคริปต์ PowerShell อย่างถูกต้องระหว่างการเริ่มต้นคอมพิวเตอร์ คุณต้องกำหนดค่าเวลาหน่วงก่อนที่สคริปต์จะเปิดใช้งานโดยใช้นโยบายในส่วนการกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ระบบ -> นโยบายกลุ่ม เปิดใช้งานนโยบาย “Configure Logon Script Delay ” และระบุการหน่วงเวลาเป็นนาทีก่อนที่จะเริ่มสคริปต์การเข้าสู่ระบบ (เพียงพอที่จะดำเนินการเริ่มต้นและโหลดบริการที่จำเป็นทั้งหมด) โดยปกติก็เพียงพอแล้วที่จะใส่ที่นี่ 1 หรือ 2 นาที

หากสคริปต์ PowerShell ของคุณใช้เครือข่าย Windows คุณต้องเปิดใช้งานตัวเลือก “ระบุเวลารอการประมวลผลนโยบายการเริ่มต้น” สำหรับ GPO บางตัว (การกำหนดค่าคอมพิวเตอร์ -> นโยบาย -> เทมเพลตการดูแลระบบ -> ระบบ -> นโยบายกลุ่ม) . คุณสามารถลองเริ่มจาก 60 วินาทีได้ที่นี่ หลังจากเปิดใช้งานนโยบายนี้ คอมพิวเตอร์ของคุณจะรอ 60 วินาทีสำหรับการแจ้งเตือนความพร้อมใช้งานของเครือข่ายก่อนที่จะเรียกใช้สคริปต์เริ่มต้นของคุณ นี่เป็นเวลาเพียงพอที่จะเริ่มต้นสแต็กเครือข่าย Windows

บน Windows Server 2012R2 และ Windows 8.1 และใหม่กว่า สคริปต์ PowerShell ใน GPO จะถูกเรียกใช้จากไดเร็กทอรี NetLogon ในโหมดบายพาส ซึ่งหมายความว่าการตั้งค่านโยบายการดำเนินการสคริปต์ของ PowerShell จะถูกละเว้น หากคุณต้องการเรียกใช้สคริปต์จากโฟลเดอร์ที่ใช้ร่วมกันอื่น หรือหากคุณยังมีไคลเอนต์ Windows 7 หรือ Windows Server 2008R2 บนเครือข่ายของคุณ คุณต้องกำหนดค่านโยบายการดำเนินการสคริปต์ PowerShell

ตามค่าเริ่มต้น การตั้งค่าความปลอดภัยของ Windows ไม่อนุญาตให้เรียกใช้สคริปต์ PowerShell สามารถรับค่าปัจจุบันของการตั้งค่านโยบายการดำเนินการสคริปต์ PowerShell ได้โดยใช้

Get-ExecutionPolicy

ซม. หากไม่ได้กำหนดค่านโยบาย คำสั่งจะส่งกลับเป็น จำกัด (สคริปต์ใดๆ จะถูกบล็อก) การตั้งค่าความปลอดภัยสำหรับการเรียกใช้สคริปต์ PowerShell สามารถกำหนดค่าผ่านนโยบาย “เปิดการทำงานของสคริปต์” (ในส่วนการกำหนดค่าคอมพิวเตอร์ GPO -> เทมเพลตการดูแลระบบ -> ส่วนประกอบของ Windows -> Windows PowerShell) ค่านโยบายที่เป็นไปได้:

  • อนุญาตเฉพาะสคริปต์ที่ลงนามแล้วเท่านั้น (AllSigned) - คุณสามารถเรียกใช้ได้เฉพาะสคริปต์ PowerShell ที่ลงนามแล้วเท่านั้น (“จะลงนามสคริปต์ PowerShell แบบดิจิทัลได้อย่างไร ”) — นี่เป็นตัวเลือกที่ดีที่สุดจากมุมมองด้านความปลอดภัย

  • อนุญาตสคริปต์ในเครื่องและสคริปต์ที่เซ็นชื่อจากระยะไกล (RemoteSigned) - คุณสามารถเรียกใช้สคริปต์ระยะไกลในเครื่องและลงชื่อระยะไกลได้

  • อนุญาตสคริปต์ทั้งหมด (ไม่จำกัด) - ตัวเลือกที่ไม่ปลอดภัยที่สุด เนื่องจากอนุญาตให้เรียกใช้สคริปต์ PowerShell

หากการตั้งค่านโยบายการดำเนินการสคริปต์ PowerShell ไม่เหมาะกับคุณ คุณสามารถเรียกใช้สคริปต์ PowerShell ในโหมด บายพาส (สคริปต์ไม่ถูกบล็อก และคำเตือนจะไม่ปรากฏขึ้น)

ในการดำเนินการนี้ ให้เรียกใช้สคริปต์ PowerShell จากส่วน การเริ่มต้น -> สคริปต์ ในส่วนนี้ คุณสามารถเรียกใช้สคริปต์ PS1 ของคุณโดยเรียกใช้ไฟล์ปฏิบัติการ powershell.exe (คล้ายกับสคริปต์ที่อธิบายไว้ในบทความ) ชุด:

  • ชื่อสคริปต์:

    %windir%\System32\WindowsPowerShell\v1.0\powershell.exe
  • พารามิเตอร์สคริปต์:

     -Noninteractive -ExecutionPolicy Bypass -Noprofile -file %~dp0MyPSScript.ps1

ระยะ

%~dp0

เป็นตัวแปรสภาพแวดล้อมที่แปลงเป็นพาธ UNC ไปยังไดเร็กทอรีสคริปต์โดยอัตโนมัติ (ในกรณีนี้คือ NETLOGON)

ในกรณีนี้ คุณถูกบังคับให้อนุญาตให้สคริปต์ PowerShell ใดๆ (แม้จะไม่น่าเชื่อถือ) ทำงานโดยใช้พารามิเตอร์ Bypass

รีบูตเครื่องคอมพิวเตอร์ของคุณเพื่ออัปเดตการตั้งค่า GPO และตรวจสอบว่าสคริปต์ PowerShell ของคุณทำงานหลังจากบูต Windows

เรียกใช้สคริปต์ Windows PowerShell เมื่อผู้ใช้เข้าสู่ระบบ/ออกจากระบบ

มาดูวิธีเรียกใช้สคริปต์ PowerShell โดยอัตโนมัติเมื่อผู้ใช้เข้าสู่ระบบ (หรือออกจากระบบ) Windows

หากคุณจำเป็นต้องเรียกใช้สคริปต์ไม่ใช่เมื่อเริ่มต้นระบบคอมพิวเตอร์ แต่หลังจากที่ผู้ใช้เข้าสู่ระบบ Windows (สำหรับผู้ใช้แต่ละรายบนคอมพิวเตอร์) คุณต้องเชื่อมโยง GPO กับ Active Directory OU กับผู้ใช้ ในกรณีนี้ สคริปต์ PowerShell จำเป็นต้องได้รับการกำหนดค่าในส่วนการกำหนดค่าผู้ใช้ของ GPO ของคุณ

หากคุณต้องการให้นโยบายมีผลกับผู้ใช้ทุกคนในคอมพิวเตอร์เครื่องใดเครื่องหนึ่ง คุณต้องเชื่อมโยงนโยบายกับ OU กับคอมพิวเตอร์และเปิดใช้งานพารามิเตอร์ กำหนดค่าโหมดการประมวลผลลูปแบ็คนโยบายกลุ่มผู้ใช้ ในการกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ระบบ -> นโยบายกลุ่ม) หากคุณไม่เปิดใช้งานการประมวลผลแบบย้อนกลับ พารามิเตอร์จากส่วนการกำหนดค่าผู้ใช้จะไม่ถูกนำไปใช้กับผู้ใช้ สำหรับข้อมูลเพิ่มเติม ตรวจสอบโพสต์นโยบายกลุ่มที่ไม่ได้ใช้กับผู้ใช้หรือคอมพิวเตอร์

ในตัวอย่างนี้ ฉันจะใช้สคริปต์ PowerShell อย่างง่ายที่เขียนเวลาเข้าสู่ระบบของผู้ใช้ไปยังไฟล์บันทึกข้อความ

  1. คัดลอกไฟล์สคริปต์ PowerShell ของคุณไปที่

    \\a-d.site\NETLOGON\

    โฟลเดอร์บนตัวควบคุมโดเมน Active Directory

  2. ไปที่การกำหนดค่าผู้ใช้ -> นโยบาย -> การตั้งค่า Windows -> สคริปต์ -> เข้าสู่ระบบ

  3. ไปที่แท็บ PowerShell Scripts และเพิ่มไฟล์สคริปต์ PS1 ของคุณ (เช่น ใช้เส้นทาง UNC

    \\a-d.site\NETLOGON\UserLog.ps1

    );

  4. ล็อกอินผู้ใช้อีกครั้งบนคอมพิวเตอร์เป้าหมาย

  5. สคริปต์ PowerShell ของคุณจะเปิดใช้งานโดยอัตโนมัติผ่าน GPO เมื่อผู้ใช้เข้าสู่ระบบ

  6. คุณสามารถตรวจสอบว่าสคริปต์การเข้าสู่ระบบของผู้ใช้ดำเนินการสำเร็จโดยรหัสเหตุการณ์ 5018u ในส่วน Microsoft-Windows-GroupPolicy/Operational ของ Event Viewer:

    Completed Logon script for a-d\jsmith in 11 seconds.

หากคุณต้องการให้ผู้ใช้ไม่สามารถเข้าถึงเดสก์ท็อปได้จนกว่าสคริปต์จะเสร็จสิ้น คุณต้องเปิดใช้งานพารามิเตอร์ GPO เรียกใช้สคริปต์การเข้าสู่ระบบพร้อมกัน (การกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ระบบ -> การเข้าสู่ระบบ) . ในกรณีนี้ กระบวนการ explorer.exe จะไม่เริ่มทำงานจนกว่านโยบายและสคริปต์การเข้าสู่ระบบทั้งหมดจะเสร็จสิ้น (ซึ่งจะเพิ่มเวลาการเข้าสู่ระบบของผู้ใช้!)

โปรดทราบว่าสคริปต์ทำงานด้วยสิทธิ์ของผู้ใช้ปัจจุบัน หากผู้ใช้มีสิทธิ์ระดับผู้ดูแลระบบในคอมพิวเตอร์และเปิดใช้งานการตั้งค่าการควบคุมบัญชีผู้ใช้ (UAC) สคริปต์ PowerShell จะไม่สามารถเปลี่ยนแปลงที่ต้องการสิทธิ์ขั้นสูงได้

ในการเรียกใช้สคริปต์การเข้าสู่ระบบ PowerShell ด้วยสิทธิ์ผู้ใช้ขั้นสูง คุณสามารถใช้งานตัวจัดกำหนดการได้

  1. สร้างงาน Task Scheduler ใหม่ภายใต้ User Configuration -> Preferences -> Control Panel Settings -> Scheduled Task;

  2. ในแท็บ ทั่วไป ระบุว่างานจะเริ่มในนามของผู้ใช้ปัจจุบัน

    %LogonDomain%\%LogonUser

    และเปิดใช้งาน

    Run with highest privileges

    ตัวเลือก;

  3. ในแท็บ ทริกเกอร์ ให้ระบุว่างานควรเริ่มต้น เมื่อเข้าสู่ระบบ

  4. ระบุเส้นทางไปยังไฟล์สคริปต์ PowerShell ในแท็บ การดำเนินการ:

การดำเนินการ: เริ่มโปรแกรม
โปรแกรม/สคริปต์:

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe

เพิ่มอาร์กิวเมนต์ (ไม่บังคับ):

-ExecutionPolicy Bypass -command "& \\a-d.site\Netlogon\Your_PS_Script.ps1"

เรียนรู้เพิ่มเติมเกี่ยวกับการกำหนดค่างาน Windows Scheduler ผ่าน GPO

สคริปต์ PowerShell ดังกล่าวจะทำงานในฐานะผู้ดูแลระบบ (หากผู้ใช้โดเมนถูกเพิ่มลงในกลุ่มผู้ดูแลระบบภายในเครื่อง)

สคริปต์การเข้าสู่ระบบบางอย่างจำเป็นต้องเรียกใช้สำหรับผู้ใช้แต่ละคนเพียงครั้งเดียวในการเข้าสู่ระบบคอมพิวเตอร์ครั้งแรก (การเริ่มต้นสภาพแวดล้อมการทำงาน การคัดลอกโฟลเดอร์หรือไฟล์การกำหนดค่า การสร้างทางลัด ฯลฯ) เคล็ดลับง่ายๆ ที่ช่วยให้คุณเรียกใช้สคริปต์ได้เพียงครั้งเดียวโดยใช้ GPO

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