Rozwiń wartości właściwości
Za pomocą poleceń nawiasów można podać dane wejściowe parametru bez użycia potoku. W niektórych przypadkach jednak może być konieczne manipulowanie obiektami utworzonymi za pomocą polecenia nawiasu, tak aby dane wyjściowe polecenia miały typ wymagany przez parametr .
Możesz na przykład wyświetlić listę wszystkich procesów uruchomionych na każdym komputerze w domenie. W tym przykładzie załóżmy, że masz bardzo małą domenę laboratorium zawierającą tylko kilka komputerów. Listę wszystkich komputerów w domenie można uzyskać, uruchamiając następujące polecenie:
Get-ADComputer –Filter *
Jednak to polecenie generuje obiekty typu ADComputer. Nie można użyć tych obiektów bezpośrednio w poleceniu nawiasu, takim jak w następującym poleceniu:
Get-Process –ComputerName (Get-ADComputer –Filter *)
Parametr –ComputerName oczekuje obiektów typu String. Jednak polecenie w nawiasach nie generuje obiektów typu Ciąg znaków. Parametr –ComputerName chce tylko nazwy komputera. Jednak polecenie udostępnia obiekt zawierający nazwę, wersję systemu operacyjnego i kilka innych właściwości.
Możesz wypróbować następujące polecenie:
Get-Process –ComputerName (Get-ADComputer –Filter * | Select-Object –Property Name)
To polecenie wybiera tylko właściwość Name . Ta właściwość jest nadal elementem członkowskim całego obiektu ADComputer . Jest to właściwość Name obiektu. Mimo że właściwość Name zawiera ciąg, nie jest to sam ciąg. Parametr –ComputerName oczekuje ciągu, a nie obiektu z właściwością. W związku z tym to polecenie też nie działa.
Następujące polecenie umożliwia przekazanie nazwy komputera jako ciągu do parametru -ComputerName :
Get-Process –ComputerName (Get-ADComputer –Filter * | Select-Object –ExpandProperty Name)
Parametr –ExpandProperty akceptuje jeden i tylko jedną nazwę właściwości. W przypadku użycia tego parametru tylko zawartość określonej właściwości jest generowany przez polecenie Select-Object. Niektóre osoby nazywają tę funkcję wyodrębniającą zawartość właściwości. Oficjalny opis funkcji rozszerza zawartość właściwości.
W poprzednim poleceniu wynik polecenia nawiasu jest kolekcją ciągów, które są przekazywane jako pojedyncze ciągi, a nie tablicy, i to jest to, czego oczekuje parametr –ComputerName . Polecenie będzie działać poprawnie; może jednak spowodować wystąpienie błędu, jeśli co najmniej jeden komputer nie może zostać osiągnięty w sieci.
Rozszerzanie wartości właściwości działa również podczas potokowania danych wyjściowych. Rozważmy następujący przykład:
Get-ADUser Ty -Properties MemberOf | Get-ADGroup
To polecenie zwraca błąd, ponieważ program Windows PowerShell nie może dopasować właściwości MemberOf do żadnej właściwości Get-ADGroup.
Jeśli jednak rozszerzysz wartość właściwości MemberOf , jak w poniższym przykładzie, program Windows PowerShell może dopasować wynikowe dane wyjściowe do wartości, którą get-ADGroup rozumie jako prawidłowe dane wejściowe:
Get-ADUser Ty -Properties MemberOf | Select-Object -ExpandProperty MemberOf | Get-ADGroup