Jump to content
Melde dich an, um diesen Inhalt zu abonnieren  
marcx2

Get-ADComputer und ForEach

Empfohlene Beiträge

Servus, ich habe da ein kleines Verständnis Problem.

Ich wähle eine OU aus (GUI) und übergebe die an mein Script.

Die Variable $OU bzw. $OU.DistinguishedName liefert mir die OU. Nun möchte ich jeden PC Namen der OU über den SCCM abfragen und mir die MAC Adresse ausgeben lassen. (Später wird das in mein Wake On Lan Script integriert!)

Die SCCM Abfrage funktioniert! Ich bekomme die MAC zurück wenn ich einen PC Namen manuell mitgebe.

 Allerdings funktioniert die Schleife nicht. 

$OU = Choose-ADOrganizationalUnit
(Get-ADComputer -Filter * -SearchBase $Ou.DistinguishedName).Name | ForEach { 
$ComputerName = $_.Name 
$MACADRESS = (Gwmi -Name Root\SMS\Site_XXX -cl SMS_R_System -Comp XXXXXXXX | where {$_.Name -eq "$ComputerName"}).MACAddresses 
Write-Host $MACADRESS
} 

Wäre wirklich toll wenn hier jemand noch eine Idee hätte.

Viele Grüße

bearbeitet von marcx2

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Ich glaub das geht einfacher:

$OU = Choose-ADOrganizationalUnit
$SCCMSource = Get-CimInstance -Namespace Root\SMS\Site_XXX -ClassName SMS_R_System -ComputerName XXXXXXX | Select-Object -Property Name,MacAddresses
$ADSource = Get-ADComputer -Filter * -SearchBase $Ou.DistinguishedName | Select-Object -Property Name
Compare-Object -ReferenceObject $SCCMSource -DifferenceObject $ADSource -Property Name -PassThru -IncludeEqual -ExcludeDifferent

bearbeitet von BOfH_666

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Wow, ich danke dir vielmals. So geht es natürlich auch! 

Ich habe es jetzt folgendermaßen gelöst:

 

Schritt 1: Ich will ja nur die MAC:

$MACADDRESS = (Compare-Object -ReferenceObject $SCCMSource -DifferenceObject $ADSource -Property Name -PassThru -IncludeEqual -ExcludeDifferent).MacAddresses

Schritt 2:

ForEach ($ADSource in $MACADDRESS) {
 
$s = New-PSSession –ComputerName blabla
Invoke-command -session $s -Scriptblock {import-module C:\PSScripts\Send-WOL.ps1}
Invoke-Command -Session $s -ArgumentList $MACADDRESS -Scriptblock {param($MACADDRESS);Send-WOL -mac $MACADDRESS -ip 192.168.xxx.xxx}
$s | Remove-PSSession
}

Falls sich jemand fragt was das soll. Ich kann über Standort grenzen hinweg keine WOL Broadcasts versenden. Deshalb such ich mir den jeweiligen Standortserver raus, öffne eine Remoteshell auf diesem und lasse auch von diesem den WOL Boroadcast schicken!

 

Nochmals vielen Dank für den Denkanstoss @BOfH_666

 

 

Schönes WE


Kleine Frage noch, wie kann ich mir von dem Ergebnis diese Abfrage

Compare-Object -ReferenceObject $SCCMSource -DifferenceObject $ADSource -Property Name -PassThru -IncludeEqual -ExcludeDifferent 

und ich 2 Werte wie den Namen und die Mac zurück bekomme für beide Werte eine Variable anlegen? Muss ich das 2 mal ausführen?

also so?

$MAC = (Compare-Object -ReferenceObject $SCCMSource -DifferenceObject $ADSource -Property Name -PassThru -IncludeEqual -ExcludeDifferent).MacAddresses
$NAME = (Compare-Object -ReferenceObject $SCCMSource -DifferenceObject $ADSource -Property Name -PassThru -IncludeEqual -ExcludeDifferent).Name

oder geht das einfacher? :)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Wenn Du das Ergebnis einer Variable zuweist, z.B. $Result, dann kannst Du mittels Subexpressions auf die einzelenen Properties zugreifen - also $Result.Name oder $Result.MacAddresses

bearbeitet von BOfH_666
  • Like 1

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesen Inhalt zu abonnieren  

×