Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取成员停止PowerShell管道_Powershell - Fatal编程技术网

获取成员停止PowerShell管道

获取成员停止PowerShell管道,powershell,Powershell,管道化对象集合时,gm和%{$|gm}的结果不同。如何描述这种差异 例如,我们定义了两个自定义对象$a和$b: PS C:\> $a = [PSCustomObject]@{p=1; q=2} PS C:\> $b = [PSCustomObject]@{r=3; s=4} 当将它们输送到gm时,我们不知何故只得到$a的属性: PS C:\> $a, $b | gm -MemberType NoteProperty | % { $_.Name } p q 当管道将它们传输到

管道化对象集合时,
gm
%{$|gm}
的结果不同。如何描述这种差异

例如,我们定义了两个自定义对象
$a
$b

PS C:\> $a = [PSCustomObject]@{p=1; q=2}
PS C:\> $b = [PSCustomObject]@{r=3; s=4}
当将它们输送到
gm
时,我们不知何故只得到
$a
的属性:

PS C:\> $a, $b | gm -MemberType NoteProperty | % { $_.Name }
p
q
当管道将它们传输到
%{$|gm}
时,我们得到了
$a
$b
的属性,正如预期的那样:

PS C:\> $a, $b | % { $_ | gm -MemberType NoteProperty } | % { $_.Name }
p
q
r
s
当数组中相同类型的对象没有匹配的属性时,Get成员(和Powershell)似乎有点困惑:

PS C:\> $a, $b | 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()             
p           NoteProperty int p=1                       
q           NoteProperty int q=2                       

PS C:\> $a, $b

p q
- -
1 2

PS C:\> $a, $b | Select-Object -Property p, q, r, s

p q r s
- - - -
1 2
    3 4
我的猜测是,
Get Member
迭代每个类型,并且只输出每个类型一次。例如,
1,(Get Date),2 | gm
只输出
System.Int32
的一个实例

比较最后两行的输出:

[int32]$c = 1;
[int32]$d = 2;

$d | Add-Member -MemberType NoteProperty -Name 'Test' -Value $true -Force;

$c, $d | Get-Member -MemberType NoteProperty;

$d, $c | Get-Member -MemberType NoteProperty;
当数组中相同类型的对象没有匹配的属性时,Get成员(和Powershell)似乎有点困惑:

PS C:\> $a, $b | 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()             
p           NoteProperty int p=1                       
q           NoteProperty int q=2                       

PS C:\> $a, $b

p q
- -
1 2

PS C:\> $a, $b | Select-Object -Property p, q, r, s

p q r s
- - - -
1 2
    3 4
我的猜测是,
Get Member
迭代每个类型,并且只输出每个类型一次。例如,
1,(Get Date),2 | gm
只输出
System.Int32
的一个实例

比较最后两行的输出:

[int32]$c = 1;
[int32]$d = 2;

$d | Add-Member -MemberType NoteProperty -Name 'Test' -Value $true -Force;

$c, $d | Get-Member -MemberType NoteProperty;

$d, $c | Get-Member -MemberType NoteProperty;

获取成员
仅获取相同
类型名称的第一个对象的成员
@PetSerAl感谢您的快速回复
Get Member
似乎像你说的那样工作。我不知道它为什么会这样,我只能猜测。我认为,它针对一般用例进行了优化,如
ps | gm
dir | gm
。是否应
ps | gm
制作有关
系统.诊断.过程
的信息副本?通常,具有相同
TypeName
的对象具有相同的成员,因此
Get Member
仅为每个
TypeName
打印一次此信息
Get Member
仅为相同
TypeName
的第一个对象获取成员@PetSerAl感谢您的快速回复
Get Member
似乎像你说的那样工作。我不知道它为什么会这样,我只能猜测。我认为,它针对一般用例进行了优化,如
ps | gm
dir | gm
。是否应
ps | gm
制作有关
系统.诊断.过程
的信息副本?通常情况下,具有相同
TypeName
的对象具有相同的成员,因此
Get Member
只为每个
TypeName
打印一次此信息$a、 1 |获取成员,
$a.PSTypeNames.Insert(0,'System.Int32')$a、 1 |获得会员
@Bacon Bits@PetSerAl感谢您的回复!我了解
Get Member
的行为。但是我仍然不知道这个行为什么时候有用$a、 1 |获取成员,
$a.PSTypeNames.Insert(0,'System.Int32')$a、 1 |获得会员
@Bacon Bits@PetSerAl感谢您的回复!我了解
Get Member
的行为。但我仍然不知道这种行为何时有用。