比较AD计算机的两个PowerShell脚本的输出

时间:2017-06-23 11:43:55

标签: powershell sharepoint active-directory compareobject

我有两个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"]
}

2 个答案:

答案 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