当前位置: 首页 > 知识库问答 >
问题:

将PSCustomObject与对象进行比较

于鹏
2023-03-14

我创建了一个PsCustomObject,当调用变量为ISE时,它会读取相关数据的表。但是,如果我尝试将PsCustomObject与另一个对象进行比较,PsCustomObject无法正确读取。我想告诉脚本,如果现有CSV中的任何行与PSCustomObject匹配,则不会将数据导出到CSV,换句话说,跳过CSV文件中的重复行。CSV可能有也可能没有多行。

$fileInfo = @(
                        [pscustomobject]@{
                            user_id = $user
                            studio = $studio
                            function = $Task
                            end_time_local = $creationTime
                            asin = $ASIN
                            variant = $variant
                            process_class_id = $processClass
                            }
                           )
$currentData = Import-Csv "$scansFolder\$fileName.csv"
if($fileInfo -ne $currentData){
$fileInfo | Export-Csv "$scansFolder\$fileName.csv" -Append -NoTypeInformation -Force
}

共有1个答案

通寂离
2023-03-14

[pscustomject]是一个。NET引用类型,因此将两个实例[1]-eq进行比较将测试引用相等性(标识),即如果两个实例是一个相同的对象[2]-在您的场景中显然不是这种情况。

假设您的自定义对象的属性是值类型或字符串的实例(看起来是这样),您可以使用Compare-Object按对象的属性值比较对象,并能够比较两个集合:

$fileInfo = @(
  [pscustomobject]@{
      user_id = $user
      studio = $studio
      function = $Task
      end_time_local = $creationTime
      asin = $ASIN
      variant = $variant
      process_class_id = $processClass
      }
)

# Get the property names.
# This assumes that the CSV data has (at least) the same
# set of properties (columns).
$propNames = $fileInfo[0].psobject.properties.Name

$currentData = Import-Csv "$scansFolder\$fileName.csv"

# Compare the $fileInfo custom object(s) to the custom objects read
# from the CSV file and only export those that are unique to the RHS ('=>')
# back to the file, i.e., those that don't match $fileInfo.
Compare-Object -Property $propNames $fileInfo $currentData |
  Where-Object SideIndicator -eq '=>' | Select-Object InputObject | 
    Export-Csv "$scansFolder\$fileName.csv" -Append -NoTypeInformation -Force

导入Csv,输出pscustomobject实例

参见等式比较帮助主题(为C编写,但类似于PowerShell的eq操作符)

 类似资料:
  • 我有一个类赋值,我需要将一个目标排序到一个二叉树节点中,给定一个根,我需要将它与根进行比较,如果目标小于根的值,则将目标作为左子,或者如果目标大于根的值,则将目标作为右子。 我必须使用给定的方法头和参数,我的代码是这样编写的: 返回以下错误: java:109:错误:二进制运算符“<”的操作数类型不正确 我还尝试了compareTo方法,通过尝试类似于 返回以下错误: binarySearchTr

  • 问题内容: 当我测试此代码时: 我期待一个真实,真实,真实,错误。因为这: 在java.sql.Timestamp的javadoc中,它指出: 注意:此类型是java.util.Date和单独的纳秒值的组合。仅整数秒存储在java.util.Date组件中。小数秒-纳米- 是分开的。传递值java.util.Date类型的值时,Timestamp.equals(Object)方法从不返回true,

  • 我刚刚违反了PMD中的CompareObject和Quals规则,因为我用“==”而不是equals()比较了两个对象引用,但我很难理解为什么这是一个问题,也找不到任何理由来解释这个限制。 我很欣赏这个东西。equals()比较引用,因此具有相同的效果,但我没有使用原始对象,因此我不能保证该方法不会在层次结构中的某个位置被重写。 我想做一个参考比较,我想确保这总是一个参考比较。为什么PMD要强迫我

  • 请原谅我在这里缺乏理解,因为我已经进入了三天的冬眠期。 我正在尝试在一个实体上添加验证,这需要将它们与另一个实体进行比较。 例如,以一个人为例。一个人可以有许多身体部位,但最多有两个手臂类型的身体部位(变异除外)。为了验证这一点,在插入新的车身部件时,我需要将其与给定人员的其他车身部件进行比较,并验证该类型的最大值是否已经达到。 我一直在研究Hibernate提供的约束/验证内容,但似乎没有一个涵

  • 问题内容: 我想比较两个字符串在Java中的相等性(如果一个或两个都可以),因此我不能简单地调用。什么是最好的方法? 编辑: 问题答案: 这是Java内部代码(在其他方法上)使用的:

  • 我想通过提供自定义顺序对包含不相关对象的列表进行排序。例如,我要排序的列表包含Animal类的对象。动物对象有一个名为type的对象,可以是猫、老鼠或狗。我有一个自定义订单鼠标 一种解决方案是手动检查类型的类(通过 instanceof)并在比较器中对顺序进行硬编码。但是,我有太多可以包含在 Animal 中的类(在本例中不仅包含三个类),因此这将产生大量的 if 案例。