相关疑难解决方法(0)

什么是PowerShell管道中的`.`简写?

我找了一个代码块我使用(从采购的另一个问题),我一直没能找出什么..{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?是简写形式,WhereWhere-Object,但接下来的问题是:

什么是.速记?

powershell

6
推荐指数
1
解决办法
764
查看次数

使用 ForEach-Object 而不是 foreach 时语法错误位置不精确

大多数时候,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{,这显然不是错误位置。

foreach 的更有用的示例 …

error-handling powershell

4
推荐指数
1
解决办法
159
查看次数

标签 统计

powershell ×2

error-handling ×1