Powershell ';必须指定一个对象';关于获取成员的管道变量
为什么我可以成功地通过管道将cmdlet的结果传递给成员,而不是通过变量Powershell ';必须指定一个对象';关于获取成员的管道变量,powershell,nuget,envdte,t4scaffolding,Powershell,Nuget,Envdte,T4scaffolding,为什么我可以成功地通过管道将cmdlet的结果传递给成员,而不是通过变量 PM> Get-ProjectFolder "Services" -Project "Foobar" | Get-Member TypeName: System.__ComObject#{8e2f1269-185e-43c7-8899-950ad2769ccf} Name MemberType Definition
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}
编辑:
用
获取成员-InputObject$f
而不是管道怎么样?正如帮助所说的,有一个区别,但是它应该只考虑集合:
-输入对象
指定检索其成员的对象
使用InputObject参数与管道化对象以获取成员不同
谢谢,
InputObject
确实有效,但我不明白的是为什么管道的单行版本有效,而将结果保存到var和管道却无效。我说这两者在逻辑上有区别,对吗?@IlyaKozhevnikov,至少根据文件,不应该有区别。如果计算$f
,会发生什么情况?它提供的输出是否与Get ProjectFolder
命令相同?@IlyaKozhevnikov另外,键入.Net.typed表示“没有逻辑差异”。是的,输出是相同的,请看编辑中的屏幕截图。是的,我认为这与它是COM对象有关,可能是某种竞争条件,$(Get ProjectFolder Foo)| Get Member
以与变量变量相同的方式失败。
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