首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell将PSCustomObjects与相同数据进行比较--意外结果

PowerShell将PSCustomObjects与相同数据进行比较--意外结果
EN

Stack Overflow用户
提问于 2022-11-09 21:43:44
回答 1查看 35关注 0票数 0

我已经填写了两个结果,我想比较一下。一个结果来自Server查询,另一个来自使用dbatools模块的PowerShell。结果显示相同,但比较不返回true。一些示例设置代码可能会更好地解释这一点:

代码语言:javascript
复制
-- Sql Server
use tempdb;
create table dbo.Jobs (
    JobName varchar(16)
);
insert dbo.Jobs values ('test');

exec msdb.dbo.sp_add_job @job_name = 'test'


## PowerShell
$exp = Invoke-DbaQuery -SqlInstance $env:computername -Database tempdb -Query "select JobName from dbo.Jobs" | Select-Object -Property JobName -First 1
$rec = Find-DbaAgentJob -SqlInstance $env:computername -JobName test | Select-Object -Property JobName -First 1

$exp # one row
$rec # one row, same value, same header
$exp -eq $rec ## False, expected true
$exp.GetType() # PSCustomObject
$rec.GetType() # PSCustomObject
$exp[0] # one row
$rec[0] # one row, same value, same header
$exp[0] -eq $rec[0] # False, expected true
$exp[0].JobName # one row
$rec[0].JobName # one row, same value
$exp[0].JobName -eq $rec[0].JobName # True (Finally!)

$rec | Where-Object { $_.AgentJobName -notin $exp } # returns the value in $rec, should return nothing
$rec | Where-Object { $_.AgentJobName -in $exp } # returns nothing, should return the value in $rec

我正在使用PowerShell 5.1。我认为两个PowerShell变量应该通过仅仅传递变量来进行比较。最终,我的目标是使用更复杂的查询,按照上面的示例,我想比较多个作业和多个属性,而不必迭代所有的值。最初,我有一个对象数组,我使用的是比较对象,但是结果是不正确的,我相信这可以归结为这个简化的例子。

由于无法安装PowerBI,所以不能使用dbachecks,因此需要以这种方式存储结果,以供另一个报告工具使用。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2022-11-10 06:55:00

Join-Object script/Join-Object Module (另请参阅:In Powershell, what's the best way to join two tables into one?)能够同时对所有属性(*)执行OuterJoin (所有不相等的内容):

代码语言:javascript
复制
$exp |OuterJoin $rec -On *
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74381723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档