1

需要一些帮助来构建一个 powershell 脚本来帮助进行一些基本的字符串操作。我知道足够多的 powershell 会遇到麻烦,但无法弄清楚使这项工作正常进行的语法或编码。

我有一个看起来像这样的文本文件 -

Here is your list of servers:
server1
server2.domain.local
server3
Total number of servers: 3

我需要获取该文本文件并删除第一行和最后一行(始终是第一行和最后一行。)然后我需要每隔一行将其转换为 CSV 文件。

最终输出应该是一个看起来像这样的文本文件 -

server1,server2.domain.local,server3

关于从哪里开始的任何建议?谢谢!

4

3 回答 3

1

你可以试试 :

$a = Get-Content C:\temp\M.TXT # Where M.TXT is your original file
$a[1..($a.count-2)] | % {$s=""} {$s+=$_+","}{$s.trim(",") | Out-File m.csv} # M.CSV is the result file
于 2012-07-10T03:25:46.173 回答
0

这是其他几种方法。

(Get-Content foo.txt | Where {$_ -notmatch '^\s*$'} | Select -Skip 1 | 
     Select -Skip 1 -Last 2E9) -join ',' > foo.csv

如果您碰巧拥有PowerShell 社区扩展(用于 Skip-Object):

(Get-Content foo.txt | Where {$_ -notmatch '^\s*$'} | 
     Skip-Object -First 1 -Last 1) -join ',' > foo.csv

请注意,Where {$_ -notmatch '^\s*$'}消除了任何空白行。

于 2012-07-10T04:23:56.903 回答
0

您可以使用范围运算符:

$content = Get-Content D:\Scripts\Temp\test1.txt
$content[1..($content.count-2)] -join ',' | Out-File servers.txt

最好导出到 csv 文件,以便您可以将其导入并在服务器名称上进行操作:

$content = Get-Content D:\Scripts\Temp\test1.txt
$content[1..($content.count-2)] | Select-Object @{Name='ComputerName';e={$_}} | Export-Csv servers.csv -NoTypeInformation
于 2012-07-10T06:46:59.563 回答