【问题标题】:PowerShell keep text formatting when reading in a filePowerShell在读取文件时保持文本格式
【发布时间】:2013-02-09 02:44:39
【问题描述】:

我相信这是一个简单的问题,但我无法理解它。我想在 Windows 上的命令外壳中执行诊断命令。像这样:

   $cmd =  "ipconfig >> c:\test.txt"

   $message = Invoke-Expression($cmd)

   [String]$message = Get-Content c:\topsecret\testme.txt

然后我希望能够读取文件并保留格式,最后通过他们的 API 将其发布到 pastebin。我试过了,但无论我做什么,我似乎都会丢失格式。这可以吗?

【问题讨论】:

    标签: c# powershell pastebin


    【解决方案1】:

    可能会转换为字符串数组。像这样,对于你的最后一个例子:

    $message = @(Get-Content c:\topsecret\testme.txt)
    

    或者第二个:

    $message = [string[]](ipconfig)
    

    【讨论】:

      【解决方案2】:

      这是因为您的选角。 Get-Content 返回一个对象数组,文本文件中的每行都有一个字符串对象。当您将其转换为 [string] 时,它会连接数组中的对象。问题是您没有指定要加入对象的内容(例如换行符(backtick)n)。

      ipconfig >> test.txt
      
      #Get array of strings. One per line in textfile
      $message = Get-Content test.txt
      
      #Get one string-object with linebreaks
      $message = (Get-Content test.txt) -join "`n"
      

      【讨论】:

      • 这对我不起作用。下面这样做:(Get-Content test.txt)-join [Environment]::NewLine
      • 如果您有 PS 3.0+,请尝试 Get-Content test.txt -Raw
      • 默认将文件分割成行是一个有趣的设计决策。
      • @usr,是吗? PowerShell 是围绕管道和随用随处理的概念构建的。默认情况下读取整个文件会让您等待 + 使用不必要的内存将整个文件加载到内存中,然后才能对其执行任何操作。人们喜欢 c# 中的 StreamReader 是有原因的 :)
      【解决方案3】:

      将所有数据作为单个字符串读取并嵌入换行符

      $file = 'c:\testfiles\testfile.txt'
      
      (IPconfig /all) > $file
      
      [IO.File]::ReadAllText($file)
      

      如果你有 V3,他们添加了 -Raw 参数来完成同样的事情:

      Get-Content $file -Raw
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-28
        • 2017-04-26
        • 2018-10-16
        • 1970-01-01
        • 1970-01-01
        • 2013-08-10
        • 2012-11-25
        • 1970-01-01
        相关资源
        最近更新 更多