1.06.2018

Windows'da güncelleştirmeleri komut satırından yükleme

Linux ile fazla içli dışlı olunca insan Windows'da da aynı şeyleri arıyor. Linux'taki bütün güncellemelerin komut satırından yönetilmesi çok güzel. Powershell ile bunu Windows'da yapmayı bulunca çok hoşuma gitti.

Sanıyorum sürüm 3'ten beri Powershell'de PoweShellGet adında bir sağlayıcı (provider) bulunuyor. Bu sağlayıcı aracılığıyla bazı ek paketler (packages) yüklenebiliyor. Bunlardan biri de PSWindowsUpdate paketi.

Öncelikle PowerShell ile gelen modülleri görelim:

PS> Get-Module -ListAvailable

    Directory: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                   ExportedCommands
---------- -------    ----                   ----------------
Script     1.1.7.2    PackageManagement      {Find-Package, Get-Package, ...
Manifest   2.0.2      Posh-SSH               {Get-SCPFile, Get-SCPFolder, ...
Script     1.6.5      PowerShellGet          {Find-Command, Find-DSCResource, ...
Binary     2.0.0.4    PSWindowsUpdate        {Enable-WURemoting, Get-WUJob, ...


    Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules


ModuleType Version    Name                   ExportedCommands
---------- -------    ----                   ----------------
Manifest   1.0.0.0    ActiveDirectory        {Add-ADCentralAccessPolicyMember,...
Manifest   1.0.0.0    AppBackgroundTask      {Disable-AppBackgroundTaskDiagnosticLog, ...
Manifest   2.0.0.0    AppLocker              {Get-AppLockerFileInformation, ...


Liste bu kadar değild, kısa kestim. Burada kalın olarak vurguladığım kısım, bahsettiğim PowerShellGet modülü. Yanında bu modül ile gelen cmdlet'ler listelenmiş. Ben bunu güncellediğim için sürüm 1.6.5 gözüküyor. Güncellemek için

PS> Install-Module -Name PowerShellGet

kullanmak gerek. Tüm kurulumlar için yönetici yetkileri gerek. Ayrıca bu adımda NuGet'i de kurmak isteyecek, izin vermek durumundayız. Bunu yapınca sistemde 2 tane PoweShellGet olabilir, eski sürümü

$env:ProgramFiles\WindowsPowerShell\Modules\PowerShellGet

konumundan silebiliriz. Aslında Update-Module diye de bir cmdlet var, ama sadece Install-Module ile kurulan modüller Update-Module kullanarak güncellenebiliyormuş

Sonrasında PowerShellGet sağlayıcısının içinde ne gibi paketler var diye bakmak için Find-Package cmdlet'ini kullanabiliriz (öncesinde execution policy'yi remotesigned olarak ayarlamak gerekebilir):

Find-Package -ProviderName PowerShellGet

Bende 2820 tane paket çıktı. Bu paketlerden biri de PSWindowsUpdate. Yüklemek için şu komudu kullandım:

Install-Package -Name PSWindowsUpdate

Birkaç saniye içinde kuruldu. Bu paket ile acaba hangi komutlar geldi?

PS> Get-Command -Module PSWindowsUpdate

CommandType     Name                                 Version    Source
-----------     ----                                 -------    ------
Alias           Download-WindowsUpdate               2.0.0.4    PSWindowsUpdate
Alias           Get-WUInstall                        2.0.0.4    PSWindowsUpdate
Alias           Get-WUList                           2.0.0.4    PSWindowsUpdate
Alias           Hide-WindowsUpdate                   2.0.0.4    PSWindowsUpdate
Alias           Install-WindowsUpdate                2.0.0.4    PSWindowsUpdate
Alias           Show-WindowsUpdate                   2.0.0.4    PSWindowsUpdate
Alias           UnHide-WindowsUpdate                 2.0.0.4    PSWindowsUpdate
Alias           Uninstall-WindowsUpdate              2.0.0.4    PSWindowsUpdate
Cmdlet          Add-WUServiceManager                 2.0.0.4    PSWindowsUpdate
Cmdlet          Enable-WURemoting                    2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WindowsUpdate                    2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUApiVersion                     2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUHistory                        2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUInstallerStatus                2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUJob                            2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WULastResults                    2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WURebootStatus                   2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUServiceManager                 2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUSettings                       2.0.0.4    PSWindowsUpdate
Cmdlet          Get-WUTest                           2.0.0.4    PSWindowsUpdate
Cmdlet          Invoke-WUJob                         2.0.0.4    PSWindowsUpdate
Cmdlet          Remove-WindowsUpdate                 2.0.0.4    PSWindowsUpdate
Cmdlet          Remove-WUServiceManager              2.0.0.4    PSWindowsUpdate
Cmdlet          Set-WUSettings                       2.0.0.4    PSWindowsUpdate
Cmdlet          Update-WUModule                      2.0.0.4    PSWindowsUpdate


Şimdi Windows güncellemelerini kontrol edelim:

PS> Get-WindowsUpdate

Bu aşamada her güncelleştirme için status sütununda bazı kısatlamar yer alacak. Bunların anlamları şöyle:

[A|R]DIMHUB:
A: Accepted (kabul edilmiş)
R: Rejected (kabul edilmemiş)
D: Downloaded (indirilmiş)
F: Download failed (indirme başarısız)
?: Invoked (sanıyorum kurulumuna başlanmış ve devam eden)
I: Installed (kurulmuş)
R: Reboot required (tekrar başlatma bekleniyor)
M: Mandatory (zorunlu)
H: Hidden (gizlenmiş)
U: Uninstalled (kaldırılmış)
B: Beta (test aşamasında)


Bu güncellemelerin tümünü indirip kurmak istiyorsak şunu yapabiliriz:

PS> Get-WindowsUpdate -AcceptAll -Install -

Ya da belli birkaç güncelleştirmeyi saat 23:30'da kurmak üzere zamanlamak ve sonrasında gerekiyorsa otomatik olarak tekrar başltmak için:

PS> Get-WindowsUpdate -KBArticleID KB7585315 -AcceptAll -Install -ScheduleJob (Get-Date -Hour 23 -Minute 30 -Second 0) -AutoReboot

Tüm bu komutların -ComputerName anahtarını kullanarak uzak bir veya birkaç bilgisayarda da yapabiliriz.

PowershellGet altında dikkatimi bir paket daha çekti: PSScreenFetch. Linux altındaki screenfetch'in bir benzeri olabilir mi diye bir de bunu kurayım dedim:

PS> Install-Package -Name PSScreenFetch

Sonrasında da bu paket ile acaba hangi komutlar geldi diye baktım:

PS> Get-Command -Module PSScreenFetch

CommandType           Name                  Version  Source
--------------------  -----                 -------  ------
Function              Invoke-PSScreenFetch  0.0.3    psscreenfetch

Gelen Invoke-PSScreenFetch'i çalıştırdım ve sürpriz...


Windows için screenfetch! Tek kötü tarafı, sadece Windows 10'da çalışıyor. Madem yaptınız, az daha uğraşıp diğer sürümlerde de çalıştırsaydınız ya... :/

---

https://woshub.com/pswindowsupdate-module/