2016-03-09 57 views
0

我有下面的代码,基本上得到的服务器名,并将其添加到一个UNC一个CSV。我遇到的问题是,如果我多次运行它,它会不断添加标题并添加第二台服务器。添加到CSV

首先来看这是文件的外观:

ServerName 
Server1

第二轮,这是发生了什么:

ServerName 
Server1 
ServerName 
Server2

我怎样才能避免这种情况,使服务器只是获取,而不是附加的头的每次写入?

这是我的代码的外观:

$servername = $env:computername 

# convert string to an object, otherwise if you output to a CSV it will save the 
# strings length instead of the servername 

# This entry is for testing 
#$servername = "test1" 

$obj_list = $servername | Select-Object @{Name='ServerName';Expression={$_}} 

# converts to an object and sets no header for the column 
#$obj_list | ConvertTo-Csv -NoTypeInformation | % {$_.Replace('"','')} | select -Skip 1 | Add-Content \\test\d$\citrixservers\test1.csv 
$obj_list | ConvertTo-Csv -NoTypeInformation | % {$_.Replace('"','')} | Add-Content \\test\d$\citrixservers\servers.csv 
+0

在第二次运行中,您可以尝试如下所示:'$ obj_list | Select-Object -ExpandProperty ServerName |添加内容$文件-Encoding UTF8' – DarkLite1

回答

1

跳过头,如果文件已经存在:

$csv = '\\test\d$\citrixservers\servers.csv' 

$skip = if (Test-Path -LiteralPath $csv) { 1 } else { 0 } 

$obj_list | ConvertTo-Csv -NoType | 
    Select-Object -Skip $skip | 
    ForEach-Object { $_.Replace('"','') } | 
    Add-Content \\test\d$\citrixservers\test1.csv 
+0

谢谢。需要把引号括住路径为CSV: “$ CSV =‘\\测试\ d $ \ citrixservers \ servers.csv’” –

1

您需要使用出口-CSV与-append参数,而不是ConvertTo- CSV格式。这是一种方法。

$servers = @('server1','server2') 
foreach ($server in $servers) { 
    [pscustomobject]@{'ServerName' = $server} | Export-Csv -Append -Path C:\Servers.csv 
} 
+0

注意'-Append'参数在PowerShell中V3添加和不可用早期版本。 –