Разбор переменной Powershell - PullRequest
1 голос
/ 21 февраля 2020

У меня есть простой скрипт, который я хочу показать мне некоторые результаты, но от имени виртуальной машины я хочу только до первого пункта, все остальное осталось, потому что он генерирует много шума.

$today = (get-date).Date
$backup = Get-VBRBackup | where {$_.info.jobname -eq "A. ProduccionInterna.Infraestructura Backup Copy"}
if ($backup) {
$backup.GetAllStorages() | where {$_.CreationTime.Date -eq $today} | select @{Name="Nombre de la VM"; Expression={$_.PartialPath[0]}}, @{Name="Size VM"; Expression={$_.Stats.BackupSize/1GB}} , @{Name="Deduplicacion"; Expression={$Session.BackupStats.DedupRatio/10}} , @{Name="Compress Ratio"; Expression={$Session.BackupStats.CompressRatio/10}} , @{Name="Fecha"; Expression={(get-date).Date}}
}

Результат:

 f5downinxn.vm-37087D2020-02-21T030000_B816.vib

Но я не буду:

 f5downinxn

Введенная цепочка не работает.

[0]

Я также пытался с

(".")[1]

РЕДАКТИРОВАТЬ

С моим кодом:

Nombre de la VM : f5downinxn.vm-37087D2020-02-21T030000_B816.vib

С изменениями:

Код

$today = (get-date).Date
$backup = Get-VBRBackup | where {$_.info.jobname -eq "A. ProduccionInterna.Infraestructura Backup Copy"}
 if ($backup) {
$backup.GetAllStorages() | where {$_.CreationTime.Date -eq $today} | select @{Name="Nombre de la VM"; Expression={$_.PartialPath[0].split('.')[0]}}, @{Name="Size VM"; Expression={$_.Stats.BackupSize/1GB}} , @{Name="Deduplicacion"; Expression={$Session.BackupStats.DedupRatio/10}} , @{Name="Compress Ratio"; Expression={$Session.BackupStats.CompressRatio/10}} , @{Name="Fecha"; Expression={(get-date).Date}} 
}


Nombre de la VM : 

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Свойство .PartialPath является объектом Veeam.Backup.Common.CPartialPath. Табличный вывод выполняет некоторые магические преобразования строки c, но базовым объектом является , а не строка . Однако Veeam.Backup.Common.CPartialPath имеет метод переопределения ToString(), который должен облегчить эту задачу.

Select @{Name="Nombre de la VM"; Expression={$_.PartialPath.ToString().Split('.')[0]}}
0 голосов
/ 21 февраля 2020

Попробуйте сделать это в вашем Select-Object, где вы в настоящее время возвращаете просто $_.PartialPath в качестве имени виртуальной машины:

$_.PartialPath.Split('.')[0]

Это должно разделить содержимое свойства PartialPath на . символ в массив строк, а затем вернет вам первый.

Обратите внимание, что вы можете получить ошибки, если PartialPath когда-либо содержит строку без ., так как разделение не будет генерировать массив и использование [0] будет недействительным.

...