使用PowerShell将文本附加到文本文件中的某些值

时间:2015-02-22 12:09:08

标签: powershell

我有一个用;分隔的CSV文本文件,其格式为:

USER_EMPLOYEE_ID;SYSTEM1;USERNAME1

第一列是标识,以下列对是不同活动目录上的用户帐户。我已经放置了垃圾数据,但想法就在那里。

ay7suve0001;ADDPWN;ay7suve0001
AAXMR3E0001;ADDPWN;AAXMR3E0001
ABABIL;ADDPWN;ABABIL
ABDF17;ADDPWN;ABDF17;
ABKMPPE0001;ADDPWN;ABKMPPE0001
ABL1FL;ADDPWN;ABL1FL
AB6JG8E0004;ADDPWN;AB6JG8E0004;
ACB4YB;ADDPWN;ACB4YB
ACK7J9;ADDPWN;ACK7J9
ACLZFS;ADDPWN;ACLZFS;
ACQXZ3;ADDPWN;ACQXZ3

现在要求我必须将@ADDPWN.com之类的固定字符串附加到所有USERNAME1值。有些记录有;而有些记录没有。

是否有快速方法可以将@ADDPWN.com附加到每条线路上进行处理:

  • 任何;
  • 任何已经@ADDPWN.com

来自PowerShell?

2 个答案:

答案 0 :(得分:1)

Import-Csv是你的朋友。以下内容可以让您走上正轨。

Import-Csv "import.csv" -Delimiter ';' | 
foreach { 
    if ($_.username1 -notlike '*@ADDPWN.com') { $_.username1 += '@ADDPWN.com' }
    $_ 
} |
Export-Csv "export.csv" -Delimiter ';'

这假设您的csv文件的第一行是标题行。如果不是,您可以将-Header 'USER_EMPLOYEE_ID','SYSTEM1','USERNAME1'作为另一个参数传递给Import-Csv。

Export-Csv添加了一些额外的东西,比如参数的引号,所以如果你不想这样,你可能需要使用输出格式。

如需另外说明,请查看Changes last name, first name to first name, last name in last column CSV powershell

答案 1 :(得分:1)

这是一个对我有用的解决方案.........

#opens list of file names
$file2 ="F:\OneDrive_Biz\PowerApps\SecurityCameraVideoApp\file_list_names.csv"
$x = Get-Content $file2
#appends URl to beginning of file name list
for($i=0; $i -lt $x.Count; $i++){

    $x[$i] = "https://analytics-my.sharepoint.com/personal/gpowell_analytics_onmicrosoft_com/Documents/PowerApps/SecurityCameraVideoApp/Video_Files/" + $x[$i] 
}
$x

#remove all files in target directory prior to saving new list
get-childitem -path C:\_TEMP\file_list_names.csv | remove-item

Add-Content -Path C:\_TEMP\file_list_names_url.csv -Value $x