【问题标题】:Powershell automatically using new linePowershell 自动使用换行符
【发布时间】:2016-04-15 18:25:51
【问题描述】:

我的脚本有问题。

我正在从需要修改的 XML 文件中获取路径。

$file = [xml](Get-Content "PATH\TO\XML.xml")

$file.here.is.my.attribute  | Format-Table -Wrap -AutoSize | out-file -filepath ".\PATHS.txt" -append 

Powershell 在我的路径中间插入换行符,因为它太长了(只需阅读有关缓冲区大小的信息)。我尝试将其保存到 .XML 文件而不是 .TXT 文件,但这对我不起作用。

有任何解决方法的想法吗?

文件应如下所示:

Path1\Path\Path\path  
Path2\Path\Path\path  
Path3\Path\Path\path 

但它看起来像:

Path1\Path\Path\  
path  
Path1\Path\Path\  
path  
Path1\Path\Path\  
path

XML 示例:

<?xml version="1.0" encoding="utf-8"?>
<unattend>
  <servicing>
    <package>
      <assemblyIdentity/>
      <source location="HERE\IS\MY\PATH"/>
    </package>
    <package>
      <assemblyIdentity/>
      <source location="HERE\IS\ANOTHER\PATH"/>
    </package>
    <package>
      <assemblyIdentity/>
      <source location="HERE\IS\ANOTHER\PATH"/>
    </package>
  </servicing>
</unattend>

【问题讨论】:

  • 以及为什么您认为需要将 Format-Table 传递到 Out-File?不应该是非此即彼吗?
  • 我用它自动将行格式化为正确的长度。但“自动调整大小”已达到最大值
  • 我认为有必要预先格式化我的数据...
  • 一个中是否有多个元素?无论哪种方式,我都可以使用$xml.unattend.servicing.package.source.location 取出那个你也可以通过点表示法获取属性。
  • 您可能在“$file.here.is.my.attribute”的末尾缺少一个“.location”——没有正确访问属性值

标签: xml powershell output autosize


【解决方案1】:

第一个Format-Table 仅用于控制台输出。尝试用于除此之外的任何东西都会给您带来问题。鉴于您的示例 XML,您可以使用点符号来获取所有 location

在您的示例中,您试图输出具有 location 属性的对象数组。使用点表示法调用属性会从输出中删除该层。

$xmlFile = [xml](Get-Content "PATH\TO\XML.xml")
$xmlFile.unattend.servicing.package.source.location | Set-Content ".\PATHS.txt" 

在这种情况下,我认为您实际上不需要附加到文件中。但是,如果您真的要构建一个更大的文件,那么您可以在我的示例中使用 Add-Content 代替 Set-Content

样本输出

HERE\IS\MY\PATH
HERE\IS\ANOTHER\PATH
HERE\IS\ANOTHER\PATH

【讨论】:

  • 非常感谢,我几乎花了几个小时在这个问题上。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
相关资源
最近更新 更多