Windows PowerShell 5,1 ve PowerShell 7. x arasındaki farklar

Windows PowerShell 5,1, .NET Framework v 4.5 üzerine kurulmuştur. PowerShell 6,0 sürümü ile, PowerShell .NET Core 2,0 ' de oluşturulmuş açık kaynaklı bir proje haline geldi. PowerShell 7,0, .NET Core 3,1 üzerine kurulmuştur. PowerShell 7,2 sürümü ile birlikte PowerShell, .NET 6,0 üzerine inşa edilecek. .NET Framework, .net Core 'un platformlar arası bir çözüm haline gelmesine izin verilir. PowerShell Windows, macos ve Linux üzerinde çalışır.

powershell dilinde Windows PowerShell ve powershell arasında birkaç fark vardır. farklar, Windows ve Windows olmayan platformlar ve .NET Framework ile .net Core arasındaki farklılıklardan oluşan değişiklikler arasındaki PowerShell cmdlet 'lerinin kullanılabilirliği ve davranışları açısından çok önemli bir tablodur.

bu makalede, Windows PowerShell ve geçerli PowerShell sürümü arasındaki önemli farklılıklar ve son değişiklikler özetlenmektedir. Bu Özet, eklenen yeni özellikleri veya cmdlet 'leri içermez. Bu makalede, sürümler arasında nelerin değiştiğini ele alınmaktadır. Bu makalenin amacı, PowerShell 'in geçerli durumunu ve bunun Windows PowerShell farklı olduğunu sunmaktır. Sürümler ve yeni özelliklerin eklenmesi arasındaki değişikliklere ilişkin ayrıntılı bir tartışma için, her sürüm için yenilikler makalelerine bakın .

.NET Framework vs .net Core

Linux ve macos üzerinde PowerShell, Microsoft Windows tam .NET Framework bir alt kümesi olan .net Core kullanır. PowerShell, temel alınan çerçeve türlerine ve yöntemlerine doğrudan erişim sağladığından bu önemlidir. sonuç olarak, Windows çalışan betikler, çerçevelerdeki farklılıklar nedeniyle Windows olmayan platformlarda çalışmayabilir. .net core 'daki değişiklikler hakkında daha fazla bilgi için, .NET Framework 'den .net core 'a geçiş için son değişikliklerkonusuna bakın.

.NET Standard 2,0' nin bir sürümü sayesinde PowerShell, değişiklik yapmadan birçok geleneksel Windows PowerShell modülü yükleyebilir. ayrıca, PowerShell 7, tam framework gerektiren Windows PowerShell modülleri kullanmanıza olanak tanıyan bir Windows PowerShell uyumluluk özelliği içerir.

Daha fazla bilgi için bkz.:

Belgelerde kullanılan ürün terminolojisi

PowerShell belgeleri iki tür içerik içerir: cmdlet başvurusu ve kavramsal içerik. Cmdlet başvurusu sürüme özgüdür. Sayfanın sol üst kısmında yer alan açılan menüden sürümler arasında geçiş yapabilirsiniz. Sürümleri değiştirmiyorken kavramsal içerik değişmez. Genel olarak, makale belirli bir sürüme çağrılmadıkça kavramlar tüm PowerShell sürümleri için geçerlidir.

  • PowerShell - Bu, ürün için varsayılan addır. Belgelerde bu adı kullanırken PowerShell'in geçerli sürümünden söz vardır. PowerShell ile Windows PowerShell farklar, belirli bir sürüme not edin.
  • Windows PowerShell - PowerShell .NET Framework. Windows PowerShell yalnızca Windows ve tam Çerçeve gerektirir. Hem PowerShell hem de Windows PowerShell aynı bilgisayarda Windows mümkündür.

Artık PowerShell ile gönderilmeyen modüller

Çeşitli uyumluluk nedenleriyle, aşağıdaki modüller artık PowerShell 'e dahil değildir.

  • ISE
  • Microsoft. PowerShell. LocalAccounts
  • Microsoft. PowerShell. ODataUtils
  • Microsoft. PowerShell. Operation. doğrulaması
  • PSScheduledJob
  • PSWorkflow
  • PSWorkflowUtility

PowerShell İş Akışı

PowerShell iş akışı , uzun süre çalışan veya paralel görevler için sağlam runbook 'ların oluşturulmasına izin veren Windows Workflow Foundation (WF) üzerinde Windows PowerShell bir özelliktir.

.net Core 'daki Windows Workflow Foundation desteğinin olmamasından dolayı powershell iş akışını powershell 'den kaldırdık.

Gelecekte PowerShell Iş akışına gerek olmadan PowerShell dilinde yerel paralellik/eşzamanlılık özelliğini etkinleştirmek istiyoruz.

İşletim sistemi yeniden başlatıldıktan sonra bir betiği sürdürmek için denetim noktaları kullanmanız gerekiyorsa, işletim sistemi başlangıcında bir betiği çalıştırmak için Görev Zamanlayıcı kullanmanızı öneririz, ancak betiğin kendi durumunu koruması gerekir (dosyayı kalıcı hale getirme gibi).

PowerShell 'den kaldırılan cmdlet 'ler

PowerShell 'e dahil edilen modüller için aşağıdaki cmdlet 'ler çeşitli uyumluluk nedenleri veya desteklenmeyen API 'Ler kullanımı için PowerShell 'den kaldırılmıştır.

CimCmdlets

  • Export-BinaryMiLog

Microsoft. PowerShell. Core

  • Add-PSSnapin
  • Export-Console
  • Get-PSSnapin
  • Remove-PSSnapin
  • Resume-Job
  • Suspend-Job

Microsoft. PowerShell. Diagnostics

  • Export-Counter
  • Import-Counter

Microsoft. PowerShell. Management

  • Add-Computer
  • Checkpoint-Computer
  • Clear-EventLog
  • Complete-Transaction
  • Disable-ComputerRestore
  • Enable-ComputerRestore
  • Get-ComputerRestorePoint
  • Get-ControlPanelItem
  • Get-EventLog
  • Get-Transaction
  • Get-WmiObject
  • Invoke-WmiMethod
  • Limit-EventLog
  • New-EventLog
  • New-WebServiceProxy
  • Register-WmiEvent
  • Remove-Computer
  • Remove-EventLog
  • Remove-WmiObject
  • Reset-ComputerMachinePassword
  • Restore-Computer
  • Set-WmiInstance
  • Show-ControlPanelItem
  • Show-EventLog
  • Start-Transaction
  • Test-ComputerSecureChannel
  • Undo-Transaction
  • Use-Transaction
  • Write-EventLog

Microsoft.PowerShell.Utility

  • Convert-String
  • ConvertFrom-String

PSDesiredStateConfiguration

  • Disable-DscDebug
  • Enable-DscDebug
  • Get-DscConfiguration
  • Get-DscConfigurationStatus
  • Get-DscLocalConfigurationManager
  • Publish-DscConfiguration
  • Remove-DscConfigurationDocument
  • Restore-DscConfiguration
  • Set-DscLocalConfigurationManager
  • Start-DscConfiguration
  • Stop-DscConfiguration
  • Test-DscConfiguration
  • Update-DscConfiguration

WMI v1 cmdlet 'leri

Aşağıdaki WMI v1 cmdlet 'leri PowerShell 'den kaldırılmıştır:

  • Register-WmiEvent
  • Set-WmiInstance
  • Invoke-WmiMethod
  • Get-WmiObject
  • Remove-WmiObject

Cimcmdlet modülü (diğer adıyla WMI v2) cmdlet 'leri aynı işlevi gerçekleştirir ve yeni işlevsellik ve yeniden tasarlanan bir sözdizimi sağlar.

New-WebServiceProxy cmdlet kaldırıldı

.net Core, SOAP protokolünü kullanmaya yönelik hizmetler sağlayan Windows Communication Framework 'ü desteklemez. Bu cmdlet, SOAP gerektirdiğinden kaldırıldı.

*-Transaction cmdlet 'ler kaldırıldı

Bu cmdlet 'lerin çok sınırlı kullanımı vardır. Bu karar, bu destek için desteği sona erdirmektir.

  • Complete-Transaction
  • Get-Transaction
  • Start-Transaction
  • Undo-Transaction
  • Use-Transaction

*-EventLog öğelerini

Desteklenmeyen API 'lerin kullanılması nedeniyle, *-EventLog cmdlet 'Ler PowerShell 'den kaldırılmıştır. Get-WinEventve New-WinEvent Windows Olaylar almak ve oluşturmak için kullanılabilir.

Windows Presentation Framework kullanan cmdlet 'ler (WPF)

.net Core 3,1 WPF desteği eklendi, bu nedenle PowerShell 7,0 sürümü aşağıdaki Windows özgü özellikleri geri yükledi:

  • Show-CommandCmdlet 'i
  • Out-GridViewCmdlet 'i
  • Öğesinin ShowWindow parametresi Get-Help

PowerShell Desired State Configuration (DSC) değişiklikleri

Invoke-DscResource , PowerShell 7,0 ' de deneysel özellik olarak geri yüklendi.

PowerShell 7,2 ile başlayarak, PSDesiredStateConfiguration modülü PowerShell 'den kaldırılmıştır ve PowerShell Galerisi yayımlandı. Daha fazla bilgi için PowerShell ekip blogu 'ndaki duyuruya bakın.

Motor/dil değişiklikleri

powershell.exe adı pwsh.exe olarak değiştirildi

PowerShell için ikili ad ' dan ' a değiştirilmiştir powershell(.exe) pwsh(.exe) . bu değişiklik, kullanıcıların powershell 'i makinelerde çalıştırması ve Windows PowerShell ve PowerShell 'in yan yana yüklemelerini desteklemeye yönelik belirleyici bir yol sağlar.

Üzerinde ek değişiklikler pwsh(.exe) powershell.exe :

  • İlk Konumsal parametresi öğesinden olarak değiştirildi -Command -File . bu değişiklik, powershell #! komut dosyalarında Windows olmayan platformlarda powershell olmayan kabukların yürütüldüğü (bir shebang olarak da bilinir) kullanımını düzeltir. Ayrıca, komutunu pwsh foo.ps1 belirtmeden ya da belirtmeksizin çalıştırabileceğiniz anlamına gelir pwsh fooScript -File . Bununla birlikte, bu değişiklik, -c -Command gibi komutları çalıştırmayı denerken açıkça belirtmenizi gerektirir pwsh.exe -Command Get-Command .
  • pwsh``-i -Interactive etkileşimli bir kabuğu göstermek için (veya) anahtarını kabul eder. Bu, PowerShell 'in UNIX platformlarında varsayılan bir kabuk olarak kullanılmasını sağlar.
  • Parametreleri -ImportSystemModules ve -PSConsoleFile öğesinden kaldırıldı pwsh.exe .
  • pwsh -version pwsh.exe Diğer yerel araçlarla uyum sağlamak için değiştirilmiştir ve yerleşik yardım.
  • Ve için geçersiz bağımsız değişken hata iletileri ve -File -Command UNIX standartları ile tutarlı çıkış kodları
  • -WindowStyleWindows parametresi eklendi. benzer şekilde, Windows olmayan platformlarda paket tabanlı yükleme güncelleştirmeleri yerinde güncelleştirmelerdir.

kısaltılmış ad, Windows olmayan platformlarda kabukların adlandırılmasıyla de tutarlıdır.

Bool parametresiyle PowerShell betiği çalıştırmayı destekleme

Daha önce, pwsh.exe bir PowerShell betiğini çalıştırmak için, -File $true / $false parametre değerleri olarak geçirmek için bir yol sağlanması gerekir. $true / $false Parametrelere ayrıştırılmış değerler olarak destek eklendi. Anahtar değerleri de desteklenir.

Varsayılan UNIX kabuğu olarak PowerShell 'i destekleme

UNIX üzerinde, kabukların -i etkileşimli bir kabuğu kabul etmesi ve birçok araç bu davranışı beklediği ( script Örneğin, PowerShell 'i varsayılan kabuk olarak ayarlarken) ve kabuğu anahtarla çağıran bir kuraldır -i . Bu değişiklik, -i daha önce de eşleşmesi gereken kısa bir süre olarak kullanılabilecek bir parçadır -inputformat -in .

Özel ek bileşenler

PowerShell ek bileşenleri , PowerShell topluluğunda geniş kapsamlı benimseme gerektirmeyen PowerShell modüllerine yönelik bir öncülü vardır.

Ek bileşenlerin ve topluluk kullanım eksikliğinden oluşan karmaşıklık nedeniyle artık PowerShell 'de özel ek bileşenleri desteklemiyoruz.

Deneysel özellik bayrakları

Deneysel Özellikleriçin desteği etkinleştirdik. Bu, PowerShell geliştiricilerinin yeni özellikler sunmasını ve tasarım tamamlanmadan önce geri bildirim almasına olanak tanır. Bu şekilde, tasarım geliştikçe önemli değişiklikler yapmaktan kaçınıyoruz.

Get-ExperimentalFeatureKullanılabilir deneysel özelliklerin bir listesini almak için kullanın. Bu özellikleri ve ile etkinleştirebilir veya devre dışı Enable-ExperimentalFeature bırakabilirsiniz Disable-ExperimentalFeature .

GAC 'den yüklemeye çalışmadan önce modül taban yolundan derlemeyi yükle

Daha önce, bir ikili modülün GAC 'de modül derlemesi olduğunda, derlemeyi modül temel yolundan yüklemeyi denemeden önce GAC 'den yükledik.

Değer türü öğe türü olan koleksiyonlar için null öğe denetimini atla

MandatoryParametresi ve öznitelikleri için ValidateNotNull ValidateNotNullOrEmpty , koleksiyonun öğe türü değer türünde ise null öğe denetimini atlayın.

$? Parenexpression, alt ifade ve arrayexpression için koru

Bu PR (...) , $(...) @() $? otomatik olarak doğru olmayan alt işlem hatlarını, alt ifadeleri ve dizi ifadelerini derleme yönteminizi değiştirir. Bunun yerine değeri, $? yürütülen işlem hattının veya deyimlerin sonucuna bağlıdır.

$? $false Yerel komut öğesine yazarken düzeltilmestderr

$?``$falseYerel komut öğesine yazarken olarak ayarlanır stderr . stderrBir hata olduğunu göstermek için yerel komutların yazmak yaygın bir hale gelir. $?``$falseyalnızca yerel komutun sıfır olmayan bir çıkış kodu olduğunda olarak ayarlanır.

$ErrorActionPreference stderr Yerel komutların çıkışının etkilenmemesini sağlama

stderrBir hata olduğunu göstermek için yerel komutların yazmak yaygın bir hale gelir. Bu değişiklik ile, stderr Çıkış hala ErrorRecord nesnelerinde yakalanır, ancak $ErrorActionPreference ErrorRecord yerel bir komuttan geliyorsa çalışma zamanı artık geçerli değildir.

$OutputEncoding UTF-8 NoBOM ASCII yerine kodlamayı kullanacak şekilde değiştirin

Önceki kodlama, ASCII (7 bit), bazı durumlarda çıkışın yanlış şekilde değişmeye neden olur. Varsayılan hale getirmek UTF-8 NoBOM , çoğu araç ve işletim sistemi tarafından desteklenen bir kodlama Ile Unicode çıktısını korur.

Cmdlet -Encoding 'ini tür olacak şekilde bütünleştirme System.Text.Encoding

-EncodingDeğer, Byte dosya sistemi sağlayıcısı cmdlet 'lerinden kaldırılmıştır. Artık yeni bir parametre, bir -AsByteStream bayt akışının giriş olarak gerekli olduğunu veya çıktının bir bayt akışı olduğunu belirtmek için kullanılır.

New-ModuleManifestkodlamayı UTF8NoBOM Windows olmayan platformlarda olarak değiştirme

Daha önce New-ModuleManifest , psd1 Linux araçları için bir sorun oluşturarak BOM ile UTF-16 ' y a bildirimler oluşturur. bu son değişiklik, ' nin kodlamasını New-ModuleManifest Windows olmayan platformlarda UTF (BOM yok) olarak değiştirir.

AllScopeEn çok varsayılan diğer adlarla kaldır

Kapsam oluşturmayı hızlandırmak için, AllScope en çok varsayılan diğer adlarla kaldırılmıştır. AllScope aramanın daha hızlı olduğu bazı sık kullanılan diğer adlar için ayrılmıştı.

-Verbose ve -Debug artık geçersiz kılınmayacak $ErrorActionPreference

Daha önce, -Verbose veya -Debug belirtilmişse davranışının üzerine gelin $ErrorActionPreference . Bu değişiklik ile -Verbose -Debug artık davranışını etkilemez $ErrorActionPreference .

Ayrıca, -Debug parametresi $DebugPreference sorgu yerine devam edecek şekilde ayarlanır.

$PSCultureSürekli olarak oturum içi kültür değişikliklerini yansıtın

Windows PowerShell, geçerli kültür değeri önbelleğe alınır ve bu, değerin kültüre eşit bir şekilde çıkmasına izin verebilir ve oturum başlatma işleminden sonra değişir. Bu önbelleğe alma davranışı PowerShell Core 'da düzeltilir.

Karma olarak belirtilen adlandırılmış parametrenin, Hashtable slatting ile aynı bir başkasıyla değiştirilmesine izin ver

Bu değişiklik ile, adlandırılmış parametreler, açıkça belirtilen tüm adlandırılmış parametrelerin bağlandığına sonra bağlanabilmeleri için parametre listesinin sonuna taşınır. Belirtilen adlandırılmış parametre bulunamadığında basit işlevler için parametre bağlama bir hata oluşturmaz. Bilinmeyen adlandırılmış parametreler $args basit işlevin parametresine bağlanır. Bağımsız değişken listesinin sonuna kadar ilerlenmesini sağlamak, parametrelerin görünme sırasını değiştirir $args .

Örnek:

function SimpleTest {
    param(
        $Name,
        $Path
    )
    "Name: $Name; Path: $Path; Args: $args"
}

Önceki davranışta, myPath , -Path bağımsız değişken listesindeki üçüncü bağımsız değişken olduğundan, ile bağlantılı değildir. # # Bu nedenle peluş ' $args ' ile birlikte Blah = "World"

PS> $hash = @{ Name = "Hello"; Blah = "World" }
PS> SimpleTest @hash "MyPath"
Name: Hello; Path: ; Args: -Blah: World MyPath

Bu değişiklik ile, içindeki bağımsız değişkenler @hash bağımsız değişken listesinin sonuna taşınır. MyPath , listedeki ilk bağımsız değişken haline gelir, bu nedenle öğesine bağlanır -Path .

PS> SimpleTest @hash "MyPath"
Name: Hello; Path: MyPath; Args: -Blah: World

&İş denetimi için işleç eklendi

İşlem & hattının sonuna koymak, işlem hattının bir PowerShell işi olarak çalışmasına neden olur. Bir işlem hattı backgrounded olduğunda, bir iş nesnesi döndürülür. İşlem hattı bir iş olarak çalışır olduktan sonra, tüm standart *-Job cmdlet 'ler işi yönetmek için kullanılabilir. İşlem hattında kullanılan değişkenler (işleme özgü değişkenleri yoksayarak) otomatik olarak işe kopyalanır Copy-Item $foo $bar & . İş, kullanıcının giriş dizini yerine geçerli dizinde da çalıştırılır.

Üzerinde yeni yöntemler/Özellikler PSCustomObject

Uygulamasına yeni yöntemler ve özellikler ekledik PSCustomObject . PSCustomObjectArtık Count / Length diğer nesneler gibi bir özelliği içerir.

$PSCustomObject = [pscustomobject]@{foo = 1}

$PSCustomObject.Length
1
$PSCustomObject.Count
1

Bu iş Ayrıca ForEach öğeleri ve Where üzerinde işlem yapmanıza ve filtrelemenize imkan tanıyan yöntemleri de içerir PSCustomObject :

$PSCustomObject.ForEach({$_.foo + 1})
2
$PSCustomObject.Where({$_.foo -gt 0})
foo
---
  1

PSMethod 'dan temsilciye dönüşümler

Bir PSMethod temsilciyi bir temsilciye dönüştürebilirsiniz. Bu, PSMethod [M]::DoubleStrLen içine temsilci değeri olarak geçirme gibi şeyler yapmanızı sağlar [M]::AggregateString :

class M {
    static [int] DoubleStrLen([string] $value) { return 2 * $value.Length }

    static [long] AggregateString([string[]] $values, [func[string, int]] $selector) {
        [long] $res = 0
        foreach($s in $values){
            $res += $selector.Invoke($s)
        }
        return $res
    }
}

[M]::AggregateString((gci).Name, [M]::DoubleStrLen)

Cmdlet değişiklikleri

system32Windows 'de uyumlu yerleşik modülleri denetle

Windows 10 1809 güncelleştirmesi ve Windows Server 2019 ' de, powershell ile uyumlu olarak işaretlemek için birçok yerleşik PowerShell modülünü güncelleştirdik.

PowerShell başlatıldığında, $windir\System32 ortam değişkeninin bir parçası olarak otomatik olarak ekler PSModulePath . Ancak, yalnızca öğesine Get-Module ve Import-Module CompatiblePSEdition ile uyumlu olarak işaretlenmişse, modüllerini gösterir Core .

Anahtar parametresini kullanarak tüm modülleri göstermek için bu davranışı geçersiz kılabilirsiniz -SkipEditionCheck . Ayrıca PSEdition tablo çıktısına bir özellik ekledik.

-lpTüm parametreler için diğer ad -LiteralPath

-lpParametresi olan tüm yerleşik PowerShell cmdlet 'leri için standart bir parametre diğer adı oluşturduk -LiteralPath .

Get-Item -LiteralPath a*b a*b Hatayı döndürmek için gerçekten yoksa, bunu düzeltir

Daha önce, -LiteralPath bir joker karakter buna benzer şekilde davranır -Path ve joker karakter dosya buluyorsa sessizce çıkış olur. Doğru davranış, -LiteralPath Dosya yoksa hata olması için değişmez değer olmalıdır. Değişiklik, kullanılan joker karakterleri -Literal değişmez değer olarak değerlendirilir.

Çalışma dizinini geçerli dizine ayarla Start-Job

Start-JobCmdlet 'i artık yeni iş için çalışma dizini olarak geçerli dizini kullanır.

-ProtocolCmdlet 'lerden *-Computer Kaldır

corefx 'te RPC uzaktan iletişim sorunları (özellikle Windows platformlarda) ve PowerShell 'de tutarlı bir uzaktan iletişim deneyimi sağlamak nedeniyle, -Protocol parametre cmdlet 'lerden kaldırılmıştır \*-Computer . Uzaktan erişim için DCOM artık desteklenmiyor. Aşağıdaki cmdlet 'ler yalnızca WSMAN uzaktan iletişimini destekler:

  • Rename-Computer
  • Restart-Computer
  • Stop-Computer

-ComputerNameCmdlet 'lerden *-Service Kaldır

PSRP 'nin tutarlı kullanımını teşvik etmek için, -ComputerName parametresi cmdlet 'lerden kaldırılmıştır *-Service .

Get-Content -DelimiterDöndürülen satırlarda sınırlayıcıyı dahil etmek için onarma

Daha önce, kullanırken çıktı, Get-Content -Delimiter sınırlandırıcının kaldırılması için verilerin daha fazla işlenmesini gerektirdiğinden tutarsızdı ve uygun değildir. Bu değişiklik döndürülen satırlardaki sınırlayıcıları kaldırır.

Yapılan değişiklikler Format-Hex

-RawParametresi artık "No-Op" (hiçbir şey yapmaz) olur. Tüm çıktının ileri doğru olması, türünün tüm baytlarını içeren sayıların gerçek bir temsili ile görüntülenir. Bu, -Raw parametrenin bu değişiklikten önce yaptığı şeydir.

Get-ComputerInfo özellik adında typo onarımı

BiosSerialNumber yanlış yazıldı BiosSeralNumber ve doğru yazımla değiştirilmiştir.

Get-StringHashVe Get-FileHash cmdlet 'leri Ekle

Bu değişiklik, bazı karma algoritmaların CoreFX tarafından desteklenmediği, bu nedenle artık kullanılabilir olmalarıdır:

  • MACTripleDES
  • RIPEMD160

Get-*Geçirilen $null hata yerine tüm nesneleri döndüren cmdlet 'lerde doğrulama ekleyin

$nullAşağıdakilerden herhangi birine geçirilmesi bir hata oluşturur:

  • Get-Credential -UserName
  • Get-Event -SourceIdentifier
  • Get-EventSubscriber -SourceIdentifier
  • Get-Help -Name
  • Get-PSBreakpoint -Script
  • Get-PSProvider -PSProvider
  • Get-PSSessionConfiguration -Name
  • Get-Runspace -Name
  • Get-RunspaceDebug -RunspaceName
  • Get-Service -Name
  • Get-TraceSource -Name
  • Get-Variable -Name

İçindeki W3C Genişletilmiş günlük dosyası biçimi için destek ekleme Import-Csv

Daha önce cmdlet 'i, Import-Csv günlük dosyalarını doğrudan W3C Genişletilmiş günlük biçiminde içeri aktarmak için kullanılamaz ve ek eylem gerekli olacaktır. Bu değişiklik ile W3C Genişletilmiş günlük biçimi desteklenir.

Import-Csv``PSTypeNamesCSV 'de tür bilgisi olduğunda içeri aktarma sırasında geçerlidir

Daha önce, ile içeri aktarılan ile kullanılarak aktarılan nesneler Export-CSV TypeInformation ConvertFrom-Csv tür bilgilerini saklamadı. Bu değişiklik PSTypeNames CSV dosyasından kullanılabiliyorsa, tür bilgilerini üyeye ekler.

-NoTypeInformation Varsayılan değer Export-Csv

Daha önce Export-CSV cmdlet 'i nesnenin tür adını içeren ilk satır olarak bir yorum çıktısı verebilir. Değişiklik, çoğu CSV aracı tarafından anlaşılmadığı için tür bilgilerini varsayılan olarak dışlar. Müşteri geri bildirimlerine yönelik bu değişiklik yapılmıştır.

-IncludeTypeInformationÖnceki davranışı sürdürmek için kullanın.

*İçin kayıt defteri yolunda kullanılmasına izin verRemove-Item

Daha önce, -LiteralPath bir joker karakter buna benzer şekilde davranır -Path ve joker karakter dosya buluyorsa sessizce çıkış olur. Doğru davranış, -LiteralPath Dosya yoksa hata olması için değişmez değer olmalıdır. Değişiklik, kullanılan joker karakterleri -Literal değişmez değer olarak değerlendirilir.

Group-Object artık grupları sıralar

Performans iyileştirmesinin bir parçası olarak, Group-Object artık grupların sıralanmış bir listesini döndürür. Sıralamayı dayanmasanız da, ilk grubu istediğinizde bu değişiklik tarafından bozulabilir. Önceki davranışa bağımlı olan etkinin düşük olması nedeniyle bu performans iyileştirmesinin değişikliğe değer vermeyeceğine karar verdik.

İçindeki standart sapma Measure-Object

Bundan sonra çıkış Measure-Object bir özellik içerir StandardDeviation .

Get-Process | Measure-Object -Property CPU -AllStats
Count             : 308
Average           : 31.3720576298701
Sum               : 9662.59375
Maximum           : 4416.046875
Minimum           :
StandardDeviation : 264.389544720926
Property          : CPU

Get-PfxCertificate -Password

Get-PfxCertificate Artık parametresi olan Password parametresi vardır SecureString . Bu, etkileşimli olmayan bir şekilde kullanmanıza olanak sağlar:

$certFile = '\\server\share\pwd-protected.pfx'
$certPass = Read-Host -AsSecureString -Prompt 'Enter the password for certificate: '

$certThumbPrint = (Get-PfxCertificate -FilePath $certFile -Password $certPass ).ThumbPrint

moreİşlevin kaldırılması

geçmişte PowerShell, sarmalanan adlı Windows bir işlev sevk ediyor more more.com . Bu işlev artık kaldırılmıştır.

ayrıca, help işlevi, more.com $env:PAGER Windows olmayan platformlarda tarafından belirtilen Windows veya sistemin varsayılan sayfalayıcı ' i üzerinde kullanılmak üzere değiştirilmiştir.

cd DriveName: Şimdi bu sürücüdeki geçerli çalışma dizinine kullanıcıları döndürür

Daha önce, Set-Location veya kullanan cd bir PSDrive 'a geri dönmek için bu sürücü için varsayılan konuma bir Kullanıcı gönderilir. Kullanıcılar artık bu oturum için bilinen son geçerli çalışma dizinine gönderilir.

cd - önceki dizine döndürür

C:\Windows\System32> cd C:\
C:\> cd -
C:\Windows\System32>

Veya Linux 'ta:

PS /etc> cd /usr/bin
PS /usr/bin> cd -
PS /etc>

Ayrıca, cd ve cd -- olarak değişir $HOME .

Update-Help Yönetici olmayan olarak

Popüler talebe göre Update-Help artık yönetici olarak çalıştırılmalıdır. Update-Help Artık kullanıcı kapsamlı bir klasöre yardım kaydetme için varsayılan değer.

Where-Object -Not

-NotParametresinin eklenmesiyle Where-Object , bir özelliğin yok veya null/boş özellik değeri için işlem hattındaki bir nesneyi filtreleyebilirsiniz.

Örneğin, bu komut, bağımlı hizmetleri tanımlanmış olmayan tüm hizmetleri döndürür:

Get-Service | Where-Object -Not DependentServices

Web cmdlet 'Lerinde yapılan değişiklikler

Web cmdlet 'lerinin temel alınan .NET API 'SI olarak değiştirilmiştir System.Net.Http.HttpClient . Bu değişiklik birçok avantaj sağlar. Ancak, bu değişiklik, Internet Explorer ile birlikte çalışabilirliğin yanı sıra ve içindeki çeşitli önemli değişikliklere neden Invoke-WebRequest oldu Invoke-RestMethod .

  • Invoke-WebRequest Artık yalnızca temel HTML ayrıştırmasını desteklemektedir. Invoke-WebRequest her zaman bir BasicHtmlWebResponseObject nesne döndürür. ParsedHtmlVe Forms özellikleri kaldırılmıştır.
  • BasicHtmlWebResponseObject.Headers değerler artık String[] yerine String .
  • BasicHtmlWebResponseObject.BaseResponse Artık bir System.Net.Http.HttpResponseMessage nesnedir.
  • ResponseWeb cmdlet özel durumlarının özelliği artık bir System.Net.Http.HttpResponseMessage nesnedir.
  • Katı RFC üstbilgi ayrıştırma artık ve parametresi için varsayılandır -Headers -UserAgent . Bu, ile atlanabilir -SkipHeaderValidation .
  • file:// ve ftp:// URI şemaları artık desteklenmiyor.
  • System.Net.ServicePointManager ayarlar artık kabul edilemez.
  • Şu anda macOS 'ta sertifika tabanlı kimlik doğrulaması yok.
  • -CredentialURI üzerinden kullanılması http:// hataya neden olur. Bir https:// URI kullanın veya -AllowUnencryptedAuthentication hatayı bastırmak için parametresini sağlayın.
  • -MaximumRedirection Şimdi yeniden yönlendirme denemeleri, son yeniden yönlendirmenin sonuçlarını döndürmek yerine, belirtilen limiti aştığında bir sonlandırma hatası veriyor.
  • PowerShell 6,2 ' de, JSON yanıtları için varsayılan olarak UTF-8 kodlaması için bir değişiklik yapılmıştır. JSON yanıtı için bir karakter kümesi sağlanmadığında, varsayılan kodlama, RFC 8259 başına UTF-8 olmalıdır.
  • Yanıtlar için varsayılan kodlama UTF-8 olarak ayarlandı application-json
  • -SkipHeaderValidation Content-Type Standartlara uyumlu olmayan üstbilgilere izin vermek için parametresi eklendi
  • -FormBasitleştirilmiş desteği desteklemek için parametre multipart/form-data eklendi
  • Uyumlu, büyük/küçük harf duyarsız ilişki anahtarları işleme
  • -ResumeWeb cmdlet 'leri için parametre eklendi

Invoke-RestMethod, hiçbir veri döndürülmediğinde yararlı bilgiler döndürüyor

Bir API yalnızca döndürdüğü zaman null Invoke-RestMethod bunun yerine dize olarak serileştirildi "null" $null . Bu değişiklik, ' deki Invoke-RestMethod geçerli tek DEĞERLI JSON sabit değerini doğru şekilde serileştirmek için içindeki mantığı düzeltir null $null .

-CredentialŞifrelenmemiş bağlantılar üzerinden gönderildiğinde Web cmdlet 'leri uyar

HTTP kullanırken, parolalar dahil içerik şifresiz metin olarak gönderilir. Bu değişiklik, varsayılan olarak buna izin verilmez ve kimlik bilgileri güvenli olmayan bir şekilde geçiriliyorsa bir hata döndürür. Kullanıcılar, anahtarı kullanarak bunu atlayabilir -AllowUnencryptedAuthentication .

API değişiklikleri

AddTypeCommandBaseSınıfı kaldır

AddTypeCommandBaseSınıfı, Add-Type performansı artırmak için sürümünden kaldırılmıştır. Bu sınıf yalnızca cmdlet tarafından kullanılır Add-Type ve kullanıcıları etkilememelidir.

VisualBasicAdd-Type sürümünde desteklenen bir dil olarak kaldırıldı

geçmişte, cmdlet 'ini kullanarak Visual Basic kodu derleyebilirsiniz Add-Type . Visual Basic, ile nadiren kullanılmıştı Add-Type . PowerShell 'in boyutunu azaltmak için bu özelliği kaldırdık.

RunspaceConfigurationDestek kaldırıldı

Daha önce, API 'yi kullanarak program aracılığıyla bir PowerShell çalışma alanı oluştururken, eski RunspaceConfiguration veya daha yeni InitialSessionState sınıfları kullanabilirsiniz. Bu değişiklik RunspaceConfiguration , ve yalnızca desteğini destekler InitialSessionState .

CommandInvocationIntrinsics.InvokeScriptyerine bağımsız değişkenleri bağlama $input``$args

Parametrenin yanlış konumu, bağımsız değişkenler yerine giriş olarak geçirilen bağımsız değişkenler ile sonuçlandı.

ClrVersionVe BuildVersion özelliklerini Kaldır$PSVersionTable

ClrVersionÖzelliği $PSVersionTable CoreCLR ile yararlı değildir. Son kullanıcılar, uyumluluğu belirlemede bu değeri kullanmamalıdır.

BuildVersionözelliği, Windows olmayan platformlarda kullanılamayan Windows derleme sürümüne bağlı. GitCommitIdPowerShell 'in tam derleme sürümünü almak için özelliğini kullanın.

Unicode kaçış ayrıştırması uygulama

`u#### ya da `u{####} karşılık gelen Unicode karaktere dönüştürüldü. Bir sabit değere çıkış yapmak için `u , geri değer: ' i kaçış: ``u .

PS işlevlerinde parametre bağlama sorunu ValueFromRemainingArguments

ValueFromRemainingArguments Şimdi değerleri bir dizi olan tek bir değer yerine dizi olarak döndürür.

Ve ' nin temizlenen kullanımları CommandTypes.Workflow``WorkflowInfoCleaned

CommandTypes.Workflow WorkflowInfo System. Management. Automation içindeki ve kullanımları ile ilgili kodu temizleyin.

Bu küçük değişiklikler genellikle yardım sağlayıcı kodunu etkiler.

  • Ortak oluşturucularını WorkflowInfo iç olarak değiştirin. Artık iş akışını desteklemiyoruz, bu nedenle kişilerin örnek oluşturmasına izin vermeyi mantıklı hale getirir Workflow .
  • System. Management. Automation. DebugSource türünü yalnızca iş akışı hata ayıklaması için kullanıldığından kaldırın.
  • SetParentYalnızca iş akışı hata ayıklaması için kullanılan soyut sınıf hata ayıklayıcısından aşırı yüklemesini kaldırın.
  • ' Nin aynı aşırı yüklemesini SetParent Remotingjobdebugger türetilmiş sınıfından kaldırın.

PSObjectBir temsilciye dönüştürülürken dönüş sonucunu sarmayın ScriptBlock

Bir ScriptBlock , C# bağlamında kullanılmak üzere bir temsilci türüne dönüştürüldüğünde, sonucu, PSObject gereksiz bir Troubles getirir:

  • Değer, temsilci dönüş türüne dönüştürüldüğünde PSObject temelde sarmalanmış alır. Bu nedenle, PSObject gerekli değildir.
  • Temsilci dönüş türü olduğunda object , PSObject C# kodunda birlikte çalışmak zor bir hale gelir.

Bu değişiklikten sonra, döndürülen nesne temeldeki nesnedir.

Uzaktan iletişim desteği

UNIX platformlarında WinRM kullanan PowerShell Remoting (PSRP), HTTPS üzerinden NTLM/Negotiate veya temel kimlik doğrulaması gerektirir. MacOS üzerinde PSRP yalnızca HTTPS üzerinden temel kimlik doğrulamasını destekler. Kerberos tabanlı kimlik doğrulaması Windows olmayan platformlar için desteklenmez.

powershell ayrıca tüm platformlarda SSH üzerinden powershell uzaktan iletişimini (psrp) destekler (Windows, macos ve Linux). Daha fazla bilgi için bkz. PowerShell 'de SSH uzaktan iletişim.

Kapsayıcılar için doğrudan PowerShell pwsh Direct kullanmaya çalışır

PowerShell Direct , ağ bağlantısı veya diğer uzaktan yönetim hizmetleri olmadan bir Hyper-V VM 'Sine veya kapsayıcısına bağlanmanızı sağlayan bir PowerShell ve Hyper-v özelliğidir.

geçmişte, kapsayıcıda yerleşik Windows PowerShell örneğini kullanarak doğrudan PowerShell 'e bağlanıldı. Artık PowerShell Direct, ortam değişkeninde kullanılabilir olan herhangi birini kullanarak bağlanmaya çalışır pwsh.exe PATH . pwsh.exeKullanılabilir değilse, PowerShell Direct kullanmaya geri döner powershell.exe .

Enable-PSRemoting Şimdi Önizleme sürümleri için ayrı Remoting uç noktaları oluşturuyor

Enable-PSRemoting Şimdi iki uzaktan iletişim oturumu yapılandırması oluşturuyor:

  • PowerShell 'in ana sürümü için bir tane. Örneğin, PowerShell.6. Bu uç nokta, "sistem genelinde" PowerShell 6 oturum yapılandırması olarak küçük sürüm güncelleştirmeleri üzerinden güvenebilirler
  • Sürüme özgü bir oturum yapılandırması, örneğin: PowerShell.6.1.0

Aynı makinede birden fazla PowerShell 6 sürümünün yüklü ve erişilebilir olmasını istiyorsanız bu davranış yararlı olur.

Ayrıca, PowerShell 'in önizleme sürümleri artık cmdlet 'ini çalıştırdıktan sonra kendi uzaktan iletişim oturum yapılandırmalarına sahiptir Enable-PSRemoting :

C:\WINDOWS\system32> Enable-PSRemoting

Daha önce WinRM ayarlamadıysanız, çıktınızda farklı olabilir.

WinRM is already set up to receive requests on this computer.
WinRM is already set up for remote management on this computer.

Daha sonra, PowerShell 6 ' nın önizleme ve kararlı derlemeleri için ayrı PowerShell oturum yapılandırmaları ve her belirli sürüm için bkz..

Get-PSSessionConfiguration
Name          : PowerShell.6.2-preview.1
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : PowerShell.6-preview
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : powershell.6
PSVersion     : 6.1
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : powershell.6.1.0
PSVersion     : 6.1
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

user@host:port SSH için desteklenen sözdizimi

SSH istemcileri tipik olarak biçimdeki bir bağlantı dizesini destekler user@host:port . PowerShell uzaktan iletişim için protokol olarak SSH 'nin eklenmesiyle, bu bağlantı dizesi biçimi için destek ekledik:

Enter-PSSession -HostName fooUser@ssh.contoso.com:2222

Telemetri yalnızca bir ortam değişkeniyle devre dışı bırakılabilir

PowerShell, başlatıldığında temel telemetri verilerini Microsoft 'a gönderir. Veriler işletim sistemi adı, işletim sistemi sürümü ve PowerShell sürümünü içerir. Bu veriler, PowerShell 'in kullanıldığı ortamları daha iyi anlamanıza ve yeni özellik ve düzeltmeleri önceliklendirmemizi sağlar.

Bu Telemetriyi devre dışı bırakmak için, ortam değişkenini POWERSHELL_TELEMETRY_OPTOUT true , veya olarak ayarlayın yes 1 . DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRYTelemetriyi devre dışı bırakmak için dosya silmeyi artık desteklemiyoruz.