【问题标题】:Look for a specific value in a csv file powershell在 csv 文件 powershell 中查找特定值
【发布时间】:2022-11-22 04:33:49
【问题描述】:

所以我对 PS 有点陌生,我花了整个上午试图解决这个问题,并在这里和在 Google 上寻找类似的问题/答案。

基本上这是我的脚本:

$value = $env:COMPUTERNAME
$csv =  Import-Csv -Path '\\UNC\PATH\file.csv'
$props =  'CsSystemFamily','CsDNSHostName', 'CsManufacturer' 


Get-ComputerInfo | Select-Object -Property $props | Export-Csv -Path $csv -NoTypeInformation -       Delimiter ';' -Append

我将其部署为 GPO,因为我需要从某些 OU 收集这些特定数据。问题是我想先检查 CsDNSHostName 列中是否存在计算机名,这样我的脚本就不会两次添加同一台计算机。

提前致谢,

我尝试了很多东西,但我发现的最后一件事是:

$value = $env:COMPUTERNAME
if ($file-contains $value) {

write-host 'Computer name already exists'
} else {
Get-ComputerInfo | Select-Object -Property $props | Export-Csv -Path $csv -NoTypeInformation -     Delimiter ';' -Append

}

这似乎不起作用,因为它会跳过 if 并直接转到 else

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    -contains 是正确的运算符,但您必须将它应用于 CsDNSHostName 属性(列)值的数组,这很容易做到,感谢 member-access enumeration

    $props =  'CsSystemFamily','CsDNSHostName', 'CsManufacturer' 
    $csvFile = '\UNCPATHile.csv'
    $csv = Import-Csv $csvFile -Delimiter ';'
    
    # $csv.CsDNSHostName returns an array of 
    # all CsDNSHostName column (property) values.
    if ($csv.CsDNSHostName -contains $env:COMPUTERNAME) {
      Write-Host 'Computer name already exists'
    } else {
      Get-ComputerInfo | 
        Select-Object -Property $props |
        Export-Csv $csvFile -NoTypeInformation -Delimiter ';' -Append
    }
    

    【讨论】:

    • 嘿伙计,非常感谢您花时间解释和发布答案。对此,我真的非常感激。
    • 我很高兴听到它有所帮助,@Charles94630;我的荣幸。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2019-05-31
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多