我正在尝试读出一个CSV文件,其中包含用户ID,给定名称,姓氏和某些用户的性别。该脚本应该读出userID并检查具有此ID的目录是否已存在,如果没有,则创建一个。比它应该读出,用户具有哪种性别。通过这些信息,脚本会生成一个文本文件,其中包含正确的称呼和静态正文,对于男性和女性来说都是相同的。这是我到目前为止所取得的成就:
#Variables
$script:pgm="welcome"
$script:log="$PSScriptRoot\$pgm.log"
$script:csv="$pgm.csv"
$script:dir="D:\ps\users"
$script:txt="$pgm.txt"
$script:fix="$pgm.fix" # fix is the file with the static text
$script:mrs="Dear Mrs."
$script:mr="Dear Mr."
# Create directories & textfiles
$imp=import-csv $csv -Delimiter ";" -Encoding UTF8
$users=$imp[0..2].Userid
$sex=$imp[0..2].Sex
$sirname=$imp[0..2].SirName
$f=cat $fix
foreach($a in $users) {
if(! (Test-Path $dir\$a)) {
New-Item -Path $dir\$a -ItemType Directory
}
}
foreach($d in $sex) {
if ($d -eq "F") {
foreach($name in $sirname) {
write-output $mrs $name"," | out-file $dir\$a\$txt
}
}
Else {
foreach($name in $sirname) {
write-output $mr $name"," | out-file $dir\$a\$txt
}
}
write-output $f >> $dir\$a\$txt
}
我有两个挣扎:
Write-Host -NoNewLine
可以解决此问题,但仅在控制台中,您无法将其传输到文件中。有没有办法用write-output
?输出文本文件如下所示:
Dear Mr.
Jones,
welcome to our company!
Your sysadmin
但它应该是这样的:
Dear Mr. Jones,
welcome to our company!
Your sysadmin
CSV文件:
Userid;GivenName;SirName;Sex
JACKS;Tom;Jackson;M
MILLE;Kate;Miller;F
JONES;Paul;Jones;M
感谢您的帮助!
答案 0 :(得分:1)
无需过于复杂!
$csv=Import-Csv users.csv -Delimiter ';'
$csv |%{
if ($_.Sex -eq 'M') {$prefix = 'Mr.'}
else{$prefix='Mrs.'}
echo "Dear $prefix $($_.SirName)" |out-file -filepath "c:\temp\$($_.userid)welcome.txt"
get-content $fix |out-file "c:\temp\$($_.userid)welcome.txt" -Append
}
答案 1 :(得分:1)
首先,您应该使用匹配的记录作为源,而不是将数据拆分为多个未链接的变量:
foreach($user in $imp) {...}
进入后,您可以调用$user.sex
和其他CSV字段来确定用户所需的参数。这将使电子邮件生成代码成为:
foreach ($user in $imp) {
$title=('Mr.','Mrs.')[$user.sex -eq 'F'] # returns 'Mr.' if there's not 'F' in sex
@"
Dear $title $($user.surname)!
Welcome to our company!
Your sysadmin.
"@ # a multilined string with placeholders for variables
} # that's all, folks