【问题标题】:Custom PowerShell Object Property Issue自定义 PowerShell 对象属性问题
【发布时间】: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?值集的类型重要吗?你能在这个循环中设置文字字符串并让它工作吗?
  • clientipsiteid是什么对象?当您为对象设置值时,可能需要将它们转换为字符串。
  • 你的 $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


【解决方案1】:

解决方案是将 Powershell 升级到 V4.0。 IE.invoke 不适用于早期版本的 Powershell。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    相关资源
    最近更新 更多