mguenth83
Goto Top

Powershell Select-String gibt kein False wieder

Hi,
ich habe ein Powershellscript und weiss derzeit nicht weiter warum genau er mir bei einer variablen kein False ausspuckt.
Das Script soll den Benutzer in einer Computerlist.txt überprüfen ob jemand angemeldet ist. Wenn dies der fall ist und dort etwas ausgegeben wird soll er True schreiben doch ist das Property leer soll er false schreiben,

Hier mal das Script...

$ComputerList = "C:\Users\test\Desktop\LogonScript\MachineList.txt"
$ActiveComputers = "C:\Users\test\Desktop\LogonScript\Active.txt"
$ActiveUsers = "C:\test\Desktop\LogonScript\ActiveUsers.txt"

Get-Content $ComputerList | Where-Object {(Test-Connection -Count 1 -ComputerName $_ -ErrorAction SilentlyContinue)} | Out-File -FilePath $ActiveComputers
foreach(
$content in $ActiveComputers)
{
Get-WmiObject -Class Win32_ComputerSystem -Property UserName | Select-Object -Property Username | Select-String "LRA" -Quiet | Out-File -FilePath $ActiveUsers
}

Erst soll er eine vorgegebene Datei durchsuchen und pingen. Alle die ereeichbar sind sollen in eine TXT geschrieben werden. Von dieser TXT soll dann das andere Script schauen wer alles angemeldet ist und wieder in eine TXT schreiben (True or False)
Dann kombiniere ich die beiden TXT und alle die true haben lass ich nochmals in ne txt schreiben.Diese PCs werden dann heruntergefahren um strom zu sparen.

Ich weiss es ist verdammt umständlich aber besser kann ichs nicht, hoffe Ihr helft mir trozdem face-wink

Gruß
Matze

Content-ID: 205955

Url: https://administrator.de/forum/powershell-select-string-gibt-kein-false-wieder-205955.html

Ausgedruckt am: 21.12.2024 um 06:12 Uhr

filippg
filippg 02.05.2013 um 17:00:30 Uhr
Goto Top
Hallo,

[...] warum genau er mir bei einer variablen kein False ausspuckt.
Bei welcher denn? Wäre schon nett, wenn du das sagen würdest.

Du solltest die Problemstellung weiter zerlegen. Du gibst ja Zwischenergebnisse in Textdateien aus. Ist denn der Inhalt der ersten Datei noch so, wie erwartet? Wird er dann im nächsten Schritt korrekt eingelesen? Das könntest du z.B. mit einem Write-Host Prufe $content anzeigen lassen. Womit wir auch beim nächsten Problem wären: du iterierst zwar über $ActiveComputers (foreach...), aber ich sehe nicht, dass die Laufvariable $content dann irgendwo mal verwendet würde.

Wenn dies der fall ist und dort etwas ausgegeben wird soll er True schreiben doch ist das Property leer soll er false schreiben,
Jaaa... dann solltest du ihm das auch sagen. In der PowerShell ergibt $string den Wert $false, wenn der STring leer ist oder gar nicht initialiert wurde. Also if($str){ write-host "true" } else { write-host "false" }

Gruß

Filipp
mguenth83
mguenth83 13.05.2013, aktualisiert am 16.01.2014 um 11:35:45 Uhr
Goto Top
Hi,
sorry das die Antwort solange dauert. Habe es eben nochmal getestet und die Listen sind alle sauber bis zum Punkt wo er die Users rausfinden soll.
Sprich bei der Zeile..
Get-WmiObject -Class Win32_ComputerSystem -Property UserName | Select-Object -Property Username | Select-String "LRA" -Quiet | Out-File -FilePath $ActiveUsers

Bei dem Befehl schreibt er mir dann nur in die Textdatei die angemeldeten user, sprich wenn es kein Wert gibt dann schreibt er nicht False oder sonstiges rein sondern einfach nicht. Dies ist alledings blöd wenn ich später die Liste ActiveComputers mit den ActiveUsers kombinieren will. Wenn dort nicht false steht verrücken die ganzen Zeilen und es gibt Chaos...

In das Script habe ich jetzt noch die "If" Abfrage rein gemacht, weiss aber nicht obs richtig ist, weil funktionieren tut es immer noch nicht.

$ComputerList = "C:\Users\x\Desktop\LogonScript\MachineList.txt"
$ActiveComputers = "C:\Users\x\Desktop\LogonScript\ActiveComputers.txt"
$ActiveUsers = "C:\Users\x\Desktop\LogonScript\ActiveUsers.txt"
$str

Get-Content $ComputerList | Where-Object {(Test-Connection -Count 1 -ComputerName $_ -ErrorAction SilentlyContinue)} | Out-File -FilePath $ActiveComputers
if($str){ write-host "true" } else { write-host "false" }
foreach($content in $ActiveComputers)
{
Get-WmiObject -Class Win32_ComputerSystem -Property UserName | Select-Object -Property Username | Select-String "LRA" -Quiet | Out-File -FilePath $ActiveUsers
}