Powershell 比较两个csv文件并找出差异
我是powershell世界的新手,我在powershell上得到了一些用于核对库存的项目 我不知道如何进行这一点,我尝试了一些基本步骤,我能够出口 用户/组/组成员资格 以下是要求:Powershell 比较两个csv文件并找出差异,powershell,Powershell,我是powershell世界的新手,我在powershell上得到了一些用于核对库存的项目 我不知道如何进行这一点,我尝试了一些基本步骤,我能够出口 用户/组/组成员资格 以下是要求: 现在我所取得的成就——感谢Govnah 广告查询: Get-QADUser -searchRoot $OuDomain -SizeLimit 0 | Select-Object dn, sAMAccountName, @{Name="Groups";Expression={(Get-QADMemberOf $
- 现在我所取得的成就——感谢Govnah
Get-QADUser -searchRoot $OuDomain -SizeLimit 0 |
Select-Object dn, sAMAccountName, @{Name="Groups";Expression={(Get-QADMemberOf $_ | Select-Object -expandProperty Name) -join ";"}} |
Sort-Object SamAccountName |
export-csv $FilePath
我现在有两个csv文件,如AD_users.csv
和Oracle_users.csv
我想比较这两个文件并重定向差异,如
Oracle中不存在广告用户
AD中不存在Oracle用户
样本数据
AD_users.csv
u388848993
K847447388
u994888484
k095848889
u388848993
Oracle_users.csv
u388848993
K847447388
u994888484
k095848889
u388848993
我可以查询oracle数据库,AD查询也很好。唯一的问题是我无法比较输出。我在一个脚本中这样做:
[System.Collections.ArrayList]$adlist = Get-Content c:\users\sverker\desktop\ad.csv |Sort-Object
[System.Collections.ArrayList]$oraclelist = Get-Content c:\users\sverker\desktop\oracle.csv |Sort-Object
$Matching_numbers = @()
ForEach ($number in $adlist)
{
if ($oraclelist.Contains($number))
{
$Matching_numbers += $number
}
}
ForEach ($number in $Matching_numbers)
{
$adlist.Remove($number)
$oraclelist.Remove($number)
}
现在$Matching_numbers包含匹配的数字
而$adlist只包含来自广告的数字
和$oraclelist仅列出Oracle提供的数字
然后可以循环浏览列表并显示值:
Write-Host "Matches:"
ForEach ($value in $Matching_numbers)
{
$Message += $value + [Environment]::NewLine
}
Write-Host $Message
Write-Host "AD only:"
ForEach ($value in $adlist)
{
$MessageAd += $value + [Environment]::NewLine
}
Write-Host $MessageAd
Write-Host "Oracle only:"
ForEach ($value in $oraclelist)
{
$MessageOracle += $value + [Environment]::NewLine
}
Write-Host $MessageOracle
或者仅仅通过写作
$Matching_numbers
将列表输出到控制台
您可以将$Message变量输出到一个文件中
毫无疑问,有一种更好的方法可以做到这一点,但对于某种类型的文件,这对我来说是有效的。我在一个脚本中这样做:
[System.Collections.ArrayList]$adlist = Get-Content c:\users\sverker\desktop\ad.csv |Sort-Object
[System.Collections.ArrayList]$oraclelist = Get-Content c:\users\sverker\desktop\oracle.csv |Sort-Object
$Matching_numbers = @()
ForEach ($number in $adlist)
{
if ($oraclelist.Contains($number))
{
$Matching_numbers += $number
}
}
ForEach ($number in $Matching_numbers)
{
$adlist.Remove($number)
$oraclelist.Remove($number)
}
现在$Matching_numbers包含匹配的数字
而$adlist只包含来自广告的数字
和$oraclelist仅列出Oracle提供的数字
然后可以循环浏览列表并显示值:
Write-Host "Matches:"
ForEach ($value in $Matching_numbers)
{
$Message += $value + [Environment]::NewLine
}
Write-Host $Message
Write-Host "AD only:"
ForEach ($value in $adlist)
{
$MessageAd += $value + [Environment]::NewLine
}
Write-Host $MessageAd
Write-Host "Oracle only:"
ForEach ($value in $oraclelist)
{
$MessageOracle += $value + [Environment]::NewLine
}
Write-Host $MessageOracle
或者仅仅通过写作
$Matching_numbers
将列表输出到控制台
您可以将$Message变量输出到一个文件中
毫无疑问,有一种更好的方法可以做到这一点,但对于某种类型的文件,这对我来说很有效。让我们看看您的CSV文件数据。用这两个例子更新你的问题。用示例文本替换敏感信息。csv文件中只有这些列吗?顶部不也应该有列名吗?正如@user978511所指出的,看起来您缺少标题
dn、sAMAcountName、组
和相关数据示例文本。让我们看看您的CSV文件数据可能重复。用这两个例子更新你的问题。用示例文本替换敏感信息。csv文件中只有这些列吗?顶部不应该也有列名吗?正如@user978511所指出的,看起来您缺少标题dn、sAMAcountName、Groups
和相关的数据示例文本。可能是重复的,为什么我没有想到呢。我想我还不明白Powershell有.Net的功能:)我会更新答案的,很明显,既然你提到了:)那么你应该只在输出中写入$oraclelist和$adlist,也许可以使用$oraclelist | Out文件C:\oracleonly.txt
不,这花了很多时间,仍然重定向到匹配用户id,包含在两个文件中的用户id。没有区别嗨,你能帮我找出区别吗,我只得到了匹配的记录是的,为什么我没有想到这一点。我想我还不明白Powershell有.Net的功能:)我会更新答案的,很明显,既然你提到了:)那么你应该只在输出中写入$oraclelist和$adlist,也许可以使用$oraclelist | Out文件C:\oracleonly.txt
不,这花了很多时间,仍然重定向到匹配用户id,包含在两个文件中的用户id。没有差别嗨,你能帮我找出差别吗?我只得到了一份匹配的记录