我有两个PS脚本,一个从Sharepoint上的计算机列表中读取并输出结果,另一个输出Active Directory中的计算机列表。
我需要做的是以某种方式比较这两个列表,看看: a)如果列表A的列表B中没有列出计算机 和 b)如果列表B的计算机未在列表A中列出
我假设使用Compare-Object cmdlet和使用数组可以实现这一点,但我对PS并不太熟悉,也不确定从何处开始。
要从AD获取计算机列表,请使用:
Import-Module ActiveDirectory
$DCServer = "DC1.global"
$Searchbase = "OU=World,DC=global"
$list = Get-ADComputer -Server $DCServer -searchbase $Searchbase -Filter * -Property *
foreach($item in $list) {
write-host $item["Name"]
}
$Count = (Get-ADComputer -Server $DCServer -searchbase $Searchbase -Filter * -Property *).count
write-host "Total computers ="$count
要从Sharepoint获取计算机列表,我使用:
Import-Module -DisableNameChecking "C:\Program Files (x86)\SharePointPnPPowerShellOnline\Modules\SharePointPnPPowerShellOnline"
$cred = Get_credential
connect-pnponline "https://domain.sharepoint.com/sites/Team" -credential $cred
$list = get-pnplistitem -list "HIVE_Devices"
foreach($item in $list)
{
write-host $item["Title"]
}
答案 0 :(得分:1)
你搜索那样的东西?
$ListA = "PC-1","PC-2","PC-3","PC-4","PC-5","PC-6","PC-7","PC-8","PC-9","PC-10","PC-11"
$ListB = "PC-1","PC-2","PC-3","PC-40","PC-55","PC-6","PC-70","PC-8","PC-9","PC-10","PC-11"
$ListDiffrent = @(Compare-Object -ReferenceObject $ListA -DifferenceObject $ListB).InputObject
ListDiffrent输出:
PC-40
PC-55
PC-70
PC-4
PC-5
PC-7
您必须编辑脚本。而不是将客户端写入主机,创建一个数组
替换:write-host $item["Name"]
使用$ArrayList.Add($item["Name") | out-null
(注意:您必须在foreach循环中定义数组列表)
现在创建一个新脚本。在此脚本中,您可以将脚本作为函数添加为arraylist作为returnvalue(Return $ArrayList
),或者您可以调用脚本。
之后调用函数/脚本并将returnvalue存储在变量中,然后使用compare cmdlet
答案 1 :(得分:0)
您的两个变量都是$list
,它们位于不同的脚本中。首先,您需要使用不同的变量。
PowerShell擅长处理对象而无需显式创建数组/列表。
尝试:
$adList = Get-ADComputer -Server $DCServer -searchbase $Searchbase -Filter * -Property *
$spList = get-pnplistitem -list "HIVE_Devices"
$diff = Compare-Object $adList.Name $spList.Title
如果您想告诉属性所在的列表,我建议不要立即将点索引到.InputObject
。