function - Powershell:如何为system.object的输出创建函数?

标签 function powershell powershell-2.0

我正在编写脚本以从本地和远程计算机获取服务。我不得不将wmi call 分为本地和远程计算机(远程计算机需要不同的凭据)。我想将它们输出为System.Object。如何为system.object的输出创建函数?

这是我到目前为止的代码:

$objServicecol = @()

    # how do i get AddService object back 
    Function AddServiceObjects
    {
            ForEach ($Service in $Services)
            {
                $objService = New-Object System.Object
                $objService | Add-Member -MemberType NoteProperty -Name SystemName -Value $Services.SystemName 
                $objService | Add-Member -MemberType NoteProperty -Name Name -Value $Services.Name 
                $objService | Add-Member -MemberType NoteProperty -Name StartMode -Value $Services.StartMode
                $objService | Add-Member -MemberType NoteProperty -Name StartName -Value $Services.StartName
                $objService | Add-Member -MemberType NoteProperty -Name Status -Value $Services.Status
                #$objServiceCol += $objService
                AddServiceObjects += $objService
            }
        }

    # Executes local WMI 
    If ($Servers -contains "localhost") 
    {
        $Services = Get-WMIObject Win32_Service -ComputerName "localhost" | Select-Object SystemName, Name, StartMode, StartName, Status
        AddServiceObjects $Services
    }
...#execute remote wmi...

最佳答案

在.NET中,System.Object是继承层次结构的根,因此您输出的任何类型都可以视为System.Object。您可能要考虑在循环中创建psobject而不是System.Object(并简化它):

Function AddServiceObjects($Services)
{
    ForEach ($service in $Services)
    {
        New-Object psobject -Property @{
            SystemName = $service.SystemName
            Name       = $service.Name 
            StartMode  = $service.StartMode
            StartName  = $service.StartName
            Status     = $service.Status }
     }
}

请注意,由于不将New-Object输出分配给变量,它将从函数中获得输出-循环中的每次迭代都有一个对象。还要注意,您的foreach迭代变量是$service,但是您在$Services命令中引用了全局New-Object

关于function - Powershell:如何为system.object的输出创建函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10044917/

相关文章:

python - 将模块启动到 python 菜单中

.net - Powershell 对象 [] 到 .Net 集合?

powershell - 即使不使用-confirm开关,set-spphrase也会要求确认

powershell - 通过powershell协助获得值(value)的一部分

swift - "of"在 swift 3 中的函数参数之前

swift - 检查泛型类型是否是 Swift 中的函数类型

javascript - 如何阻止 JS 函数在移动设备上运行?

Powershell 将文件作为邮件附件发送

powershell - 通过变量获取具有多个路径的子项

excel - 仅当使用 powershell 知道索引号时才更改一个单元格的值