Zum Inhalt wechseln


Foto

Get-ADComputer und ForEach


  • Bitte melde dich an um zu Antworten
3 Antworten in diesem Thema

#1 marcx2

marcx2

    Junior Member

  • 123 Beiträge

 

Geschrieben 10. November 2017 - 12:39

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, 10. November 2017 - 12:40.

Done: 70-640, 70-642

Next: schauen wir mal :)

#2 BOfH_666

BOfH_666

    Junior Member

  • 145 Beiträge

 

Geschrieben 10. November 2017 - 13:50

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, 10. November 2017 - 14:12.

live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#3 marcx2

marcx2

    Junior Member

  • 123 Beiträge

 

Geschrieben 10. November 2017 - 14:38

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? :)


Done: 70-640, 70-642

Next: schauen wir mal :)

#4 BOfH_666

BOfH_666

    Junior Member

  • 145 Beiträge

 

Geschrieben 10. November 2017 - 14:43   Lösung

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, 10. November 2017 - 14:43.

  • marcx2 gefällt das

live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''