cituje System.DirectoryServices.ResultPropertyCollection

hlasů
1

Mám tady něco chybí:

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

Takže otázka zní, proč tyto dva výstupy se liší?

$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
Položena 17/08/2008 v 18:33
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
1

Když jste součástí $ _. Properties.name v řetězci, že se vrací název typu objektu. Je-li proměnná součástí řetězce a řetězec je vyhodnocen, volá metodu ToString na daný objekt, na který odkazuje proměnná (ne včetně členů určených po).

V tomto případě se metoda ToString se vrací název typu . Můžete vynutit vyhodnocení proměnné a členové podobají těm, co EBGreen navrhli, ale s použitím

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

Ve druhém scénáři PowerShell vyhodnocuje proměnné a členové uvedeno první a pak se přidá do předchozí řetězec.

Máte pravdu, že jste získali zpět sbírku vlastností. Máte-li potrubí $ počítač [0] .properties dostat nosník, si můžete prohlédnout model objektu přímo z příkazového řádku.

Důležitou součástí je níže.

TypeName: System.DirectoryServices.ResultPropertyCollection

Pojmenovat membertype Definice


Majetkové hodnoty System.Collections.ICollection Hodnoty {get;}

Odpovězeno 17/08/2008 v 23:10
zdroj uživatelem

hlasů
0

Close-- Níže funguje správně, ale já bych měla zájem, jestli někdo má hlubší vysvětlení.

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

Takže se zdá, že $ _. Properties.name není úcta, jak jsem očekával, že se. Pokud jsem vizualizaci správně, skutečnost, že je vlastnost název je více hodnotami ji způsobuje vrátit matici. Který (myslím) by vysvětlovalo, proč tyto práce:

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

Je-li „name“ byl řetězec by to mělo vrátit první znak, ale proto, že je to pole se vrací do první řetězec.

Odpovězeno 17/08/2008 v 20:37
zdroj uživatelem

hlasů
0

Věřím, že to má co do činění s tím, jak že PS interpoluje informace v části „“. Zkuste to:

"Název serveru v uvozovkách $ ($ _. Vlastnosti) .name"

Nebo můžete dokonce potřebovat ještě jednu sadu $ (). Nejsem si někde, že jsem si to můžete vyzkoušet na právě teď.

Odpovězeno 17/08/2008 v 18:41
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more