【问题标题】:Check if a string exists in a .CSV file and if it doesn't then append it using Powershell检查 .CSV 文件中是否存在字符串,如果不存在则使用 Powershell 附加它
【发布时间】:2014-10-26 12:27:44
【问题描述】:

我有一个 .csv 文件,它使用两列都有标题: 老师,频道

教师栏下方是教师用户名,频道栏下方是教师指定频道。

我正在尝试使脚本正常工作,该脚本将通过 .csv 检查登录的教师用户名,然后回复他们的频道,如果他们的用户名不存在,则附加它并为其分配一个编号为 1 的频道高于以往的教师频道。一旦脚本添加了登录用户的新用户名,它应该使用他们新分配的频道。

到目前为止,我有这个:

$strCSV = "\\SEVERNAME\SHARE\FOLDER"
$strCurrentUser = Get-WmiObject -Class Win32_ComputerSystem
$strChannel = Import-Csv $strCSV\teachers.csv | where {$_.Teacher -eq $strCurrentUser.UserName.TrimStart("DOMAIN\")} | % channel

这并不多,但我对 Powershell 真的很陌生,所以请提供任何帮助。

【问题讨论】:

    标签: string powershell csv search append


    【解决方案1】:

    这样的事情会起作用。它为现有用户导入 CSV 检查。如果找到,则执行其他操作,如果未找到,则获取最后一个频道添加一个并将新教师导出到文件末尾。

    $file = "\\SEVERNAME\SHARE\FOLDER\teachers.csv"
    $teachers = Import-Csv $file
    $strCurrentUser = (Get-WmiObject -Class Win32_ComputerSystem).UserName.TrimStart("DOMAIN\")
    $strChannel = $teachers | where {$_.Teacher -eq $strCurrentUser} | % channel
    if($strChannel){
    #dostuff with channel
    }
    else{
    $lastChannel = [int]$teachers[$teachers.length-1].channel + 1
    "{0},{1}" -f $strCurrentUser,$lastChannel | add-content -path $file
    }
    

    【讨论】:

    • 谢谢 Dane,您能否向我解释一下“{0},{1}”-f 部分的作用,我以前见过这个,但不明白为什么它在那里宁可确定也不要猜测。
    • "{0},{1}" -f 只是一个格式运算符。所以基本上说将输出格式化为“$strCurrentUser,$lastChannel”,然后将其添加到文件的末尾。由于您的文件只是一个两列逗号分隔的 csv,它应该匹配得很好。如果您希望它采用不同的格式,例如 var1-var2,您可以执行“{0}-{1}”-f 如果您愿意,请参阅这篇 ms 文章了解更多信息:social.technet.microsoft.com/wiki/contents/articles/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多