【问题标题】:Powershell script with Contains operator not working包含运算符的 Powershell 脚本不起作用
【发布时间】:2020-04-12 11:40:08
【问题描述】:

我完全被卡住了!希望有人可以帮助指出我做错了什么。 PS脚本如下。

为了测试,“newusers.csv”中有 2 个用户,“currentmembers.csv”中有相同的 2 个用户。这些是刚刚重命名的同一个文件。脚本的结果是“newusers.csv”中的 2 个用户不是“currentmembers.csv”的成员。这显然是错误的,但我无法弄清楚脚本有什么问题。

$list = Import-Csv newusers.csv
$members = Import-Csv currentmembers.csv

foreach ($UPN in $list) {
    If ($members-Contains $UPN.upn) {
       Write-Host $UPN.upn "is member"
   } Else {
       Write-Host $UPN.upn "is not a member"
    }}

结果 用户 1 不是会员 用户 2 不是会员

【问题讨论】:

  • 您的 CSV 是否只有 1 列 2 行包含 UPN?

标签: powershell contains


【解决方案1】:

您的 $member 应该是字符串数组,而不是对象数组。与您比较 $upn 相同。UPN - $upn 是一个对象,您正在访问它的 UPN 成员。

希望我解释清楚

$members = Import-Csv currentmembers.csv | select -expandproperty ColumnName

【讨论】:

    【解决方案2】:

    您的两个 Import-CSV 调用正在创建一个对象数组,每个对象包含两个具有 1 个值 (UPN) 的对象。您对-contains 的使用在这里不起作用,因为您没有直接与字符串进行比较,更多信息here

    你有两个选择。

    #1 你可以使用-in

    foreach ($UPN in $list) {
        If ($UPN.upn -in $members.upn) {
           Write-Host $UPN "is member"
        } 
        Else {
           Write-Host $UPN "is not a member"
        }
    }
    

    #2 你可以使用-match

    foreach ($UPN in $list) {
        If ($members -match $UPN.upn) {
           Write-Host $UPN.upn "is member"
        } 
        Else {
           Write-Host $UPN.upn "is not a member"
        }
    }
    

    【讨论】:

      【解决方案3】:

      完全同意 Owain 的回答,但我已经完成了一半,所以我想我会完成它。您可以尝试直接在 PowerShell 中使用示例数据,如下所示,使用 ConvertFrom-Csv,这样可以节省您编辑文件然后跳回 PowerShell 的时间:

      $list = @'
      upn
      user 1
      user 2
      user 7
      user 99
      '@ | ConvertFrom-Csv
      
      $members = @'
      upn
      user 2
      user 1
      user 4
      '@ | ConvertFrom-Csv
      
      foreach ($UPN in $list) {
          If ($UPN.upn -in $members.upn) {
             Write-Host $UPN.upn "is member"
         } Else {
             Write-Host $UPN.upn "is not a member"
      }}
      

      正如 Owain 所说,您需要更改比较部分以将字符串与数组进行比较。

      【讨论】:

        猜你喜欢
        • 2015-08-26
        • 2014-09-04
        • 2018-02-22
        • 2018-02-15
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多