
제가 일하는 도서관에서 전체 업데이트 프로세스를 자동화하려고 합니다. 저는 Chocolatey를 사용하여 모든 소프트웨어 패키지를 업데이트하고 PSWindowsUpdate 모듈을 사용하여 Windows 업데이트를 수행할 수 있는 간단한 스크립트를 작성했습니다. 그러나 PSWindowsUpdate를 사용하여 Windows 업데이트를 숨기는 데는 몇 가지 어려움이 있습니다. 내가 읽은 다양한 온라인 기사/문서에 따르면 충분히 간단해 보이지만 어떤 이유로 작동하지 않습니다. 제가 구체적으로 언급한이 Stackoverflow 질문허용되는 답변을 내 솔루션으로 적용하려고 시도했지만 쇠고기는 적용되지 않았습니다. 여기에 대한 대답도 내가 달성하려는 목표를 제대로 달성하지 못합니다. 먼저 몇 가지 배경 지식을 제공하겠습니다.
배경
저는 5대의 Windows 10 Pro 시스템과 11대의 Windows 7 Pro 시스템을 보유하고 있습니다. 모두 64비트입니다. Windows 7 시스템은 모두 이전에 WMF 5.1로 업데이트되었습니다. 업데이트 프로세스를 간소화하기 위해 Remote Desktop Enterprise Edition을 사용하여 여러 컴퓨터에서 동시에 스크립트를 실행하고 있습니다.
내가 시도한 것
나는 다양한 Google 검색과 PS 스크립트의 시행착오를 통해 내 문제를 해결하려고 상당한 시간을 보냈습니다. 원격 컴퓨터에서 스크립트를 실행하면 모든 것이 제대로 실행되고 업데이트됩니다. 문제는 제가 이미 언급했듯이 제가 지정한 Windows 업데이트를 항상 숨기지 않는다는 것입니다(어쩌면 제가 어딘가를 엉망으로 만들고 있을 수도 있기 때문입니다 하하). 내 스크립트는 다음과 같습니다.
#This script will update all chocolatey packages and will also download install any new Windows Updates
#Begin ExecutionPolicy Set
Echo "Setting Execution Policy Settings"
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned -Force -Confirm:$false
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force -Confirm:$false
Echo "Initializing Unattended Update Automation Powershell Script"
#Begin Chocolatey Update
Echo "Updating Chocolatey Packages"
#Remove Java and reinstall 64-bit only
cuninst jre8 -y
cinst jre8 -PackageParameters "/exclude:32" -y
#Queries Chocolatey.org database for updates to locally installed packages and updates them if necessary
cup all -y --ignore-checksums
#Begin Windows Update
Echo "Enabling Windows Update Services"
Get-Service bits, wuauserv | Set-Service -StartupType manual
Echo "Copying Module PSWindowsUpdate to PowerShell Modules Folder"
#Grabs copy of PSWindowsUpdate Module and copies it to remote machine
Copy-Item -Path \\DIROFFICE\WindowsUpdate\PSWindowsUpdate -Destination C:\Windows\System32\WindowsPowerShell\v1.0\Modules -recurse -force
Echo "Importing Powershell Module PSWindowsUpdate"
Import-Module -Name PSWindowsUpdate -force
refreshenv
Echo "Enabling updates for additional Microsoft components and software"
Add-WUServiceManager -ServiceID 7971f918-a847-4430-9279-4a52d1efe18d -Confirm:$false
Echo "Querying Microsoft Update Server for Windows Updates"
Get-WUList -MicrosoftUpdate
Echo "Hiding Unnecessary Updates"
Hide-WUUpdate -Title "Update for Microsoft OneDrive" -HideStatus:$true -Confirm:$false
Echo "Downloading and Installing Windows Updates"
Get-WUInstall -MicrosoftUpdate -acceptall
Echo "Stopping Windows Update Services"
Get-Service bits,wuauserv | Stop-Service
Echo "Setting CurrentUser Execution Policy Back to RemoteSigned"
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force -Confirm:$false
문제/질문
제가 궁극적으로 이루고 싶은 것은 업데이트 제목에 나타나는 특정 키워드를 기반으로 특정 업데이트를 숨기는 것입니다. 예를 들어 모든 컴퓨터에 Microsoft 2016이 설치되어 있지만 W10 및 W7 시스템 모두에서 모든 Outlook, OneDrive, Visio 및 Skype 업데이트를 숨기고 W7 시스템에서는 Microsoft Security Essentials도 숨길 수 있기를 원합니다. PSWindowsUpdate 모듈을 사용하여 특정 단어가 포함된 업데이트를 숨기는 효과적인 방법이 있습니까?
추가 참고사항
업데이트 숨기기 섹션 아래 내 스크립트에 나열된 작은 코드 줄은 단순히 테스트 목적으로 존재합니다. 처음에는 해당 업데이트의 전체 제목을 사용하여 업데이트를 숨기려고 했습니다. 예를 들어 Outlook 2016에는 제목이 "Microsoft Outlook 2016용 보안 업데이트"이거나 "Microsoft Outlook 2016용 업데이트"인 수많은 업데이트가 있었습니다. Hide-WUUpdate -Title "Update for Microsoft Outlook" -HideStatus:$true -Confirm:$false
뿐만 아니라 를 사용해 보았습니다 Hide-WUUpdate -Title "Security update for Microsoft Outlook" -HideStatus:$true -Confirm:$false
. 설치된 업데이트를 확인했을 때 Microsoft Outlook용 업데이트가 4~5개 설치되어 있는 것으로 나타났기 때문에 이것이 작동하지 않는 것 같습니다.
또한 와일드카드(*)를 사용해 보았지만 작동 방식을 완전히 이해하지 못했습니다. 나는 Hide-WUUpdate -Title "Update for Microsoft Outlook*" -HideStatus:$true -Confirm:$false
과 같은 몇 가지를 시도했습니다 Hide-WUUpdate -Title "Outlook*" -HideStatus:$true -Confirm:$false
. 나는 심지어 Hide-WUUpdate -Title "*Microsoft Oulook*" -HideStatus:$true -Confirm:$false
.
TechNet 및 MSDN에서 읽은 내용에 따르면 (*) 와일드카드는 지정된 위치에서 시작하는 문자와 일치합니다. 공백이 포함되어 있으면 이것이 깨지나요?
KB 기사 ID를 사용하는 것은 내가 선호하는 방법이 아닙니다. 숨겨야 하는 새 KB ID로 매번 스크립트를 업데이트해야 하기 때문입니다. 가능하다면 키워드 접근 방식을 선호합니다. 나는 단지 웃고 낄낄거릴 목적으로 위의 Stackoverflow 참조에 나열된 방법을 사용해 보았지만 궁극적으로 지금 내가 찾고 있는 솔루션은 아닙니다.
답변1
Hide-WUUpdate
한 번에 여러 레코드 업데이트를 지원하지 않을 수 있습니다.
Powershell에서 이에 대한 일반적인 접근 방식은 파이프라인 앞부분에서 개체의 범위를 좁힌 다음 이를 파이프라인 끝의 작업(예: Get-Process notepad | Stop-Process
)으로 보내는 것입니다. 이는 Hide-WUUpdate
개체를 입력으로 허용하는 경우에만 이 시나리오에 적용됩니다 . -Title
여러 항목을 지원하지 않을 수 있는 해당 플래그와 함께 사용하는 것만 허용할 수 있습니다 .