{"id":194,"date":"2014-08-13T08:50:41","date_gmt":"2014-08-13T06:50:41","guid":{"rendered":"http:\/\/192.100.1.173\/blog\/?p=194"},"modified":"2014-08-13T08:50:41","modified_gmt":"2014-08-13T06:50:41","slug":"powershell-das-array-problem","status":"publish","type":"post","link":"https:\/\/lukas.kurth.rocks\/blog\/2014\/08\/13\/powershell-das-array-problem\/","title":{"rendered":"Powershell &#8211; Das Array Problem"},"content":{"rendered":"<p>Guten Morgen,<\/p>\n<p style=\"text-align: justify;\">habe gerade wieder etwas n\u00fctzliches erfahren: man kann ein Array in Powershell nicht einfach <a title=\"Windows Pro - Arrays\" href=\"http:\/\/www.windowspro.de\/script\/arrays-powershell-anlegen-aendern-auslesen-sortieren-loeschen\" target=\"_blank\">sich selbst neu zuweisen<\/a>. Wenn man ein Array neu zuweist und darin nur ein Wert vorhanden war, dann wird daraus eine Zeichenkette. Was im \u00dcbrigen ganz leicht zu \u00fcberpr\u00fcfen ist:<\/p>\n<pre toolbar=\"false\" lang=\"ps\">$blacklist -is [System.Array] # [System.Collections.ArrayList] wenn man es so festgelegt hat.<\/pre>\n<p style=\"text-align: justify;\">Eine M\u00f6glichkeit, und diese verwende ich auch selbst, ist daraus ein <a title=\"Jonathan Medd - Powershell Arrays\" href=\"http:\/\/www.jonathanmedd.net\/2014\/01\/adding-and-removing-items-from-a-powershell-array.html\" target=\"_blank\">Collection Array<\/a> zu machen. Dann kann statt einer Neuzuweisung die Methoden Remove und Add verwendet werden:<\/p>\n<pre toolbar=\"false\" lang=\"ps\">[System.Collections.ArrayList]$blacklist = @()\n...\n$test = Test-Connection $computer -Count 1 -Delay 1 -ErrorAction Ignore\nif($test) {\n    Copy-Item -Path $srcDir -Dest $dstDirSrv1\n    $success = Move-Item -Path $srcDir -Dest $dstDirSrv2 -ErrorAction Ignore -PassThru\n    if($success){\n        Write-Host \"$computer \" -F Green -N\n    }else{\n        Write-Host \"$computer \" -F DarkGray -N\n    }\n} else {\n    Write-Host \"$computer \" -F White -B Red -N\n    if(!$blacklist.Contains($computer)){$blacklist.Add($computer) | Out-Null} # Auf die Blacklist\n    $timestamp = (Get-Date)\n    $host.ui.RawUI.WindowTitle = (\"Daten holen ... \/ {0} - {1}s Auszeit: ({2}) {3}\" -f (Get-Date -F \"mm:ss\"),$timeout,$blacklist.Count,($blacklist -join \", \"))\n}<\/pre>\n<p style=\"text-align: justify;\">In einem automatischen Script sollte man dahinter noch ein Out-Null schreiben, damit die Ausgabe nicht den Key im Array zur\u00fcckgibt. Wenn dies so gel\u00f6st wurde klappt auch die Ausgabe des Array in einer Zeile durch:<\/p>\n<pre toolbar=\"false\" lang=\"ps\">$blacklist -join ' ';<\/pre>\n<p>Mit einem String funktionierte das nicht so recht \ud83d\ude09<\/p>\n<p style=\"text-align: justify;\">PS.: F\u00fcr diejenigen die es nicht wissen: Eine ForEach-Schleife kann man auch mit % einleiten. Ein Beispiel:<\/p>\n<pre class=\"\" toolbar=\"false\" lang=\"ps\">$strComputers | % {\n    $computer = $_\n    Write-Host $computer\n    ...\n}\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Guten Morgen, habe gerade wieder etwas n\u00fctzliches erfahren: man kann ein Array in Powershell nicht einfach sich selbst neu zuweisen. Wenn man ein Array neu zuweist und darin nur ein Wert vorhanden war, dann wird daraus eine Zeichenkette. Was im \u00dcbrigen ganz leicht zu \u00fcberpr\u00fcfen ist: $blacklist -is [System.Array] # [System.Collections.ArrayList] wenn man es so [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-194","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/posts\/194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/comments?post=194"}],"version-history":[{"count":0,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/posts\/194\/revisions"}],"wp:attachment":[{"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/media?parent=194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/categories?post=194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lukas.kurth.rocks\/blog\/wp-json\/wp\/v2\/tags?post=194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}