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