เรียกใช้สคริปต์ 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 อย่างง่ายที่เขียนเวลาเข้าสู่ระบบของผู้ใช้ไปยังไฟล์บันทึกข้อความ
คัดลอกไฟล์สคริปต์ PowerShell ของคุณไปที่
\\a-d.site\NETLOGON\โฟลเดอร์บนตัวควบคุมโดเมน Active Directory
ไปที่การกำหนดค่าผู้ใช้ -> นโยบาย -> การตั้งค่า Windows -> สคริปต์ -> เข้าสู่ระบบ
ไปที่แท็บ PowerShell Scripts และเพิ่มไฟล์สคริปต์ PS1 ของคุณ (เช่น ใช้เส้นทาง UNC
\\a-d.site\NETLOGON\UserLog.ps1);
ล็อกอินผู้ใช้อีกครั้งบนคอมพิวเตอร์เป้าหมาย
สคริปต์ PowerShell ของคุณจะเปิดใช้งานโดยอัตโนมัติผ่าน GPO เมื่อผู้ใช้เข้าสู่ระบบ
คุณสามารถตรวจสอบว่าสคริปต์การเข้าสู่ระบบของผู้ใช้ดำเนินการสำเร็จโดยรหัสเหตุการณ์ 5018u ในส่วน Microsoft-Windows-GroupPolicy/Operational ของ Event Viewer:
Completed Logon script for a-d\jsmith in 11 seconds.
หากคุณต้องการให้ผู้ใช้ไม่สามารถเข้าถึงเดสก์ท็อปได้จนกว่าสคริปต์จะเสร็จสิ้น คุณต้องเปิดใช้งานพารามิเตอร์ GPO เรียกใช้สคริปต์การเข้าสู่ระบบพร้อมกัน (การกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ระบบ -> การเข้าสู่ระบบ) . ในกรณีนี้ กระบวนการ explorer.exe จะไม่เริ่มทำงานจนกว่านโยบายและสคริปต์การเข้าสู่ระบบทั้งหมดจะเสร็จสิ้น (ซึ่งจะเพิ่มเวลาการเข้าสู่ระบบของผู้ใช้!)
โปรดทราบว่าสคริปต์ทำงานด้วยสิทธิ์ของผู้ใช้ปัจจุบัน หากผู้ใช้มีสิทธิ์ระดับผู้ดูแลระบบในคอมพิวเตอร์และเปิดใช้งานการตั้งค่าการควบคุมบัญชีผู้ใช้ (UAC) สคริปต์ PowerShell จะไม่สามารถเปลี่ยนแปลงที่ต้องการสิทธิ์ขั้นสูงได้
ในการเรียกใช้สคริปต์การเข้าสู่ระบบ PowerShell ด้วยสิทธิ์ผู้ใช้ขั้นสูง คุณสามารถใช้งานตัวจัดกำหนดการได้
สร้างงาน Task Scheduler ใหม่ภายใต้ User Configuration -> Preferences -> Control Panel Settings -> Scheduled Task;
ในแท็บ ทั่วไป ระบุว่างานจะเริ่มในนามของผู้ใช้ปัจจุบัน
%LogonDomain%\%LogonUserและเปิดใช้งาน
Run with highest privilegesตัวเลือก;
ในแท็บ ทริกเกอร์ ให้ระบุว่างานควรเริ่มต้น เมื่อเข้าสู่ระบบ
ระบุเส้นทางไปยังไฟล์สคริปต์ 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










