我有一个脚本可以将虚拟机的名称从 hyper-v 导入到 txt 文件。 问题是有时名称后面有空格,当我尝试用脚本关闭或打开它们时,由于空格,它找不到那些机器。
有什么办法可以去掉文件中的空格?
$vm = Get-VM | select name | Out-File -FilePath $ListVM
(Get-Content $ListVM | Select-Object -Skip 3) | ? {$_.trim() -ne ""} | Set-Content $ListVM
答案 0 :(得分:2)
忍受圣地亚哥的相关替代评论/方法。问题的原因可能是:
通常,Out-*
cmdlet 将通过 PowerShell 的显示格式系统强制对象。您可以从一开始就使用 Set-Content
来避免这种情况,但是您不能简单地选择 name 属性,否则会创建具有名为“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