我已经填写了两个结果,我想比较一下。一个结果来自Server查询,另一个来自使用dbatools模块的PowerShell。结果显示相同,但比较不返回true。一些示例设置代码可能会更好地解释这一点:
-- 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,因此需要以这种方式存储结果,以供另一个报告工具使用。任何帮助都是非常感谢的。
发布于 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 (所有不相等的内容):
$exp |OuterJoin $rec -On *https://stackoverflow.com/questions/74381723
复制相似问题