Hallo,
Ich hoffe ihr könnt mir bei diesem Problem helfen :D
Falls ich Informationen hier reinzuschrieben vergessen habe sagt es mir bitte.
Mein Problem:
In diesem Script habe ich die Variable $date diese wird ganz am anfang auf ERROR umgeschrieben (damit ich weis ob das script das erste mal durchläuft oder nicht)
später wird sie dann im $fancy block (eigentlich ist das ja eine Variable mit Code drinnen, kann ich das Block nennen?)
auf das momentane Datum + Uhrzeit umgeschrieben.
Damit wird die Output.txt auf das momentane Datum + Uhrzeit.txt umbenannt.
sobald das Script aber jetzt das IF ELSE in welchem wir uns gerade befinden verlässt wird $date wieder in ERROR umgechrieben obwohl das Script wenn ich in Einzelschritten durchgehe nie auch nur irgendwie in die nähe von etwas kommt was es umschreiben
könnte (jedenfalls visuel)
#Hier steht alles was nicht wiederholt werden darf/muss.
$host.ui.RawUI.WindowTitle = "S.D.A.R. , System Details Agent Remote"
$date = "ERROR"
$cdrive = "y"
$cos = "y"
$ccpu = "y"
#Hier wird je nachdem welchen Inhalt die Variabeln haben ausgesucht welche Informationen alles gelesen werden.
$sort = {
if($cdrive -eq "y"){&$coredrive
}
if($cos -eq "y"){&$coreos
}
if($ccpu -eq "y"){&$corecpu
}
}
#Informationen zu den Festplatten werden hier ausgelesen:
$coredrive = {
Try{
Write-Host "@@@@@@@@ Festplatten Details @@@@@@@@" -backgroundcolor Blue -foregroundcolor White
Get-WmiObject -ComputerName $Hostname win32_logicaldisk -Namespace "root\CIMV2" | select @{label='Host Name';Expression={$_.SystemName}},@{label='Festplatten Name';Expression={$_.deviceid}},@{label='Gesammt Größe(GB)';Expression={[math]::truncate($_.size/1gb)}},@{label='Freier Platz(GB)';Expression={[math]::truncate($_.Freespace/1gb)}}| ft -AutoSize
}
Catch{
Write-Host "Error beim sammeln der Informationen, Festplatten"
}
}
#Informationen zum OS und zum System werden hier ausgelesen:
$coreos = {
Try{
Write-Host "@@@@@@@@ System Basic Details @@@@@@@@" -backgroundcolor Blue -foregroundcolor White
Get-WmiObject -Class Win32_computerSystem -Namespace "root\CIMV2" -ComputerName $Hostname |select @{label='Host Name';Expression={$_.Name}},@{label='Manufacturer Name';Expression={$_.Manufacturer}},@{label='Model Name';Expression={$_.Model}},@{label='Anzahl der CPU`s';Expression={$_.NumberOfProcessors}},@{label='Gesammter Ram(MB)';Expression={[math]::truncate($_.TotalPhysicalMemory/1mb)}}| ft -AutoSize
Get-WmiObject -ComputerName $Hostname win32_bios | Select Manufacturer,SerialNumber | Format-Table -AutoSize
Get-WmiObject -computername $hostname win32_OperatingSystem -Namespace "root\CIMV2" | select @{label='Host Name';Expression={$_.Csname}},@{label='Betriebssystem';Expression={$_.Caption}},@{label='ServicePack Name';Expression={$_.CSDVersion}},@{label='Freier Ram(MB)';Expression={[math]::truncate($_.FreePhysicalMemory/1kb)}},@{Label='Lastbootuptime' ;Expression={$_.converttodatetime($_.lastbootuptime)}} |Format-Table -AutoSize
}
Catch{
Write-Host "Error beim sammeln der Informationen, OS"
}
}
#CPU Informationnen werden hier ausgelesen:
$corecpu = {
Try{
Write-Host "@@@@@@@@ CPU Details @@@@@@@@" -backgroundcolor Blue -foregroundcolor White
Get-WmiObject win32_processor -Namespace "root\CIMV2" -ComputerName $hostname |select @{label='CPU Name';Expression={$_.Name}},@{label='Anzahl der Kerne';Expression={$_.NumberOfCores}},@{label='Anzahl der Threats';Expression={$_.NumberOfLogicalProcessors}}| ft -AutoSize
}
Catch{
Write-Host "Error beim sammeln der Informationen, CPU"
}
}
#Hier Wird alles vorbereitet um es in eine Datei zu schreiben.
#Nachdem die Formatierung fertig ist wird die Datei erstellt und fals notwendig mit einer anderen Datei zusammengeführt.
$fancy = {
$(
$leer1 = " "
$leer2 = " "
$count = $hostname.length
Write-Host "$count"
do{
$leer1 = $leer1.remove(1,1)
$leer2 = $leer2.remove(1,1)
$count = $count - 2
Write-Host "$count"
} while ($count -gt 1)
if ($count -eq 1){
$leer2 = $leer2.remove(1,1)
}
Write-Host "╔═══════════════════════════════════════════════════════╗"
Write-Host "║$leer1 $hostname $leer2║"
Write-Host "╚═══════════════════════════════════════════════════════╝"
#vom Anfang des Blockes bis hier wird die Überschrift in der txt Datei erstellt
&$sort #Wenn die Informationen in eine Datei geschrieben werden sollen werden hier nochmal die wmi's ausgeführt
#Gäbe es eine Möglichkeit, dass ich die wmi's nicht zwei mal ausführen muss?,
#dass es in die Konsole geschrieben wird und gleichzeitig in die Datei?
) *>&1 > output.txt
Read-Host $date #Nur zur Spurensuche wo der Fehler liegt, welchen ich suche (Frage im Forum)
if ($date -eq "ERROR" ){ #um beim Parameter -oti nur einmal das Datum auszulesen, sonst wäre es um einiges schwieriger die Datein zusammenzuführen
$date = Get-Date -Format d.M.yyyy-h.m.s
Rename-item output.txt -newname "$date.txt" #Datei muss ich hier umbenennen, da ich 4 Zeilen weiter oben nicht eine Variable als Datei Namen benutzen kann
} else {
Get-Content .\output.txt | Add-Content .\$date.txt #Zusammenführen der Datein
Remove-Item .\output.txt
}
Read-Host $date #Nur zur Spurensuche wo der Fehler liegt, welchen ich suche (Frage im Forum)
}
#Grundblock der Kern der geschichte, hier wird entschieden wann, was, wo gemacht wird.
$wholesdar = {
CLS
$Hostname= Read-Host "Host Name oder IP eingeben" #Einlesen des Hostnamens, folgend auswertung der Parameter
if ($hostname -like "* -*") {
if ($hostname -like "* -oti*"){
$hostname = $hostname.Replace(" -oti","")
$hostname = $hostname.Replace(" -ot","")
$txtoutyn = "yi"
} elseif ($hostname -like "* -ot*"){
$hostname = $hostname.Replace(" -ot","")
$txtoutyn = "y"
}
if ($hostname -like "* -drive*"){
$hostname = $hostname.Replace(" -drive","")
$drive = "y"
} elseif ($hostname -like "* -d*"){
$hostname = $hostname.Replace(" -d","")
$drive = "y"
}
if ($hostname -like "* -b*"){
$hostname = $hostname.Replace(" -b","")
$os = "y"
}
if ($hostname -like "* -os*"){
$hostname = $hostname.Replace(" -os","")
$os = "y"
}
if ($hostname -like "* -cpu*"){
$hostname = $hostname.Replace(" -cpu","")
$cpu = "y"
} elseif ($hostname -like "* -c*"){
$hostname = $hostname.Replace(" -c","")
$cpu = "y"
}
}
#Ping Hostname, sending 2 Pings (-count)
if(-not (Test-Connection -ComputerName $hostname -Quiet -Count 2))
{
Write-Host "PC nicht erreichbar."&$wholesdar
} else {
Write-Host "PC erreichbar"
}
#Umschreiben auf andere Variable, damit bei einem weiteren durchgang die Parameter gleich bleiben.
if ($cpu -eq "y" -or $os -eq "y" -or $drive -eq "y" ){
$ccpu = "n"
$cdrive = "n"
$cos = "n"
if($drive -eq "y"){
$cdrive = "y"
}
if($os -eq "y"){
$cos = "y"
}
if($cpu -eq "y"){
$ccpu = "y"
}
}&$sort #Geht alle wmi's durch und führt sie aus, wenn die jeweilige Variable y ist
if ($txtoutyn -eq "y"){&$fancy
$txtoutyn = "n"
}
if ($txtoutyn -eq "yi"){&$fancy
}
#Wiederholen?
Read-Host "$date bevor again" #Nur zur Spurensuche wo der Fehler liegt, welchen ich suche (Frage im Forum)
$again = Read-Host "Erneut?"
if ($again -eq "y"){&$wholesdar
} else {
if ($again -eq "j"){&$wholesdar
} else {
Write-Host "Tschauli"
}
}
}
&$wholesdar
So hoffentlich kann mir einer von euch da etwas helfen :D
Und Danke für lesen und Danke schon mal im voraus fürs helfen.
Wie gesagt wenn ich etwas vergessen hätte sagt es mir bitte.
geschrieben habe ich das ganze in der Powershell ISE und mittlerweile im PowerGUI Script Editor (von Dell wenn ich mich nicht täusche)
hfh
teenusa
EDIT-1: Habe jetzt den Ping Test von Lars eingefügt und schon ein paar Kommentare hinzugefügt
EDIT-2: Noch mehr Kommentare | die ganzen Parameter sind dazu da um nur bestimmte Informationen zu bekommen, bzw. die Informationen auch in eine .txt zu verfrachten.
EDIT-3: Try Catch eingefügt (wo soll ich try catch überall haben?)
EDIT-4: elseif eingefügt bei Parameter abfrage (auch performanter gestaltet