Eski PowerShell Uzaktan İletişim Yapılandırmalarını Kaldırma
Bu konuyu daha önce tartıştığımdan eminim ancak Microsoft'un yakında PowerShell 7.2'yi piyasaya sürmesi planlanıyor, bu konuyu tekrar gözden geçirmenin iyi olabileceğini düşündüm. İşte potansiyel sorun. Bir süredir PowerShell 7 sürümlerini yüklüyorsanız ve PowerShell uzaktan iletişimini etkinleştiriyorsanız, büyük olasılıkla bunun gibi uzaktan oturum yapılandırmalarının bir listesine sahipsiniz.
Get-PSSessionConfiguration'ı Windows PowerShell'de çalıştırırsanız, Windows PowerShell 5,1 oturumlarına ek olarak bunları da kullanacaksınız. Tüm bu konfigürasyonlara sahip olmakta herhangi bir sorun olmayabilir, ancak kişisel olarak bunu biraz karmaşık buluyorum. Kullanılmayan bir şeyi saklamayı sevmiyorum. Biraz temizlik zamanı.
Kaydı Sil-PSSessionConfiguration
Unregister-PSSessionConfiguration kullanılarak bir oturum yapılandırmasının kaldırılması yeterince basittir. Yapılandırma adını belirtin ve gitti. Cmdlet ayrıca her zaman kullanmanızı tavsiye ettiğim -WhatIf ve -Confirm'i de destekler. Bu, marangozun "İki kere ölç, bir kere kes" sözüne eşdeğerdir. Ancak mevcut PowerShell sürümüyle ilişkili oturum yapılandırması dışında kullanmadığım her şeyi boşaltmanın kolay bir yolunu istiyorum. Benim sistemimde 7.1.5. Ek bir değişiklik olarak, uzaktan iletişim yapılandırması da dahil olmak üzere PowerShell 7.2'nin en son önizlemesini de yükledim. Bunu da saklamak isterim. Zamanla bu temizlik görevini tekrar yapmam gerekeceğini biliyorum, bu yüzden bir PowerShell işlevi de oluşturabilirim.
Remove-ObsoleteSessionConfiguration
İşlevim Windows PowerShell 5.1'in yanı sıra PowerShell 7'de çalışacak şekilde yazılmıştır. Windows PowerShell'de çalışıyorsam, varsayılan oturum yapılandırmalarını hariç tutmak istiyorum. Düzenli ifade kalıbı kullanacağım.
$Exclude = "microsoft.powershell|microsoft.powershell.workflow|microsoft.powershell32|microsoft.windows.servermanagerworkflows|PowerShell.$($PSVersionTable.PSVersion)"
Son giriş hesaplanır ve PowerShell 7 oturum yapılandırmasına karşılık gelmelidir. Bunu Windows PowerShell'de çalıştırdığımda bu, muhtemelen hiçbir zaman var olmayacak ancak filtrelemeyi etkilemeyecek bir giriş oluşturacaktır.
(Get-PSSessionConfiguration -verbose:$False).where({$_.name -notmatch $exclude})Hafif bir performans avantajı elde etmek için Where() yöntemini kullanıyorum. Bu arada, Get-PSSessionConfiguration için Verbose çıktısını kasıtlı olarak kapatıyorum. Bu komutun çıktısı, çalıştırılacak işlevleri ve çok az yararlı bilgiyi gösterir. Ayrıntılı çıktının geliştirme sırasında kullanıldığından şüpheleniyorum ki bu iyi bir tekniktir, ancak daha sonra ayrıntılı çıktı hiçbir zaman revize edilmedi.
Daha sonra her oturum yapılandırması Unregister-PSSessionConfiguration'a aktarılır.
Unregister-PSSessionConfiguration -Verbose:$false -ConfirmYine aynı sebepten dolayı Verbose çıktısını kapatıyorum. Ayrıca açıkça -Confirm parametresini kullanıyorum. Oturum yapılandırmasını kaldırmamın her zaman sorulmasını istiyorum.
İşlevim -Whatif desteğini içeriyor.
Tabii fonksiyonu -Whatif olmadan çalıştırdığımda onaylama işlemi devreye giriyor.
Kaldırılacak yapılandırmaları ve PowerShell önizlemesi gibi tutmak istediklerimi seçebilirim.
Dene
İşte kullanıyorum kodudur. Ayrıca about_Functions_CmdletBindingAttribute yardım konusunu da okumanızı tavsiye ederim.
#requires -version 5.1
#requires -RunAsAdministrator
Function Remove-ObsoleteSessionConfiguration {
[cmdletbinding(SupportsShouldProcess,ConfirmImpact="High")]
Param()
Begin {
Write-Verbose "[$((Get-Date).TimeofDay) BEGIN ] Starting $($myinvocation.mycommand)"
#exclude these default configurations as a regex pattern
$Exclude = "microsoft.powershell|microsoft.powershell.workflow|microsoft.powershell32|microsoft.windows.servermanagerworkflows|PowerShell.$($PSVersionTable.PSVersion)"
Write-Verbose "[$((Get-Date).TimeofDay) BEGIN ] Excluding $Exclude"
} #begin
Process {
Write-Verbose "[$((Get-Date).TimeofDay) PROCESS] Getting non-default PowerShell Remoting configurations"
<#
turn off Verbose output for Get-PSSessionConfiguration and Unregister-PSSessionConfiguration.
These command displays PowerShell code which adds no value for my purpose.
#>
(Get-PSSessionConfiguration -verbose:$False).where({$_.name -notmatch $exclude}) |
Unregister-PSSessionConfiguration -Verbose:$false -Confirm
} #process
End {
Write-Verbose "[$((Get-Date).TimeofDay) END ] Ending $($myinvocation.mycommand)"
} #end
} #close Remove-PSRemotingConfigurationÇok dikkatli kullanın ve özellikle kendi özel oturum yapılandırmalarınızı oluşturduysanız, üretim dışı bir ortamda kapsamlı bir şekilde test edin.
Özel yapılandırmalarınız varsa, gerekirse bunları yeniden oluşturmak için gerekli tüm dosyalara sahip olduğunuzdan emin olun. Bu fonksiyonu çalıştırdıktan sonra WinRM servisi ile yeniden başlatmalısınız.



