我找了一个代码块我使用(从采购的另一个问题),我一直没能找出什么.
在.{process
表示这个片段(评论删除):
Get-ItemProperty $path |
.{process{ if ($_.DisplayName -and $_.UninstallString) { $_ } }} |
Select-Object DisplayName, Publisher, InstallDate, DisplayVersion, HelpLink, UninstallString |
Sort-Object DisplayName
Run Code Online (Sandbox Code Playgroud)
我知道,%
是For-EachObject
和?
是简写形式,Where
或Where-Object
,但接下来的问题是:
什么是.
速记?
大多数时候,powershell 中的错误报告非常有用。我看到错误,看到起源,但我注意到 ForEach-Object 管道中的任何错误都会丢失其起源行,并且错误堆栈仅指向带有ForEach-Object
.
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
[cultureinfo]::CurrentUICulture = 'en-US'
function Test-Something($val)
{
# var is not defined here
Write-Host($undefined_variable)
}
@("a","b") | ForEach-Object{
$entry = $_
Test-Something $entry
}
Run Code Online (Sandbox Code Playgroud)
结果是
ForEach-Object : The variable '$undefined_variable' cannot be retrieved because it has not been set.
In D:\dummy.ps1:12 Line:14
+ @("a","b") | ForEach-Object{
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (undefined_variable:String) [ForEach-Object], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined,Microsoft.PowerShell.Commands.ForEachObjectCommand
Run Code Online (Sandbox Code Playgroud)
该线12
指向@("a","b") | ForEach-Object{
,这显然不是错误位置。