【问题标题】:Powershell - select data from single CSV cellPowershell - 从单个 CSV 单元格中选择数据
【发布时间】:2021-06-05 13:16:03
【问题描述】:

我需要从整个列的单元格中获取第二个值,这是一个 Samaccountname,每个单元格都有许多由“;”分隔的值,该列没有标题或标题。

然后我需要导出到一个新的 csv,这些 samaccountname 值加上下一列中每个值的属性“帐户过期”。

你能帮帮我吗?

CSV 格式


AAA;BBB;CCC;DDD


AAA2;BBB2;CCC2;DDD2


等等...这只是我需要从中提取信息的第一列,关于我不关心的其他列。

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    好的,显然您的 CSV 看起来像这样:

    AccountExpires;SamAccountname;Displayname;Company;Manager
    date1;user1;name1;Co1;Boss1
    date2;user2;name2;Co2;Boss2
    

    然后:

    # just take the SamAccountname column values and ignore the rest
    (Import-Csv -Path 'D:\Test\Original.csv' -Delimiter ';').SamAccountname | ForEach-Object {
        # calculate the account expiration date
        $user = Get-ADUser -Filter "SamAccountName -eq '$_'" -Properties AccountExpirationDate, accountExpires -ErrorAction SilentlyContinue
        if ($user) {
            $expires = if ($user.accountExpires -gt 0 -and $user.accountExpires -ne 9223372036854775807) { $user.AccountExpirationDate }
                       else { 'Never Expires' }
            # output an object
            [PsCustomObject]@{
                SamAccountName = $_
                AccountExpires = $expires
            }
        }
        else {
            Write-Warning "User '$_' does not exist"
        }
    } | Export-Csv -Path 'D:\Test\ExpiringAccounts.csv' -NoTypeInformation
    

    在记事本中打开时输出 ExpiringAccounts.csv 会是这样的:

    "SamAccountName","AccountExpires"
    "user1","Never Expires"
    "user2","6/5/2021 4:36 PM"
    

    【讨论】:

    • 不是真的,我刚刚放在那里的所有值(AAA;BBB;CCC;DDD)都在一个单元格中,下面的单元格包含相同类型的信息但不同的值。在同一列中的所有单元格中,我必须取第二个值,每个值用“;”分隔。在我获取该值之后,我必须编写脚本以获取每个值的 Account expires 属性并将它们写入一个新的 CSV(只是为了不覆盖读取文件),其中包含列中的所有 samaccount 名称值,以及所有 accountexpires 值在下一栏中。我希望这次我把自己说清楚了。
    • 对不起,我不习惯CSV文件,我说的是单元格,因为文件是在excel中打开的,但是在记事本中打开会清楚地表明没有单元格它列出如下帐户过期; Sam 帐户名;显示名称;公司;经理 - - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------------- date1;user1;name1;Co1;Boss1 -------------------------------------------------- ----------------------------------------- date2;user2;name2;Co2;Boss2 ...顺便说一句:第一列(AccountExpires)的值已过时,因此我无法将它们用于生成新输出。
    • @Salvador 所有这些你都应该在问题本身中提到,而不是在 cmets 中,因为它们很难阅读。无论如何,我现在已经为你改变了答案
    • 如何修改以将 samaccountname 和 accountexpirationdate 保存为新文件的标题?所以它可以用于下一次执行,当前代码搜索这些值来运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多