#powershell #hyper-v
Вопрос:
У меня есть скрипт для импорта имен виртуальных машин из hyper-v в файл txt. Проблема в том, что иногда имена имеют пробелы на обороте, и когда я пытаюсь отключить или включить их с помощью скрипта, он не находит эти машины из-за пробелов.
Есть ли способ удалить пробелы из файла?
$vm = Get-VM | select name | Out-File -FilePath $ListVM
(Get-Content $ListVM | Select-Object -Skip 3) | ? {$_.trim() -ne ""} | Set-Content $ListVM
Комментарии:
1. Зачем вам экспортировать в текстовый файл с возможностью экспорта в CSV и забывать о подобных проблемах?
2. На сервере не установлен office.
3.
Export-Csv
иImport-Csv
являются встроенными командлетами PS…….
Ответ №1:
Выдерживая соответствующий альтернативный комментарий/подход Сантьяго. причиной вашей проблемы может быть:
Как правило Out-*
, командлеты заставляют объекты проходить через систему форматирования PowerShell для отображения. Вы можете использовать Set-Content
с самого начала, чтобы избежать этого, однако вы не можете просто выбрать свойство name, при этом будут созданы объекты с одним свойством «имя». Когда Set-Content
видит, что он запишет синтаксис хэша/объекта в файл, пытающийся представить объект, например:
@{Name=MachineName}
Чтобы избежать этого, просто разверните свойство, которое вы хотите сохранить в файле:
Get-VM |
Select-Object -ExpandProperty Name |
Set-Content -FilePath $ListVM
Или:
(Get-VM).Name | Set-Content -FilePath $ListVM
Примечание: вы назначаете $VM
вывод, однако это приведет к $VM
тому, что значение будет равно нулю. Я не уверен, в чем заключается цель, но если вы хотите, чтобы результирующий список хранился в переменной, добавьте такой -PassThru
параметр, как:
$vm = (Get-VM).Name | Set-Content -FilePath $ListVM -PassThru