gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:22:03 24 4
gpt4 key购买 nike

我正在编写脚本以从本地和远程计算机获取服务。我不得不将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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com