Schrift
[thread]12108[/thread]

Festplattenbelegung ausgeben+speichern (Seite 2)

Leser: 2


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
zottel335i
 2008-07-15 16:25
#112139 #112139
User since
2008-06-30
11 Artikel
BenutzerIn
[default_avatar]
hi,

also ich habe jetzt eine dem Umfeld entsprechende Lösung gefunden.
Ich möchte eine Putty-Erweiterung namens "plink" nutzen(http://the.earth.li/~sgtatham/putty/0.57/htmldoc/I...).

Somit habe ich den ganzen Wrapper-Kram usw. umgangen.

Leider scheitere ich an Anfängerfehlern. Wie das ganze aussehen soll wird mir nun langsam klar, jedoch kann ich keinen Funktionierenden Query in Perl zusammenbauen.

Entsprechend meinem geposteten Skript, sollte die Zeile in etwa so aussehen:

Code (perl): (dl )
1
2
3
4
my $plink_dir = "C:\Programme\Putty";
 my $res_query = "df -Ph";
 my $erg = plink.exe -ssh -P 22 -pw $PW $USER@$FQDN $res_query;
 


das ist zumindest dass, was ich probiert habe. Die Syntax des Befehls ist recht trivial.


Code: (dl )
plink -ssh -pw geheim user@123.45.56.7 df -Ph /Pfad 


Das habe ich in der Konsole erfolgreich ausprobiert. Von der Ausgabe des df-Befehls brauche ich nur die %Zahl der Speicherbelegung.


Soweit hab ich mir das ausgetüfftelt. Bitte helft mir jetzt mit der endgültigen Programmierung.

Danke + Gruß
zottel'
nepos
 2008-07-15 16:32
#112141 #112141
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code (perl): (dl )
my $erg = plink.exe -ssh -P 22 -pw $PW $USER@$FQDN $res_query;

Da fehlen auf jeden Fall schon mal die Backticks:
Code (perl): (dl )
my $erg = `plink.exe -ssh -P 22 -pw $PW $USER@$FQDN $res_query`;


Ein Problem hast du auch noch mit deinem df-Aufruf: hier kommt alles mit, auch tmpfs und udev-Dateisysteme:
Code: (dl )
1
2
3
4
5
6
7
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 2.4G 2.0G 329M 86% /
tmpfs 756M 0 756M 0% /lib/init/rw
udev 10M 68K 10M 1% /dev
tmpfs 756M 8.0K 756M 1% /dev/shm
/dev/sda5 10G 9.3G 758M 93% /home


Besser wäre es vielleicht so:
Code: (dl )
1
2
3
4
df -Ph -x tmpfs
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 2.4G 2.0G 329M 86% /
/dev/sda5 10G 9.3G 758M 93% /home
renee
 2008-07-15 16:35
#112142 #112142
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da sind einige Fehler drin:

* Wenn Du für einen Pfad unter Windows " verwendest, musst Du die \ auch escapen, also

my $plink_dir = "C:\\Programme\\Putty";

oder einfach ' verwenden

my $plink_dir = 'C:\Programme\Putty';


* Dann fehlen hier

my $erg = plink.exe -ssh -P 22 -pw $PW $USER@$FQDN $res_query;

komplett alle Anführungszeichen...

Probier mal:

my $erg = qx{$plink_dir/plink.exe -ssh -P 22 -pw $PW $USER\@$FQDN $res_query};

Mehr dazu siehe perlop
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
zottel335i
 2008-07-15 17:10
#112145 #112145
User since
2008-06-30
11 Artikel
BenutzerIn
[default_avatar]
hi,

ersteinmal vielen lieben Dank!

Das ganze sieht schon sehr lauffaehig aus. Bevor ich nun aber weiss, ob es nun läuft, müsste ich noch wissen, wie man ein blank im Pfad unschädlich macht.

Konkret ist das mein
Code: (dl )
$plink_dir = 'C:\Program Files\PuTTY';



Grüße,
zottel
#Kein Kommentar
 2008-07-15 22:51
#112166 #112166
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
meistens hilft da ein quotemeta:

Code: (dl )
1
2
3
$plink_dir = quotemeta 'C:\Program Files\PuTTY';

print $plink_dir;
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
zottel335i
 2008-07-16 12:43
#112192 #112192
User since
2008-06-30
11 Artikel
BenutzerIn
[default_avatar]
Hallo Community,

mein Skript ist nun syntaktisch Fehlerfrei. Es lag einfach an ein paar ""...
Das ganze sieht nun so aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/perl

use strict;
use IO::File;
use Win32;                              
use Win32::AdminMisc;   
use Win32::OLE qw (in);

# Ordner, in dem die CSV-Datei liegt
my $dir = '.';
# Trennzeichen in der Datei 
my $sep = ';';


# Datei oeffnen
open(DATEN,'<D:\reporting_script\systems.txt') or die "Konnte die Datei nicht öffnen";
# Inhalte abgreifen und splitten
while (defined(my $zeile = DATEN->getline))
{
 my ($FQDN, $OS, $HDD, $USER, $PW) = split(/;/,$zeile);
 
 # Abfrage der WindowsHosts
  if($OS eq 'win')
 {
  # Verbindungsaufbau
  my $conn_object = Win32::OLE->new('WbemScripting.SWbemLocator');
  my $server  = $conn_object->ConnectServer($FQDN, "root\\cimv2", $USER, $PW);
  
  # Abfrage des Datentraeger
  my $total; my $free;
  ($total, $free) = Win32::AdminMisc::GetDriveSpace("$HDD:\\");
  $total = $total / 1024 /1024;         # MegaByte!
  $free = $free / 1024 /1024;           # MegaByte!
  
  printf ("\n");
  printf ("Speicher gesamt: $total MB\n");
  printf ("Speicher verfuegbar: $free MB\n");
  printf ("\n");
    printf ("");
  }
 
 # Abfrage LinuxHosts
 if($OS eq 'lin')
 {
 # Verbindungsaufbau
 my $plink_dir = "D:\\reporting_script";
 my $res_query = "df -Ph";

 my $erg = qx{"$plink_dir\\plink.exe" -ssh -P 22 -pw $PW $USER\@$FQDN $res_query};
 printf ("$erg");
 }
 
}close(DATEN);
printf ("\n");
printf("schleife tot...");


Bisher habe ich das Skript lokal entwickelt und mit der Adresse 127.0.0.1 getestet. Jetzt wo das ganze via Netzwerk arbeiten soll (erstmal nur der Windowsteil) funktioniert wohl der Login nicht. Ich habe für die Variable $FQDN ein System aus dem Netzwerk angegeben. Die LoginIinformationen($User,$PW,$HDD) stimmen natürlich auch und händisch kann ich auf das System connecten.

Das Skript fragt jedoch immer nur die Festplatten des lokalen Systems ab. Festplatte C, D, E usw. geben die "richtigen" Informationen zurück(allerdings sind das die Festplattendetails des lokalen Systems). Frage ich bspw. die Festplatte F, welche auf dem Remotesystem vorhanden ist, aber auf dem lokalen nicht, bekomme ich 0GB freier/verfügbarer Speicher angezeigt.

Wo setze ich hier jetzt den Hebel an. Wie kann ich ein Troubleshooting durchführen?

Bin nun wirklich überfragt!?

Grüße,
zottel
murphy
 2008-07-16 17:50
#112208 #112208
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
zottel335i+2008-07-16 10:43:52--
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
[...]
  # Verbindungsaufbau
  my $conn_object = Win32::OLE->new('WbemScripting.SWbemLocator');
  my $server  = $conn_object->ConnectServer($FQDN, "root\\cimv2", $USER, $PW);
  
  # Abfrage des Datentraeger
  my $total; my $free;
  ($total, $free) = Win32::AdminMisc::GetDriveSpace("$HDD:\\");
[...]


Das Skript fragt jedoch immer nur die Festplatten des lokalen Systems ab.
[...]


Für mich sieht es so aus, als ob Du Dich zwar mit dem Server verbindest, diese Verbindung aber gar nicht weiter verwendest, sondern immer die Informationen vom lokalen System abfragst. Bestimmt musst Du Dem Aufruf von Win32::AdminMist::GetDriveSpace noch irgendwie sagen, dass er das $server-Objekt verwenden soll.

Wie das geht, weiß ich aber nicht, da ich von Windoof wenig Ahnung habe.
When C++ is your hammer, every problem looks like your thumb.
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2008-06-30 17:02.