none
stop-computer RRS feed

  • Frage

  • Hallo zusammen,

    ich habe mir folgendes kleines Script geschrieben:

    clear-host

    $serverliste = get-content "\\servername\home$\TMustermann\Administration\Scripts\Powershell-Skripte\Computer.TXT"

    restart-Computer

    -ComputerName $serverliste -Force

    Leider bekomme ich immer folgenden Fehler ausgegeben:

    Restart-Computer: Das Argument für den Parameter "ComputerName" kann nciht überprüft werden. Das Argument ist Null oder Leer. Geben Sie ein Argument an, das nicht Null oder Leer ist.

    Wenn ich die Variable $Serverliste ausgeben lasse, gibt sie mir den richtigen Rechnername aus der Liste aus. Wäre toll wenn mir jemand helfen könnte. Bin noch nicht so wriklich fit mit Powershell (aber hoffebtlich bald :-))

    LG, Karsten

    Montag, 3. Januar 2011 15:25

Antworten

  • Hallo Karsten

    System.Array heißt, dass es die txt Datei mehr als eine Zeile enthält und das würde das Verhalten erklären.

    Es gibt 2 Möglichkeiten:

    1. Stelle sicher, dass der Computername in der ersten Zeile der TXT Datei eingetragen ist und keine weiteren (leere) Zeilen vorhanden sind. Überprüffe anschließend, dass $serverliste.GetType() String anstatt Object[] anzeigt. Dann sollte eine direkte Übergabe per ComputerName passen.
    2. Du nutzt weiterhin einen Array (also mehrere Computernamen in der selben Datei). Dazu musst du den richtigen Wert aus dem Array dem ComputerName Parameter übergeben (erste Zeile wäre $serverliste[0] usw.). Mehr über den Zugriff auf Array Elemente in PowerShell gibt es hier: http://technet.microsoft.com/en-us/library/ee692791.aspx

    Gruß
    Andrei

    Dienstag, 4. Januar 2011 10:14
    Moderator

Alle Antworten

  • Hallo Karsten

    ist in der txt Datei nur ein Computername eingetragen oder mehrere?

    was sagt $serverliste.GetType()?

    Gruß
    Andrei

    Dienstag, 4. Januar 2011 09:31
    Moderator
  • Hallo Andrei,

    der Befehl: $serverliste.GetType()

    sagt folgendes:

    IsPublic IsSerial Name BaseType

    -------- -------- ---- --------

    True True Object[] System.Array

    In der Liste befindet sich im Moment nur ein Computername, habe es aber auch schon mit zwei Computern probiert mit dem gleichen Fehler.

    Gruß, Karsten

    Dienstag, 4. Januar 2011 09:57
  • Hallo Karsten

    System.Array heißt, dass es die txt Datei mehr als eine Zeile enthält und das würde das Verhalten erklären.

    Es gibt 2 Möglichkeiten:

    1. Stelle sicher, dass der Computername in der ersten Zeile der TXT Datei eingetragen ist und keine weiteren (leere) Zeilen vorhanden sind. Überprüffe anschließend, dass $serverliste.GetType() String anstatt Object[] anzeigt. Dann sollte eine direkte Übergabe per ComputerName passen.
    2. Du nutzt weiterhin einen Array (also mehrere Computernamen in der selben Datei). Dazu musst du den richtigen Wert aus dem Array dem ComputerName Parameter übergeben (erste Zeile wäre $serverliste[0] usw.). Mehr über den Zugriff auf Array Elemente in PowerShell gibt es hier: http://technet.microsoft.com/en-us/library/ee692791.aspx

    Gruß
    Andrei

    Dienstag, 4. Januar 2011 10:14
    Moderator
  • Hallo Andrei,

    ich hatte tatsächlich leere Zeilen in der Text-Datei. Vielen Dank für deine Hilfe, nun klappt es!

     

    Gruß, Karsten

    Dienstag, 4. Januar 2011 11:43
  • Gern geschehen. Freut micht, dass es jetzt funktioniert.

    Danke für die Rückmeldung!
    Andrei

    Dienstag, 4. Januar 2011 11:52
    Moderator
  • Also, für einen einzelnen Wert funktioniert mein Script nun. allerdings bricht es ab wenn mehrere Werte in der txt-Datei enthalten sind. Ich habe mir daher Variante 2 angeschaut, hab dort anscheinend noch ein Verständnisproblem.

    Ich fange erstmal mit der Problemstellung an:

    In der Liste befindet sich eine hohe Anzahl von Rechnern (keine Ahnung wie viel). Das Script soll ganz banal aller Rechner in der Liste restarten oder bei bedarf ausscahlten.

    Hast Du vieleich noch nen Tipp wie man es besser machen kann als ich mit meinem Script?

    Gruß, Karsten

    Dienstag, 4. Januar 2011 13:27
  • Hallo Karsten

    klar, kann sogar in eine Zeile mittels des Pipe-Features untergebracht werden:

    Get-Content "\\servername\home$\TMustermann\Administration\Scripts\Powershell-Skripte\Computer.TXT" | % {if(Restart-Computer -ComputerName $_ -Force) {Write-Host "$_ wurde neugestartet"}}
    

    Gruß
    Andrei

    Dienstag, 4. Januar 2011 13:41
    Moderator
  • Hi Andrei,

    vielen Dank. Allerdings werde ich es erst nächste Woche testen können. Melde mich dann wieder.

    Gruß, Karsten

    Mittwoch, 5. Januar 2011 13:01