【发布时间】:2015-01-14 22:51:46
【问题描述】:
我正在尝试使用来自 IIS7 的 WebAdministration 模块的数据创建自定义 PowerShell 对象。该对象应从 IIS 中的工作进程的 GetExecuteRequest WmiMethod 捕获 ClientIPAddress 和 SiteID。
$p = Get-WmiObject WorkerProcess -Namespace root\WebAdministration -ComputerName . | Invoke-WmiMethod -Name GetExecutingRequests | Select-Object -ExpandProperty OutputElement
$wpob = @()
foreach($w in $p)
{
$webrequests = New-Object PSObject
$webrequests | Add-Member -Type NoteProperty -Name ClientIP -Value ($w | select -ExpandProperty ClientIPAddress)
$webrequests | Add-Member -Type NoteProperty -Name SiteID -Value ($W | select -ExpandProperty SiteID)
$wpobj += $webrequests
}
问题:
对象 ($wpobj) 在 get-member 下包含 'ClientIP' 和 'SiteID',但您无法使用 $wpobj.clientip 或 $wpobj.siteid 获取这些值。我可以检索这些值的唯一方法是使用 $wpobj |选择 clientip 或 $wpobj |选择站点ID
无法以上述方式获取属性的值使得对数据进行排序/分组变得更加困难,因为我无法在以后的管道中选择值。
有人知道我可能会错过什么吗?我以前没见过这个。仅在这种特殊情况下
【问题讨论】:
-
直接索引会得到什么?什么版本的powershell?值集的类型重要吗?你能在这个循环中设置文字字符串并让它工作吗?
-
clientip和siteid是什么对象?当您为对象设置值时,可能需要将它们转换为字符串。 -
你的 $wpobj 是一个 $webrequests 对象的数组。每个 $webrequests 对象都将具有“ClientIP”和“SiteID”的属性。因此,要获得您指定的特定值,请使用索引。即 $wpobj[0].ClientIP ; $wpobj[0].SiteID
-
感谢您的回复。 @JanChrbolka - 如果我使用 $wpobj[0].siteid 它会输出我正在寻找的值,但不幸的是它在执行 $wpobj.siteid 时不会输出所有值 - 就好像该属性不存在当我这样做时,该列是空的。这是 powershell V3
-
当你使用 $wpobj.siteid 时你希望得到什么输出?我问的原因是,也许您应该使用不同类型的对象来存储数据,具体取决于您要如何操作它。
标签: powershell iis-7 psobject web-administration