所以我经常阅读stackoverflow,它总是帮助我理解,目前,我对匹配任何多个变量感到有些困惑,因此,我想问出口。
我的任务背景。
我是具有多个子域(+4)的AD林的系统管理员,我们正在经历一个将这些域合并为一个域的过程 - 然而,不幸的是,由于每个域都是独立管理的,我们已经遇到了这个年龄段“复制SAM”问题(一旦我们开始挖掘,肯定会遇到欺骗性的UPN)。
因此 - 我正在尝试构建一个脚本来查找这些重复项,以便我可以与支持这些域中用户的团队一起解决这些问题。
我有一个公平的方法,我已经为一个迁移域导出了一个SAM列表,我可以将其解析为PS并让它查找每个SAM对我的所有域名并给我用户名为OR $ null的变量。
所以,我现在只想了解'IF'命令用于匹配多个变量并显示哪些变量匹配。
所以,例如,从这些变量......
$one="MSmith01"
$oneNT="DOMAIN1\MSmith01"
$two="MSmith01"
$twoNT="DOMAIN2\MSmith01"
$three=$null
$threeNT=$null
$four=$null
$fourNT=$null
$five="MSmith01"
$fiveNT="DOMAIN5\MSmith01"
$six=$null
$sixNT=$null
如何编写IF命令以显示多个变量是否匹配?
如果我写这个:
if ($one -match $two -match $three -match $four -match $five -match $six) {write-host "Duplicate Found - $oneNT, $twoNT, $threeNT, $fourNT, $fiveNT, $sixNT." -foregroundcolor "yellow"}
它会告诉我:
Duplicate Found - DOMAIN1\MSmith01, DOMAIN2\MSmith01, , , DOMAIN5\MSmith01,.
但是,如果变量是:
$one=$null
$oneNT=$null
$two="MSmith01"
$twoNT="DOMAIN2\MSmith01"
$three="MSmith01"
$threeNT="DOMAIN3\MSmith01"
$four=$null
$fourNT=$null
$five=$null
$fiveNT=$null
$six=$null
$sixNT=$null
然后结果似乎忽略了DOMAIN 2和DOMAIN3具有匹配SAM的事实,并且看起来“x -match y -match z”实际上实际上只是比较x和y,所以我什么也得不到。 这显然是不正确的。
任何人都可以解释我如何比较和寻找几个变量中的任何重复吗?
由于
进一步阐述: 为了得到我的变量,我正在这样做:
$SAMAccountList=gc "C:\My Documents\Domain2SAMList.txt"
$SamAccountList | % {
$one=Get-QADUser -SamAccountName $_ -IncludedProperties SamAccountName -Server dc.domain1.local | foreach { $_.SAMAccountName }
$oneNT=Get-QADUser -SamAccountName $_ -IncludedProperties NTAccountName -Service dc.domain1.local | foreach { $_.NTAccountName }
$twoSAM=Get-QADUser -SamAccountName $_ -IncludedProperties SamAccountName -Service dc.domain2.local | foreach { $_.SAMAccountName }
$twoNT=Get-QADUser -SamAccountName $_ -IncludedProperties NTAccountName -Service dc.domain2.local | foreach { $_.NTAccountName }
#...
#...
#...etc for each domain
}
然后,这给了我一组变量,如上所述
答案 0 :(得分:1)
我会将它们放入自定义对象中并使用唯一名称进行搜索。
$NAMES = @()
$NAMES += [pscustomobject] @{name=$one;nameNT=$oneNT}
$NAMES += [pscustomobject] @{name=$two;nameNT=$twoNT}
$NAMES += [pscustomobject] @{name=$three;nameNT=$threeNT}
$NAMES += [pscustomobject] @{name=$four;nameNT=$fourNT}
$NAMES += [pscustomobject] @{name=$five;nameNT=$fiveNT}
$NAMES += [pscustomobject] @{name=$six;nameNT=$sixNT}
$UniqueNames=($NAMES | Sort-Object -Property name -Unique).Name
ForEach($Uniquename in $UniqueNames){
if($Uniquename -ne $NULL){
$SEARCH_RESULT=$NAMES|?{$_.Name -eq $Uniquename}
if ( $SEARCH_RESULT.Count -gt 1)
{
$SEARCH_RESULT
}
}
}
我得到以下结果
First data set
name nameNT
---- ------
MSmith01 DOMAIN1\MSmith01
MSmith01 DOMAIN2\MSmith01
MSmith01 DOMAIN5\MSmith01
Second data set
name nameNT
---- ------
MSmith01 DOMAIN2\MSmith01
MSmith01 DOMAIN3\MSmith01