2017-06-23 4 views
0

Ich habe zwei PS-Skripts, liest man aus einer Liste von Computern auf Sharepoint und gibt die Ergebnisse und die anderen Ausgaben eine Liste von Computern aus Active Directory.Vergleichen Sie die Ausgaben von zwei Powershell-Skripte für AD-Computer

Was ich tun muß, ist irgendwie diese beiden Listen vergleichen, um zu sehen: a) Wenn die Liste A Computer nicht aufgelistet auf Liste B und b hat) Wenn Liste B Computer nicht aufgeführt auf Liste A

Ich gehe davon aus, dass dies mit dem Compare-Object-Cmdlet und der Verwendung von Arrays möglich ist, aber ich kenne mich mit PS nicht sehr gut aus und bin mir nicht sicher, wohin ich von hier aus gehen soll.

Um die Liste der Computer von AD bekomme ich verwenden:

Import-Module ActiveDirectory 
 

 
$DCServer = "DC1.global" 
 
$Searchbase = "OU=World,DC=global" 
 

 
$list = Get-ADComputer -Server $DCServer -searchbase $Searchbase -Filter * -Property * 
 

 
foreach($item in $list) \t { 
 
    write-host $item["Name"] 
 
} 
 

 
$Count = (Get-ADComputer -Server $DCServer -searchbase $Searchbase -Filter * -Property *).count 
 
write-host "Total computers ="$count

Um die Liste der Computer von Sharepoint bekommen ich benutze:

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"] 
 
}

Antwort

1

Sie suchen so etwas?

$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 Ausgang:

PC-40 
PC-55 
PC-70 
PC-4 
PC-5 
PC-7 

Sie haben Ihr Skript zu bearbeiten. Anstatt die Kunden an den Host zu schreiben, erstellen Sie ein Array

ersetzen: write-host $item["Name"] mit $ArrayList.Add($item["Name") | out-null (Hinweis: Sie haben die Array-Liste aus der foreach-Schleife definieren)

nun ein neues Skript erstellen. In diesem Skript können Sie Ihre Skripte als Funktion mit der Arraylist als Rückgabewert hinzufügen (Return $ArrayList) oder Sie können Ihr Skript aufrufen.

Danach Ihre Funktion/script aufrufen und den Rückgabewert in einer Variablen speichern und dann das Cmdlet vergleichen verwenden

+0

, der ziemlich genau das, was ich bin nach, außer ich möchte nicht alle Computer manuell in das Array eingeben, ich brauche sie aus den Ergebnissen der zwei verschiedenen PS-Skripte - eines für die SharePoint-Liste und eines aus Active Directory ... Macht das Sinn? Ich bin mir nicht sicher, wie diese Ergebnisse in das Array gelangen. – notw86

0

Ihre beiden Variablen sind $list, und sie sind in verschiedenen Schriften. Für den Anfang müssen Sie verschiedene Variablen verwenden.

PowerShell ist gut im Umgang mit Objekten, ohne dass Sie explizit Arrays/Listen erstellen müssen.

Versuchen:.

$adList = Get-ADComputer -Server $DCServer -searchbase $Searchbase -Filter * -Property * 
$spList = get-pnplistitem -list "HIVE_Devices" 

$diff = Compare-Object $adList.Name $spList.Title 

Ich würde nicht Punkt Indizierung in .InputObject sofort empfehlen, wenn Sie sagen mögen, welcher Liste der Eigenschaften sind in