我失去了一些东西在这里:

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher  
$objSearcher.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry  
$objSearcher.Filter = ("(objectclass=computer)")  
$computers = $objSearcher.findall()  

所以问题是为什么两下列产出同?

$computers | %{ 
"Server name in quotes $_.properties.name" 
"Server name not in quotes " + $_.properties.name 
}
PS> $computers[0] | %{"$_.properties.name"; $_.properties.name}
System.DirectoryServices.SearchResult.properties.name
GORILLA
有帮助吗?

解决方案

当你含$_.属性。名字符串中,这是返回的种类名称的财产。当一个变量包括在一个字符串串行评价,它要求ToString方法上的,象所引用的变量(不包括成员指定之后)。

在这种情况下,ToString方法返回 类型的名字.你可以强制评估的变量和成员类似的什么EBGreen建议,但是通过使用

"Server name in quotes $($_.properties.name)"  

在其他情况 PowerShell 被评估的变量和成员指定的第一个然后将它添加到以前的串。

你是对的,你得到回收集的属性。如果你管 $计算机[0].性能 要获得成员,可以探讨的对象模型从命令行。

重要的组成部分如下。

TypeName:系统。DirectoryServices.ResultPropertyCollection

名MemberType定义


值产系统。集合。ICollection值{得到;}

其他提示

我相信它已与的方式PS插入信息,在"".试试这个:

"服务器名称报价$($_.性)。名字"

或者你甚至可能需要一套美元().我不是某个地方,我可以测试它在现在。

靠近--以下工作正常,但是我想如果任何人有一个更深层次的解释。

PS C:\> $computers[0] | %{ "$_.properties.name"; "$($_.properties.name)" }
System.DirectoryServices.SearchResult.properties.name
GORILLA

所以这似乎是$_.属性。名字不尊重,就像我预期的那样。如果我可视正确的,事实上,该名称属是多值使其返回阵列。哪(我认为,)可以解释为什么以下工作:

$computers[0] | %{ $_.properties.name[0]}

如果"姓名"一字符串这应该返回的第一个字,但因为它是一系列返回的第一串。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top