PowerShell Core 6.2 的新功能
PowerShell Core 6.2 版著重於效能改進、錯誤修復,以及可提升軟體品質的較小 Cmdlet 和語言增強功能。 若要查看增強功能的完整清單,請參閱 GitHub 上的詳細變更記錄。
實驗性功能
先前我們已啟用對實驗性功能的支援。 在 6.2 版本中,我們有四個實驗性功能可試用。請提供意見反應,讓我們可以進行改善,並決定是否值得將功能升階為主流狀態。
請使用 Get-ExperimentalFeature
取得一份可用實驗性功能的清單。 您可以使用 Enable-ExperimentalFeature
和 Disable-ExperimentalFeature
啟用或停用這些功能。
找不到命令建議項目
此功能會使用模糊比對方式,尋找您可能拼字錯誤的命令或 Cmdlet 的建議項目。
Enable-ExperimentalFeature -Name PSCommandNotFoundSuggestion
範例
在此範例中,系統在 Cmdlet 名稱拼字錯誤的情況下,透過模糊比對方式找出幾個最有可能和最不可能的建議項目。
Get-Commnd
Get-Commnd : The term 'Get-Commnd' is not recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify that the path
is correct and try again.
At line:1 char:1
+ Get-Commnd
+ ~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-Commnd:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Suggestion [4,General]: The most similar commands are: Get-Command, Get-Content, Get-Job, Get-Module,
Get-Event, Get-Host, Get-Member, Get-Item, Set-Content.
隱含遠端批次處理
在管線中使用隱含遠端 \(英文\) 時,PowerShell 會將管線中的每個命令視為獨立。 用戶端和遠端系統之間的物件,會在管線執行時重複序列化和 de-serialized
。
使用此功能時,PowerShell 會分析管線,判斷命令是否安全地執行以及它是否存在於目標系統上。 若為 true,PowerShell 會從遠端執行整個管線,並只將結果序列化並 de-serializes
回用戶端。
Enable-ExperimentalFeature -Name PSImplicitRemotingBatching
實際測試Get-Process | Sort-Object
透過 localhost 會從 10-15 秒減少至 20-30 毫秒。 此功能只需要在用戶端上啟用。 伺服器端不需要任何變更。
暫存磁碟機
Enable-ExperimentalFeature -Name PSTempDrive
如果在不同的作業系統上使用 PowerShell Core,會發現尋找暫存目錄的環境變數和 Windows、macOS 與 Linux 中的不一樣! 您可以透過此功能,取得稱為 Temp:
的 PSDrive,它會自動對應至您所使用作業系統的暫存資料夾。
範例
PS> "Hello World!" > Temp:/hello.txt
PS> Get-Content Temp:/hello.txt
Hello World!
請注意,原生檔案命令 (例如 Linux 上的 ls
) 不會察覺 PSDrives 且不會看到這個 Temp:
磁碟機。
展開縮寫
PowerShell Cmdlet 都應該有描述性名詞。 這會導致較難輸入完整名稱。 此功能可讓您只要輸入 Cmdlet 的大寫字元,然後使用 Tab 鍵自動完成來尋找相符項目。
Enable-ExperimentalFeature -Name PSUseAbbreviationExpansion
範例
PS> i-arsavsf
如果按下 Tab 鍵,並已安裝 Azure PowerShell Az 模組,它會自動完成為:
PS> Import-AzRecoveryServicesAsrVaultSettingsFile
注意
此功能採用需透過互動方式使用的設計。 Cmdlet 的縮寫形式無法在系統中執行。 這並不是要取代別名的功能。
重大變更
- 修正
Write-Output
中的-NoEnumerate
行為,以與 Windows PowerShell 一致。 (#9069) - 讓
Join-String -InputObject 1,2,3
結果等於1,2,3 | Join-String
結果 (#8611) (感謝 @sethvs!) - 新增
-Stable
至Sort-Object
和相關測試 (#7862) (感謝 @KirkMunro!) - 改善
Start-Sleep
Cmdlet 以接受小數秒 (#8537) (感謝 @Prototyyppi!) - 變更雜湊表以在所有文化特性 (Culture) 中以
case-insensitive
的方式使用 OrdinalIgnoreCase (#8566) - 修正 中的
Import-Csv
LiteralPath 以系結至Get-ChildItem
輸出 (#8277) (感謝@iSazonov!) - 如果雙引號分隔符用於
Import-Csv
(#7899) (感謝,就不會再略過沒有名稱的數據行 @Topping!) -
Get-ExperimentalFeature
不再有-ListAvailable
切換功能 (#8318) - 偵錯參數現在會設定
$DebugPreference
為 Continue ,而不是 查詢 (#8195) (感謝 @KirkMunro!) - 如果在與 pwsh 搭配使用的非互動式、重新導向、編碼命令中指定,請接受
-OutputFormat
(#8115) - 請先從模組基底路徑載入組件,然後再嘗試從 GAC 載入 (#8073)
- 從 Linux 預覽套件中移除波狀符號 (#8244)
- 將
-WorkingDirectory
的處理順序移到設定檔前面 (#8079) - 請勿在 Unix (#7697 上新增
PATHEXT
環境變數) (感謝 @iSazonov!)
已知問題
- 遠端登入 Windows IOT ARM 平台時,會在載入模組時發生問題。 請參閱 (#8053)
一般更新與修正
- 支援在區分大小寫的檔案系統中,使用檔案和資料夾不區分大小寫的 Tab 鍵自動完成功能 (#8128)
- 請讓 PSVersionInfo.PSVersion 和 PSVersionInfo.PSEdition 公開 (#8054) (感謝 @KirkMunro!)
- 在區塊中新增類型推斷
$_
/$PSItem
catch{ }
(#8020) (感謝 @vexx32!) - 修正靜態方法調用類型推斷 (#8018) (感謝 @SeeminglyScience!)
- Create 、
Group-Object
、PSObject 和 Hashtable (#7231) (感謝Select-Object
@powercode!) - 支援包含
ByRef-like
型別參數的呼叫方法 (#7721) - 處理 Windows PowerShell 模組路徑已在環境 PSModulePath 中的情況 (#7727)
- 透過儲存純文字以啟用非 Windows 的
SecureString
Cmdlet (#9199) - 改善使用 securestring 匯入 clixml 時,非 Windows 上顯示的錯誤訊息 (#7997)
- 將參數 ReplyTo 新增至
Send-MailMessage
(#8727) (感謝 @replicaJunction!) - 新增已淘汰的訊息至
Send-MailMessage
(#9178) - 修正
Restart-Computer
以在沒有 WinRM 時於localhost
中運作 (#9160) - 讓
Start-Job
在裝載 PowerShell 時擲回終止錯誤 (#9128) - 為 ushort、uint、ulong 和簡短常值新增 C# 樣式類型快捷鍵和後綴 (#7813) (感謝 @vexx32!)
- 已新增數值常值的新後綴 - 請參閱 about_Numeric_Literals (#7901) (感謝 @vexx32!)
- 當 SupportsShouldProcess 未設定為 'true' (#8209) (感謝時,正確回報影響等級 @vexx32!)
- 修正 Web Cmdlet 中的要求 Charset 問題 (#8742) (感謝 @markekraus!)
-
100-continue
修正 Web Cmdlet (#8679) (感謝@markekraus!) - 修正 Web Cmdlet 的檔案封鎖問題 (#7676) (感謝 @Claustn!)
- 修正 (#8694 中的代碼頁剖析問題
Invoke-RestMethod
) (感謝 @markekraus!) - 重構
ConvertTo-Json
以將 JsonObject.ConvertToJson 公開為公用 API (#8682) - 使用 -Depth (#8199) (感謝新增可設定的最大深度
ConvertFrom-Json
@louistio!) - 在
ConvertTo-Json
Cmdlet 中新增 EscapeHandling 參數 (#7775) (感謝 @iSazonov!) - 新增
-CustomPipeName
至 pwsh 和Enter-PSHostProcess
(#8889) - 支援在 Windows 上建立與
New-Item
的相對符號連結 (#8783) - 允許 Windows 使用者在不需要提高權限的情況下,使用開發人員模式建立符號連結 (#8534)
- 支援
Write-Information
以接受$null
(#8774) - 修正進階函式的
Get-Help
以包含 MAML 說明內容 (#8353) - 修正
Get-Help
-Parameter 的 PSTypeName 問題,當只有一個參數宣告為 (#8754) (感謝 @pougetat!) - 修正在 ScriptBlock 上執行以取得註解說明之
Get-Help
的權杖計算。 (#8238) (感謝 @hubuk!) - 變更
Get-Help
Cmdlet -Parameter 參數,使其接受字串陣列 (#8454) (感謝 @sethvs!) - 如果PAGER的路徑包含空格 (#8571) (感謝 @pougetat!)
- 新增在函式 'help' 中使用
less
來指示使用者如何結束的提示 (#7998) - 在 Cmdlet (#8191 中
Format-Hex
新增支援列舉和 char 類型,) (感謝 @iSazonov!) - 將 ShouldProcess 自
Format-Hex
移除 (#8178) - 將新的 Offset 和 Count 參數新增至
Format-Hex
Cmdlet (#7877) (感謝 @iSazonov!) - 允許 'name' 作為 中
ConvertTo-Html
'label' 的別名索引鍵,允許 'width' 項目成為整數 (#8426) (感謝 @mklement0!) - 讓 scriptblock 型導出屬性在
ConvertTo-Html
(#8427) (感謝 @mklement0!) - 新增 Cmdlet
Join-String
以從管線輸入建立文字 (#7660) (感謝 @powercode!) - 修正
Join-String
Cmdlet FormatString 參數邏輯 (#8449) (感謝 @sethvs!) - 將
Clear-Host
變更回使用$RAWUI
並清除,以透過遠端運作 (#8609) - 將
Clear-Host
變更為簡單的[console]::clear
並自 Unix 移除明確的別名 (#8603) - 修正 中的
Import-Csv
LiteralPath 以系結至Get-ChildItem
輸出 (#8277) (感謝 @iSazonov!) - help 函式不應使用 AliasHelpInfo 的呼叫器 (#8552)
- 新增
-UseMinimalHeader
至 以Start-Transcript
將文字記錄標頭最小化 (#8402) (感謝 @lukexjeremy!) - 新增
Enable-ExperimentalFeature
和Disable-ExperimentalFeature
Cmdlet (#8318) - 公開 PSDiagnostics 的所有 Cmdlet (如果 logman.exe 可用) (#8366)
- 從平臺 (#8291 移除 Persist 參數
New-PSDrive
non-Windows
) (感謝 @lukexjeremy!) -
cd +
新增支援 (#7206) (感謝@bergmeister!) - 讓
Set-Location -LiteralPath
能處理名為 - 與 + 的資料夾 (#8089) -
Test-Path
$false
當指定空白或$null
路徑值 (#8080) (感謝時,會傳回@vexx32!) - 允許即使路徑不符合任何提供者時也會傳回動態參數 (#7957)
- 支援 Unix 平台上的
Get-PSHostProcessInfo
和Enter-PSHostProcess
(#8232) - 減少 Cmdlet (#8103) (
Get-Content
感謝 @iSazonov!) - 支援
Add-Content
在寫入內容時與其他工具共用讀取權限 (#8091) -
Get/Add-Content
以容器為目標時擲回改善的錯誤, (#7823) (感謝 @kvprasoon!) - 將 、
-NoUserOverrides
和-ListAvailable
參數新增-Name
至Get-Culture
Cmdlet (#7702) (感謝@iSazonov!) - 新增整合的屬性以完成 Encoding 參數。 (#7732) (感謝 @ThreeFive-O!)
- 允許 編碼 參數中已註冊代碼頁的數值標識碼和名稱, (#7636) (感謝 @iSazonov!)
-
Rename-Item -Path
使用通配符字元 (#7398 修正) (感謝@kwkam!) - 使用
Start-Transcript
和 檔案存在時,空的檔案而不是刪除 (#8131) (感謝 @paalbra!) - 使用
Add-Type
FileAccess.Read 和 FileShare.Read 明確 開放原始碼 (#7915) (感謝@IISResetMe!) - 針對最新的 Windows 修正
Enter-PSSession -ContainerId
(#7883) - 確保
Test-ModuleManifest
會填入 NestedModules 屬性 (#7859) - 將案例新增
%F
至Get-Date
-UFormat (#7630) (感謝 @britishben!) - 修正
Set-Service -Status Stopped
以停止具有相依性的服務 (#5525) (感謝 @zhenggu!)