0

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

4

2 回答 2

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"] with $ArrayList.Add($item["Name") | out-null(注意:您必须在 foreach 循环之外定义数组列表)

现在创建一个新脚本。在这个脚本中,您可以将您的脚本添加为一个函数,并将数组列表作为 returnvalue( Return $ArrayList),或者您可以调用您的脚本。

之后调用您的函数/脚本并将返回值存储在变量中,然后使用比较 cmdlet

于 2017-06-23T12:00:13.430 回答
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如果您想知道属性在哪个列表中,我不建议立即进行点索引。

于 2017-06-23T12:26:07.420 回答