Benutzer mit den meisten Antworten
In einer Foreach-Schlaufe den Wert(Value) einer Hashtabelle erhöhen.

Frage
-
Hallo zusammen.
Ich schreibe gerade ein Script welches mir die Anzahl aller iPhone's mit einer gewissen Version des iOS angibt.
Im Hashtable habe ich vorgegebene Versionen des iOS, zum Beispiel: "iOS 6.1.3*".
Alle Handy's die das Script findet speichere ich in einer Variable ab und vergleiche sie mit der Hashtable und die Versionen, die noch nicht vorhanden sind werden hinzugefügt.Das alles läuft in einem Foreach ab und jetzt such ich noch einen Weg wie ich eine Variable mit allen Versionen des OS der Handys mit der Hashtable vergleichen kann und für jede Übereinstimmung bei der betreffenden den Wert um 1 erhöhen kann.
Hier noch das Skript:
$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://srv00832/powershell -Authentication Kerberos Import-PSSession $s -EA SilentlyContinue $Zaehler = 0 $iPhoneiOS = 0 $AppleGeraete = 0 $iPhoneHashiOS = @{"iOS 6.0*" = 0; "iOS 6.1 *" = 0; "iOS 6.1.1 *" = 0; "iOS 6.1.2 *" = 0; "iOS 6.1.3 *" = 0; "iOS 7.0 *" = 0; "iOS 7.0.2 *" = 0; "iOS 7.0.3 *" = 0; "iOS 7.0.4 *" = 0; "iOS 7.1 *" = 0} [Array]$ADUser = Get-CASMailbox -ResultSize 20 | Where {$_.HasActiveSyncDevicePartnership -eq $TRUE} foreach ($User in $ADUser) { $Zaehler++ $AcSyDeStatisticList = Get-ActiveSyncDeviceStatistics -Mailbox $($User.SamAccountName) foreach ($AcSyDeStatistic in $AcSyDeStatisticList) { $LastSyncTime = $($AcSyDeStatistic.LastSuccessSync) If ($LastSyncTime -ne $null) { $LastSyncDiff = $LastSyncTime - $(Get-Date) If ($LastSyncDiff -gt $Zeitraum) { $iPhoneHashiOS | foreach-object {if($AcSyDeStatistic.DeviceOS -ne $iPhoneHashiOS){$iPhoneHashiOS.Add($AcSyDeStatistic.DeviceOS, 1)} $iPhoneHashiOS = $iPhoneHashiOS | select -Unique if (($($AcSyDeStatistic.DeviceOS) -eq $null) -and ($($AcSyDeStatistic.DeviceUserAgent) -like "Apple*")){$iPhoneiOS++} if ($($AcSyDeStatistic.DeviceUserAgent) -like "Apple*"){$AppleGeraete++} } } } }
Falls mir jemand helfen könnte wäre ich sehr froh darüber.
Gruss Dominique
Dominique Hofmann
Antworten
-
Meinst du das so:
$iPhoneHashiOS = @{"iOS 6.0*" = 0; "iOS 6.1 *" = 0; "iOS 6.1.1 *" = 0; "iOS 6.1.2 *" = 0; "iOS 6.1.3 *" = 0; "iOS 7.0 *" = 0; "iOS 7.0.2 *" = 0; "iOS 7.0.3 *" = 0; "iOS 7.0.4 *" = 0; "iOS 7.1 *" = 0} $mystring ="iOS 6.0" Foreach ($key in $iPhoneHashiOS.Keys) { if ( $mystring -like $key ) { $iPhoneHashiOS[$key] += 1 break
} } write-output $iPhoneHashiOS
Hashtables zur durchforsten ist (beim ersten mal) tricky, weil man nicht intuitiv auf die Lösung kommt. Beim Ausgeben werden die Einträge unter "Name" und "Value" in der Tabelle aufgeführt. Mit "$myhash.Names" z.b., was logisch wäre, kommt man aber nicht weit. $myhash.Keys lautet die Liste aller Namen der Hashtable-Einträge durch die man iterieren kann.Die Frage ist aber noch, welches Format deine Strings zum Vergleichen genau haben. Warscheinlich ist ein REGEX-Vergleich sinnvoller als meine Lösung oben, da du hierbei manchmal mehrere Treffer haben wirst.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Powershell Codesnippet Manager: Link
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Mittwoch, 26. März 2014 15:31
- Als Antwort markiert coolmanii Montag, 31. März 2014 07:19
-
PowerShell ist eine Dynamische Sprache.
Deshalb kannst du Ganz einfach neuen Member zu einer Hashtable hinzufügen.
Aus diesem Grund ist deine Zeile mit der Hashtable Initialisierung völlig unnötig!Eine Hashtable
# Leere Hashtable definieren $iPhoneHashiOS = @{} # Alle Key-Namen zu der Hashtable Dynamisch zufügen # Zur Demonstration habe ich absichtlich einige Keys doppelt in dem Array! ForEach($KeyName in @("iOS 6.0*","iOS 6.1*","iOS 6.1.1*","iOS 6.0*","iOS 6.1*","iOS 6.1.1*","iOS 6.1.2*","iOS 6.1.3*","iOS 7.0*","iOS 7.0.2*","iOS 7.0.3*","iOS 7.0.4*","iOS 7.1*")) { # der Kenyame wird der hashtable zugefügt wenn er noch nicht existiert # doppelte Keys sind unmöglich! # Der Value des Keys wird mit 0 Initialisiert $iPhoneHashiOS.$KeyName = 0 } # gefüllte Hashtable anzeigen (Key und Value) $iPhoneHashiOS
Die Keys in einer Hashtable sind IMMER eindeutig! Deshalb ist folgende Zeile überflüssig:
$iPhoneHashiOS = $iPhoneHashiOS | select -Unique
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Als Antwort markiert coolmanii Montag, 31. März 2014 10:46
-
Ist kein Problem! Du kannst beide Techniken kombinieren!
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Als Antwort markiert coolmanii Montag, 31. März 2014 10:46
Alle Antworten
-
Meinst du das so:
$iPhoneHashiOS = @{"iOS 6.0*" = 0; "iOS 6.1 *" = 0; "iOS 6.1.1 *" = 0; "iOS 6.1.2 *" = 0; "iOS 6.1.3 *" = 0; "iOS 7.0 *" = 0; "iOS 7.0.2 *" = 0; "iOS 7.0.3 *" = 0; "iOS 7.0.4 *" = 0; "iOS 7.1 *" = 0} $mystring ="iOS 6.0" Foreach ($key in $iPhoneHashiOS.Keys) { if ( $mystring -like $key ) { $iPhoneHashiOS[$key] += 1 break
} } write-output $iPhoneHashiOS
Hashtables zur durchforsten ist (beim ersten mal) tricky, weil man nicht intuitiv auf die Lösung kommt. Beim Ausgeben werden die Einträge unter "Name" und "Value" in der Tabelle aufgeführt. Mit "$myhash.Names" z.b., was logisch wäre, kommt man aber nicht weit. $myhash.Keys lautet die Liste aller Namen der Hashtable-Einträge durch die man iterieren kann.Die Frage ist aber noch, welches Format deine Strings zum Vergleichen genau haben. Warscheinlich ist ein REGEX-Vergleich sinnvoller als meine Lösung oben, da du hierbei manchmal mehrere Treffer haben wirst.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Powershell Codesnippet Manager: Link
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Mittwoch, 26. März 2014 15:31
- Als Antwort markiert coolmanii Montag, 31. März 2014 07:19
-
Vielen Dank für die rasche und hilfreiche Antwort.
Jetzt habe ich aber noch eine kleine Frage:
Ich habe ja oben im Hashtable vordefinierte iOS-Versionen und wenn jetzt eine Version kommt die neuer ist als die in der Liste, möchte ich gerne, dass diese Version zusätzlich im Hashtable noch hinzugefügt wird.Ist das möglich zu realisieren ?
Gruss Dominique
Dominique Hofmann
-
PowerShell ist eine Dynamische Sprache.
Deshalb kannst du Ganz einfach neuen Member zu einer Hashtable hinzufügen.
Aus diesem Grund ist deine Zeile mit der Hashtable Initialisierung völlig unnötig!Eine Hashtable
# Leere Hashtable definieren $iPhoneHashiOS = @{} # Alle Key-Namen zu der Hashtable Dynamisch zufügen # Zur Demonstration habe ich absichtlich einige Keys doppelt in dem Array! ForEach($KeyName in @("iOS 6.0*","iOS 6.1*","iOS 6.1.1*","iOS 6.0*","iOS 6.1*","iOS 6.1.1*","iOS 6.1.2*","iOS 6.1.3*","iOS 7.0*","iOS 7.0.2*","iOS 7.0.3*","iOS 7.0.4*","iOS 7.1*")) { # der Kenyame wird der hashtable zugefügt wenn er noch nicht existiert # doppelte Keys sind unmöglich! # Der Value des Keys wird mit 0 Initialisiert $iPhoneHashiOS.$KeyName = 0 } # gefüllte Hashtable anzeigen (Key und Value) $iPhoneHashiOS
Die Keys in einer Hashtable sind IMMER eindeutig! Deshalb ist folgende Zeile überflüssig:
$iPhoneHashiOS = $iPhoneHashiOS | select -Unique
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Als Antwort markiert coolmanii Montag, 31. März 2014 10:46
-
Das Problem ist, dass ich bei meinem Script eine Liste von iOS Versionen bekomme und wenn eine Version nicht in der Liste ist, das diese Version automatisch der Liste hinzugefügt wird und ich so keine Version manuell hinzufügen muss....
Dominique Hofmann
-
Ist kein Problem! Du kannst beide Techniken kombinieren!
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Als Antwort markiert coolmanii Montag, 31. März 2014 10:46