在管道变量上“必须指定一个对象”到 Get-Member

Ily*_*kov 3 powershell envdte nuget t4scaffolding

为什么我可以成功地将 cmdlet 的结果通过管道传输到 Get-Member,但不能通过变量?

PM> Get-ProjectFolder "Services" -Project "Foobar" | Get-Member


   TypeName: System.__ComObject#{8e2f1269-185e-43c7-8899-950ad2769ccf}

Name              MemberType Definition                                  
----              ---------- ----------                                  
AddFolder         Method     ProjectItem AddFolder (string, string)      
AddFromDirectory  Method     ProjectItem AddFromDirectory (string)       
AddFromFile       Method     ProjectItem AddFromFile (string)            
AddFromFileCopy   Method     ProjectItem AddFromFileCopy (string)        
AddFromTemplate   Method     ProjectItem AddFromTemplate (string, string)
Item              Method     ProjectItem Item (Variant)                  
ContainingProject Property   Project ContainingProject () {get}          
Count             Property   int Count () {get}                          
DTE               Property   DTE DTE () {get}                            
Kind              Property   string Kind () {get}                        
Parent            Property   IDispatch Parent () {get}                   
Run Code Online (Sandbox Code Playgroud)

.

PM> $f = Get-ProjectFolder "Services" -Project "Foobar"
PM> $f | Get-Member
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:6
+ $f | Get-Member
+      ~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationException
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
Run Code Online (Sandbox Code Playgroud)

编辑:https : //i.imgur.com/AeUW6Ge.png

在此处输入图片说明

von*_*ryz 5

怎么样Get-Member -InputObject $f,而不是管道?有区别,正如帮助所说,但它应该只考虑集合:

-输入对象

指定检索其成员的对象。

使用 InputObject 参数与将对象通过管道传递给 Get-Member 不同。