我是PowerShell世界的新手,我在PowerShell上有一些关于库存调节的项目。
我不知道如何继续这个,我尝试了一些基本步骤,我可以导出
用户/群组/群组成员资格。
以下是要求:
AD查询:
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用户 AD中不存在Oracle用户
示例数据
AD_users.csv
u388848993
K847447388
u994888484
Oracle_users.csv
k095848889
u388848993
我可以查询oracle数据库,AD查询也很好,唯一值得关注的是我无法比较输出。
答案 0 :(得分:4)
我在我写的脚本中做了类似的事情:
[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仅包含AD中的数字 和$ 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变量输出到文件中。
毫无疑问,有一种更好的方法可以做到这一点,但这对我来说对某种类型的文件很有用。