Необходимо продать собственность. Выберите не удаляет объект иначе:
$vmm = Get-VM –ComputerName (Get-ClusterNode –Cluster clustername) `
| Select-Object -ExpandProperty name
Чтобы объяснить, что -ExpandProperty
делает:
Прежде всего, недостатком -ExpandProperty
является то, что вы можете сделать это только в один собственности на время.
Select-Object
обычно обертывает результаты другим объектом, чтобы свойства оставались свойствами. Если вы скажете $x = Get-ChildItem C:\Windows | Select-Object Name
, вы получите массив объектов с одним свойством: Name.
PS C:\> $x = Get-ChildItem C:\Windows | Select-Object Name
PS C:\> $x
Name
----
45235788142C44BE8A4DDDE9A84492E5.TMP
8A809006C25A4A3A9DAB94659BCDB107.TMP
.
.
.
PS C:\> $x[0].Name
45235788142C44BE8A4DDDE9A84492E5.TMP
PS C:\> $x[0].GetType().FullName
System.Management.Automation.PSCustomObject
Обратите внимание на заголовок? Name
- свойство объекта.
Кроме того, базовый объект с его типа еще вид там:
PS C:\> $x | Get-Member
TypeName: Selected.System.IO.DirectoryInfo
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Name NoteProperty string Name=45235788142C44BE8A4DDDE9A84492E5.TMP
TypeName: Selected.System.IO.FileInfo
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Name NoteProperty string Name=bfsvc.exe
Как правило, это все замечательно. Тем более, что мы обычно хотим несколько свойств объекта.
Иногда, однако, не то, что мы хотим. Иногда мы хотим, чтобы массив был тем же типом, что и выбранное свойство. Когда мы его используем позже, мы хотим, чтобы просто это свойство и ничего больше, и мы хотим, чтобы он был точным того же типа как собственность и ничего больше.
PS C:\> $y = Get-ChildItem C:\Windows | Select-Object -ExpandProperty Name
PS C:\> $y
45235788142C44BE8A4DDDE9A84492E5.TMP
8A809006C25A4A3A9DAB94659BCDB107.TMP
.
.
.
PS C:\> $y[0].Name
PS C:\> $y[0]
45235788142C44BE8A4DDDE9A84492E5.TMP
PS C:\> $y.GetType().FullName
System.Object[]
PS C:\> $y[0].GetType().FullName
System.String
Уведомление о том, что заголовка нет, и любые вызовы свойства Name не работают; больше нет свойства Name.
И нет ничего осталось от оригинального объекта:
PS C:\> $y | Get-Member
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
.
.
.
.
В основном, здесь это эквивалент делать это:
$z = Get-ChildItem C:\Windows | ForEach-Object { $_.Name }
который я думаю, что, как вы должны были сделать это в PowerShell v1.0 или v2.0 ... Прошло слишком много лет с тех пор, как я использовал это, чтобы правильно запомнить.
Должно ли быть: '{Get-VMNetworkAdapter -VMName $ item.name}'? –