Tôi đã dành nhiều giờ cho việc này và thu hút sự tham gia của một số người mà tôi biết là chuyên gia PowerShell mà không gặp may. Nó sẽ đơn giản nhưng nó chắc chắn không hoạt động theo cách đó lần này.
Khách quan:
- Tôi muốn nhận tất cả các máy tính trong một OU (các máy tính trong OU sẽ thay đổi - tôi sẵn sàng sử dụng danh sách máy chủ, nhưng nó vẫn cần chạy để nhận các máy tính trong OU hàng ngày và cập nhật tệp txt trước khi tiếp tục vào nhiệm vụ thứ hai - sắp giải thích).
- Sau đó, tôi sẽ sử dụng các máy tính có trong OU để chạy gpupdate (không bắt buộc, chỉ có một chính sách được liên kết vào thời gian X hàng ngày - điều này đang được xử lý thành công bởi một nhóm tập lệnh PS khác). Tôi biết điều này có thể được thực hiện thủ công đối với OU bởi đó không phải là cách chúng tôi muốn thực hiện. Chúng tôi đang sử dụng công cụ của bên thứ ba để chạy tập lệnh PS theo lịch trình.Trình lập lịch tác vụ không được sử dụng trên máy tính này do các sự cố quản lý trước đây, nhưng bất kể công cụ của bên thứ 3 nào cũng được. Vấn đề là tôi không thể trả lại các máy tính trong OU.
Tôi CÓ THỂ trả lại tất cả các máy tính và thuộc tính cơ bản của chúng trong miền của mình bằng cách sử dụng:
Get-ADComputer -Filter *
Tuy nhiên, tôi đã không thành công khi chạy với "SearchBase" và bất kỳ Bộ lọc nào:
Get-ADComputer -SearchBase "OU=WVDTestEnvironment,DC=contoso,DC=com" -Filter "*"
Tôi đã thử di chuyển Bộ lọc đến trước SearchBase, xóa dấu ngoặc kép xung quanh *, sử dụng dấu ngoặc đơn, bỏ bộ lọc và nhập bộ lọc khi được nhắc là *, thay đổi kiểu chữ trên hầu hết mọi từ, tên OU đã xác minh, tên miền, v.v., thêm dấu cách giữa các từ OU và DC, thay đổi OU thành CN, đảm bảo rằng mô-đun đã được tải (đúng vậy).
Ngay cả khi tôi làm cho phần này hoạt động, đoạn mã của tôi vẫn tiếp tục thực hiện gpupdate sau một đường ống, nhưng tôi đã tắt hoàn toàn phần đó vì tôi không thể vượt qua phần cơ bản này để thu thập máy tính để cập nhật.
Lưu ý bổ sung - điều này đã được thử trên Windows Server 2016 và Windows Server 2019, 16 gb 4 cpus, 32 gb 8 cpus, tương ứng, chỉ để hiển thị mã lực ở đó - các HĐH có thể quan trọng vì tôi chưa gặp sự cố trong Tôi tin rằng trên các máy chủ năm 2012 đã qua và trang tôi tìm thấy phần lớn tập lệnh đang chạy nó trên 2012 R2.
Tôi đã thử chạy:
Get-ADComputer -Filter 'DistinguishedName -like "CN=contoso,CN=com"'
Ở trên không trả về lỗi, nhưng nó không trả về kết quả. Mặc dù nó cũng sẽ trả về tất cả các tài khoản máy tính trong miền.
Lỗi tôi nhận được khi cố chạy đoạn mã gốc của mình:
Get-ADComputer -SearchBase "OU=WVDTestEnvironment,DC=contoso,DC=com" -Filter "*"
dưới đây:
Mã Powershell và lỗi trả về
Đơn vị tổ chức này cũng là một đơn vị tổ chức con/phụ, vì vậy tôi cũng đã thử đưa đơn vị tổ chức cấp cao nhất vào cơ sở tìm kiếm của mình, nhưng lỗi vẫn như vậy (không có trong hình)
Get-ADComputer -SearchBase "OU=TopLevelOUName,OU=WVDTestEnvironment,DC=contoso,DC=com" -Filter "*"
Bất kỳ trợ giúp hoặc gợi ý nào sẽ được RẤT NHIỀU đánh giá cao. Tôi tự tin rằng mình sẽ không gặp bất kỳ sự cố nào với lệnh GPUpdate khi tôi có thể lấy lại tệp văn bản của máy tính hoặc máy tính được lưu trong bộ nhớ và sử dụng lệnh sau một đường ống trên cùng một dòng powershell. Tôi có thể loại bỏ đường ống, thêm một dòng mới, bất cứ điều gì cần thiết. Tôi chỉ cần lấy lại các tài khoản máy tính này vì OU này sẽ dao động rất nhiều theo thời gian.
Ban đầu tìm thấy đoạn mã PowerShell này tại https://blog.thesysadmins.co.uk/group-policy-gpupdate-an-ou-of-computers.html (xem cách 2)