PowerShell Core 6.2 版本著重於效能提升、錯誤修正,以及更小的指令碼和語言增強,以提升品質。 想查看完整的改進清單,請參考我們在 GitHub 上的詳細 變更日誌 。
實驗性功能
之前,我們啟用了對 實驗性功能(Experimental Features)的支援。 在 6.2 版本中,我們有四項實驗性功能可供試用。請提供回饋,讓我們能進行改進,並決定是否值得將此功能推廣為主流。
使用 Get-ExperimentalFeature 以取得可用的實驗性功能清單。 你可以用 Enable-ExperimentalFeature 和 Disable-ExperimentalFeature來啟用或停用這些功能。
指令未找到建議
這個功能利用模糊比對來尋找你可能打錯的指令或 cmdlet 建議。
Enable-ExperimentalFeature -Name PSCommandNotFoundSuggestion
Example
在這個例子中,拼錯的指令碼名稱會模糊匹配多個建議,從最有可能到最不可能。
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 分析管線以判斷該指令是否安全可執行,且該指令是否存在於目標系統中。 當 PowerShell 為真時,會遠端執行整個管線,只序列化並將 de-serializes 結果回傳給用戶端。
Enable-ExperimentalFeature -Name PSImplicitRemotingBatching
在實際環境中, Get-Process | Sort-Object 對本地主機的測試時間會從 10-15 秒縮短到 20-30 毫秒。 這個功能只需要在用戶端啟用即可。 伺服器上不需要做任何更改。
臨時駕駛
Enable-ExperimentalFeature -Name PSTempDrive
如果你在不同作業系統上使用 PowerShell Core,你會發現 Windows、macOS 和 Linux 用來尋找暫存目錄的環境變數是不同的! 有了這個功能,你會自動被調用Temp:到 PSDrive,並映射到你所使用的作業系統的暫存資料夾。
Example
PS> "Hello World!" > Temp:/hello.txt
PS> Get-Content Temp:/hello.txt
Hello World!
請注意,原生檔案指令(像 ls 是 Linux 上)不會偵測到 PSDrives,因此不會看到這顆 Temp: 硬碟。
縮寫展開
PowerShell 的 cmdlet 預期會有描述性名詞。 這導致名字較長且較難輸入。 這個功能讓你只要輸入 cmdlet 的大寫字元,再用 Tab 補全來找匹配。
Enable-ExperimentalFeature -Name PSUseAbbreviationExpansion
Example
PS> i-arsavsf
如果你按 Tab 鍵,且安裝了 Azure PowerShell Az 模組,它會自動完成:
PS> Import-AzRecoveryServicesAsrVaultSettingsFile
備註
此功能設計為互動式使用。 指令小子的縮寫形式無法執行。 此功能不能取代別名。
重大變更
- 修正
-NoEnumerate行為Write-Output以符合 Windows PowerShell 的一致性。 (#9069) - 讓
Join-String -InputObject 1,2,3結果等於1,2,3 | Join-String結果(#8611)(謝謝) @sethvs!) - 新增
-StableSort-Object及相關測試(#7862)(謝謝)@KirkMunro!) - 改進
Start-Sleep指令碼以接受分秒(#8537)(謝謝) @Prototyyppi!) - 將雜湊表改為使用 OrdinalIgnoreCase,使所有文化皆有
case-insensitive(#8566) - 修正 LiteralPath
Import-Csv綁定輸出Get-ChildItem(#8277)(謝謝) @iSazonov!) - 如果在 (#7899) 中使用
Import-Csv雙引號分隔符,也不會再跳過無名欄位(謝謝) @Topping!) -
Get-ExperimentalFeatureSwitch (#8318) 已不再存在-ListAvailable - 除錯參數現在改
$DebugPreference為 繼續 而非 詢問 (#8195)(謝謝) @KirkMunro!) -
-OutputFormat若指定於非互動式、重定向、編碼指令,則使用 pwsh(#8115) - 在嘗試從 GAC 載入前,先從模組基座路徑載入組裝(#8073)
- 從 Linux 預覽套件中移除 tilde(#8244)
- 在處理設定檔之前移動處理
-WorkingDirectory(#8079) - 不要在 Unix 上新增
PATHEXT環境變數(#7697)(謝謝) @iSazonov!)
已知問題
- 在 Windows IOT ARM 平台上進行遠端存取時,模組載入時會遇到問題。 參見 (#8053)
一般更新與修正
- 啟用大小寫不區分的分頁補全功能,適用於大小寫區分檔案系統(#8128) 中的檔案與資料夾
- 將 PSVersionInfo.PSVersion 和 PSVersionInfo.PSEdition 公開(#8054)(謝謝) @KirkMunro!)
- 新增類型推論 in
$_/$PSItemcatch{ }blocks(#8020)(謝謝) @vexx32!) - 修正靜態方法調用類型推論(#8018)(感謝) @SeeminglyScience!)
- 為 、
Group-Object、PSObject 和 Hashtable(#7231)建立推論型別Select-Object(感謝)@powercode!) - 支援帶有型
ByRef-like別參數的呼叫方法(#7721) - 處理 Windows PowerShell 模組路徑已存在於環境 PSModulePath (#7727) 的情況
- 透過
SecureString儲存純文字啟用非 Windows 的 cmdlet(#9199) - 在非 Windows 系統中以 securestring 匯入 clixml 時,改善錯誤訊息(#7997)
- 新增參數 ReplyTo 至
Send-MailMessage(#8727)(感謝) @replicaJunction!) - 新增過時訊息至
Send-MailMessage(#9178) - 當 WinRM 不存在時該修復
localhost的修正Restart-Computer(#9160) - 當 PowerShell 被託管時,會產生
Start-Job拋棄終止錯誤(#9128) - 為 ushort、uint、ulong 和 short 字面值加上 C# 風格的加速器和後綴(#7813)(感謝) @vexx32!)
- 新增數字字面字尾——參見 about_Numeric_Literals (#7901)(感謝) @vexx32!)
- 當 SupportsShouldProcess 未設為「true」時,正確回報影響等級(#8209)(謝謝) @vexx32!)
- 修正網頁指令匣中請求字元集問題(#8742)(謝謝) @markekraus!)
- 修正網頁指令匣(#8679)的預期
100-continue問題(謝謝) @markekraus!) - 修正網頁指令檔(#7676)檔案阻塞問題(謝謝) @Claustn!)
- 修正 (#8694) 中的
Invoke-RestMethod代碼頁解析問題(謝謝) @markekraus!) - Refactor
ConvertTo-Jsonto expose JsonObject.ConvertToJson as a public API (#8682) - 用 -Depth (#8199) 加入可設定的最大深度
ConvertFrom-Json(謝謝) @louistio!) - 在 cmdlet (#7775) 中新增 EscapeHandling 參數
ConvertTo-Json(感謝) @iSazonov!) - 加入
-CustomPipeNamepwsh 和Enter-PSHostProcess(#8889) - 啟用在 Windows 上建立相對符號連結,使用
New-Item(#8783) - 允許 Windows 開發者模式使用者建立無高度的符號連結(#8534)
- 啟用
Write-Information接受$null(#8774) - MAML 說明內容中的進階函數修正
Get-Help(#8353) - 當只宣告一個參數(#8754)時,修正
Get-HelpPSTypeName 在 -Parameter 上的問題(謝謝) @pougetat!) - ScriptBlock 執行的標記計算修正
Get-Help,方便評論協助。 (#8238)(謝謝 @hubuk!) - 將 cmdlet -Parameter 參數改
Get-Help成接受字串陣列(#8454)(謝謝) @sethvs!) - 如果 PAGER 的路徑包含空格,請解析 (#8571)(謝謝) @pougetat!)
- 在「help」函式中加入提示
less,指示使用者如何退出(#7998) - 在 cmdlet (#8191) 中加入支援列舉和字元類型
Format-Hex(感謝) @iSazonov!) - 從 (#8178) 移除 ShouldProcess
Format-Hex - 新增 Offset 和 Count 參數,
Format-Hex並重構 cmdlet (#7877)(謝謝) @iSazonov!) - 允許「name」作為 label 的
ConvertTo-Html別名鍵,允許「width」項目為整數(#8426)(謝謝) @mklement0!) - 讓基於 scriptblock 的計算屬性在 (#8427) 中再次
ConvertTo-Html運作(謝謝) @mklement0!) - 新增 cmdlet
Join-String以從管線輸入產生文字(#7660)(謝謝) @powercode!) - 修正
Join-Stringcmdlet FormatString 參數邏輯(#8449)(謝謝) @sethvs!) - 改
Clear-Host回使用並$RAWUI清除工作,取代遠端通訊(#8609) - 改
Clear-Host為簡單呼叫[console]::clear並移除 Unix 上的清除別名(#8603) - 修正 LiteralPath
Import-Csv綁定輸出Get-ChildItem(#8277)(謝謝) @iSazonov!) - 說明功能不應該使用分頁器來處理 AliasHelpInfo(#8552)
- 新增
-UseMinimalHeaderStart-Transcript以減少逐字稿標頭(#8402)(謝謝)@lukexjeremy!) - 加法
Enable-ExperimentalFeature與Disable-ExperimentalFeature指令小程式(#8318) - 如果有 PSDiagnostics 的所有 cmdlet,請公開 logman.exe (#8366)
- 移除平台上的 Persist 參數
New-PSDrivenon-Windows(#8291)(謝謝)@lukexjeremy!) - 新增支援
cd +(#7206)(謝謝) @bergmeister!) - 啟用
Set-Location -LiteralPath可操作名為 - 與 + (#8089) 的資料夾 -
Test-Path當給定空值或$null路徑值(#8080)時回傳$false(感謝)@vexx32!) - 即使路徑與任何提供者不符,仍允許回傳動態參數(#7957)
- 支援
Get-PSHostProcessInfo及Enter-PSHostProcessUnix 平台(#8232) - 減少指令檔(#8103)中的
Get-Content分配(謝謝) @iSazonov!) - 在撰寫內容時啟用
Add-Content與其他工具共享閱讀權限(#8091) -
Get/Add-Content目標容器時的誤差改善(#7823)(感謝) @kvprasoon!) - 在 cmdlet (#7702) 中加入
-Name和-NoUserOverrides-ListAvailable參數Get-Culture(謝謝) @iSazonov!) - 為 編碼 參數新增統一屬性以完成。 (#7732)(謝謝 @ThreeFive-O!)
- 允許在 編碼 參數(#7636)中輸入數值 ID 與註冊碼頁名稱(感謝) @iSazonov!)
- 用萬用字元角色修正
Rename-Item -Path(#7398)(謝謝) @kwkam!) - 當 and
Start-Transcript存在檔案時,請用空檔而不是刪除(#8131)(謝謝) @paalbra!) - 用 FileAccess.Read 和 FileShare.Read 明確製作
Add-Type開源檔案(#7915)(謝謝)@IISResetMe!) - 最新 Windows(#7883)修復
Enter-PSSession -ContainerId方法 - 確保 NestedModules 屬性被
Test-ModuleManifest(#7859) 填充 - 把機殼加
%F到Get-Date-UFormat(#7630)(謝謝) @britishben!) - 解決有依賴性服務的終止
Set-Service -Status Stopped方法(#5525)(謝謝) @zhenggu!)