我是一个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 }
}
我知道在选择对象后我可以引用扩展属性,但是可以像上面那样进行吗?
干杯 麦克
答案 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