PowerShell中的类似功能?

时间:2014-06-16 15:49:39

标签: .net powershell

我是一个C#dev的交易,最近开始做PowerShell而且我对它的所有权力(ho ho!)感到敬畏。我一般都对shell语言很陌生,所以我认为我可能完全以错误的方式处理这个问题并尝试编写PowerShell,因为我可能会编写一些类似C#的函数。无论如何,说我有这个代码块(它是一个俗气的例子,可能不是实现以下目标的最佳方式,但你希望得到这一点):

Get-Website |
    ? { $_.State -eq 'Stopped' } |
        select Name, 
            @{ 
                n = "web.config path"; e = { "$($_.PhysicalPath)\Web.Config" } 
            }

我使用扩展属性在对象上添加新属性,但我也喜欢引用所说的扩展属性,类似于LINQ' let'或者更复杂的匿名类型创建。

Get-Website |
    ? { $_.State -eq 'Stopped' } |
        select Name, 
            @{ 
                n = "webconfigpath"; e = { "$($_.PhysicalPath)\Web.Config" } 
            },
            @{
                n = "webconfigexists; e = { Test-Path $_webconfigpath } 
            }

我知道在选择对象后我可以引用扩展属性,但是可以像上面那样进行吗?

干杯 麦克

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找将成员添加到Get-Website cmdlet返回的对象中。如果我正确地阅读了你的问题你想要的是:

Get-Website | ?{$_.State -eq "Stopped"} | %{
    $_ | Add-Member "ConfigPath" "$($_.PhysicalPath)\Web.Config"
    $_ | Add-Member "ConfigPathExists" $(Test-Path "$($_.PhysicalPath)\Web.Config")
}

或许我误解了这个问题。

答案 1 :(得分:1)

不确定您要问的是什么,但如果您将结果存储在变量中,您可以在事后访问您的扩展属性:

$websites = Get-Website | ? {$_.State -eq 'Stopped'} |
    select Name, 
        @{n = "webconfigpath"; e = { "$($_.PhysicalPath)\Web.Config"}},
        @{n = "webconfigexists; e = { Test-Path $_webconfigpath }}
$websites[0].Name
$websites[0].WebConfigPath
$websites[0].WebConfigExists