我正在编写一个脚本,尝试输出两个不同的自定义对象; 一个接着一个,但是遇到了问题。为了简化,我将所有代码都剥离到最少:
$beep = new-object -TypeName PSObject
$beep | Add-Member -MemberType NoteProperty -Name "Entry1" -Value "beep1"
$beep | Add-Member -MemberType NoteProperty -Name "Entry2" -Value "beep1"
$beep
$boop = new-object -TypeName PSObject
$boop | Add-Member -MemberType NoteProperty -Name "Entry1" -Value "boop1"
$boop | Add-Member -MemberType NoteProperty -Name "Entry2" -Value "boop1"
$boop
当我运行这个程序时,它似乎将对象合并在一起。当我执行get-member时,它似乎只显示一个对象。为什么会这样呢?
在我要完成的代码中,一个对象是类似上面的自定义对象,但另一个对象是selected.system.int32。当我尝试输出这两个对象时,只有第一个对象被输出。如果我改变顺序,情况依然如此,只输出第一个对象。我做错了什么或者是我没有理解到位?
@JamesQ - 我猜我感到困惑的是当我执行以下操作时:
$beep = new-object -TypeName PSObject
$beep | Add-Member -MemberType NoteProperty -Name "Entry1" -Value "beep1"
$beep | Add-Member -MemberType NoteProperty -Name "Entry2" -Value "beep1"
$beep | get-member
$boop = new-object -TypeName PSObject
$boop | Add-Member -MemberType NoteProperty -Name "Entry1" -Value "boop1"
$boop | Add-Member -MemberType NoteProperty -Name "Entry2" -Value "boop1"
$boop | get-member
我理解为:
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Entry1 NoteProperty System.String Entry1=beep1
Entry2 NoteProperty System.String Entry2=beep1
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Entry1 NoteProperty System.String Entry1=boop1
Entry2 NoteProperty System.String Entry2=boop1
我试图将问题简化,但我觉得我把它弄得太模糊了...
我正在尝试重复使用一些代码:
function Get-NetworkConfig($computerName) {
Get-WmiObject Win32_NetworkAdapter -Filter 'NetConnectionStatus=2' |
ForEach-Object {
$result = 1 | Select-Object Name, IP, MAC
$result.Name = $_.Name
$result.MAC = $_.MacAddress
$config = $_.GetRelated('Win32_NetworkAdapterConfiguration')
$result.IP = $config | Select-Object -expand IPAddress
$result
}
}
然后在同一脚本中,有类似这样的内容:
function Get-ComputerInfo($computerName) {
$operatingSystem = Get-WMIObject -computername $computerName win32_operatingsystem
$computerInfo = new-object -TypeName PSObject
$computerInfo | Add-Member -MemberType NoteProperty -Name "Computer Name" -Value ("$computerName")
$computerInfo | Add-Member -MemberType NoteProperty -Name "Operating System" -Value ("$operatingSystem.Caption")
$computerInfo
}
$computerNames = $args
foreach ($computerName in $computerNames) {
Get-ComputerInfo($computerName)
Get-NetworkConfig($computerName)
}
只有get-computerinfo的输出被显示了,然后是一堆空白行,而get-networkconfig本应该输出信息。
如果我交换命令的顺序,那么第一个函数得到输出,但第二个函数只会输出空白行。
为什么我不能像这样依次调用两个函数呢?
Get-Member
一次只处理一个对象,因此我不理解您关于“显示一个对象”的说法。尝试运行此命令的不同排列组合,以确信您拥有多个对象:Write-Output "beep Entry1 = $($Beep.Entry1)"
- JamesQMurphyreturn $beep, $boop
。 - user847990