Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Powershell - Logfile schreiben wenn Ordner erstellt

Frage Entwicklung Batch & Shell

Mitglied: Korbi1328

Korbi1328 (Level 1) - Jetzt verbinden

12.05.2011 um 12:51 Uhr, 5945 Aufrufe, 5 Kommentare

Hallo Zusammen,

in einem Script werden verschiedene Ordner erstellt und Registry-Keys angelegt, neben bei soll hierzu ein Logfile geschrieben werden.

New-Item "$env:ProgramFiles\NewFolder" -type directory

Jetzt soll abgefragt werden ob der Ordner erstellt wurde, wenn ja soll das im Logfile erscheinen, wenn nicht dann soll ein Error im Logfile erscheinen.

Schön wäre es wenn der Output von "verbose" im Logfile erscheinen würde.

Fällt jemanden dazu etwas ein?

Danke im Voraus!
Mitglied: Pemo11
12.05.2011 um 13:59 Uhr
Hallo User,

Ich würde das FileSystemWatcher-Objekt benutzen mit dem sich ein bestimmtes Verzeichnis überwachen lässt und das Event per Register-ObjectEvent registrieren. Über den Action-Parameter kann man einen Skriptblock angeben, der als Job ausgeführt wird, wenn das Event später eintritt.

Der Output von Verbose lässt sich leider nicht umleiten. Das Logfle schreiben geht ja per Write-EventLog ganz einfach (wenn die Source existiert, ansonsten muss sie mit New-Eventlog angelegt werden).

Hier ist ein kleines Skript, das einen Ordner anlegt und über ein Event eine Meldung ausgibt, dass der Ordner angelegt wurde.
01.
<# 
02.
 .Synopsis 
03.
 Anlegen von Ordnern überwachen 
04.
#> 
05.
 
06.
$OrdnerPfad = "C:\PsTestDir" 
07.
$OrdnerName = "Pemo" 
08.
if (Test-Path -Path $OrdnerPfad) 
09.
{ Remove-Item -Path $OrdnerPfad } 
10.
New-Item -Path $OrdnerPfad -ItemType Directory | Out-Null 
11.
 
12.
$Fsw = New-Object -TypeName System.IO.FileSystemWatcher 
13.
$Fsw.Path = $OrdnerPfad 
14.
$Fsw.EnableRaisingevents = $true 
15.
 
16.
# Event registrieren 
17.
Register-ObjectEvent -InputObject $Fsw -EventName "Created" -SourceIdentifier FswCreate ` 
18.
  -Action { $Global:OrdnerCreated = $($Event.SourceArgs[1].FullPath);[System.Windows.Forms.MessageBox]::Show("Ordner $OrdnerCreated wurde angelegt.") } | Out-Null 
19.
   
20.
 
21.
# Ordner anlegen - Verbose-Ausgabe kann nicht umgeleitet werden 
22.
$FolderCreated = New-Item -Path "$OrdnerPfad\$OrdnerName" -ItemType Directory  | Select -Exp FullName 
23.
$FolderCreated 
24.
$OrdnerCreated 
25.
 
26.
$Fsw.EnableRaisingEvents = $false 
27.
Unregister-Event -SourceIdentifier FswCreate 
28.
Get-Job -Name FswCreate -ErrorAction SilentlyContinue | Stop-Job -PassThru | Remove-Job -Force 
Ein wenig einfacher wäre natürlich, bei New-Item ein -ErrorAction = SilentlyContinue zu setzen und danach $? abzufragen. Der Event-Ansatz hat den Vorteil, dass dies nicht nach jedem Ordneranlegen geschehen muss.

Auf alle Fälle lässt sich daraus etwas machen.

Viele Grüße,
Pemo
[Edit Biber] Code-Formatierung [/Edit]
Bitte warten ..
Mitglied: Korbi1328
12.05.2011 um 15:39 Uhr
Danke für die Antwort erstmal!

Bei deinem Beispiel-Script wird ja in einer Message Box ausgeben, wie kann ich in einem Textfile ausgeben?

Außerdem noch eine kurze Frage: Um mehrere Ordner anzulegen muss ich dazu nur den ersten Block kopieren, oder?

$OrdnerPfad = "C:\PsTestDir"
$OrdnerName = "Pemo"
if (Test-Path -Path $OrdnerPfad)
{ Remove-Item -Path $OrdnerPfad }
New-Item -Path $OrdnerPfad -ItemType Directory | Out-Null

Gruß Korbi
Bitte warten ..
Mitglied: Pemo11
12.05.2011 um 18:44 Uhr
Hallo Korbi,

Ja, die Messagebox dient nur zur Veranschaulichung - damit lässt sich feststellen, dass überhaupt etwas passiert. Der Teil muss wieder raus.
Um mehrere Ordner anzulegen würde ich die Namen eventuell zu einer Variablen zusammenfassen:

Hier ist ein kleines Skript, das ein paar Ordner anlegt und pro angelegtem Ordner eine Meldung in das Application-Log schreibt mit dem Ordnerpfad als Message, Die Quelle ist OrdnerTest.
01.
<# 
02.
 .Synopsis 
03.
 Anlegen von Ordnern überwachen 
04.
#> 
05.
 
06.
$OrdnerPfad = "C:\PsTestDir" 
07.
 
08.
if (Test-Path -Path $OrdnerPfad) 
09.
{ Remove-Item -Path $OrdnerPfad } 
10.
New-Item -Path $OrdnerPfad -ItemType Directory | Out-Null 
11.
 
12.
$Fsw = New-Object -TypeName System.IO.FileSystemWatcher 
13.
$Fsw.Path = $OrdnerPfad 
14.
$Fsw.EnableRaisingevents = $true 
15.
 
16.
# Event-Quelle anlegen 
17.
New-EventLog -LogName Application -Source OrdnerTest -ErrorAction SilentlyContinue 
18.
 
19.
# Event registrieren 
20.
Register-ObjectEvent -InputObject $Fsw -EventName "Created" -SourceIdentifier FswCreate ` 
21.
  -Action { Write-EventLog -LogName Application -Source OrdnerTest -EventID 1000 -EntryType Information ` 
22.
   -Message "Ordner $($Event.SourceArgs[1].FullPath) wurde angelegt." } | Out-Null 
23.
 
24.
$OrdnerListe = "Ordner1", "Ordner2", "Ordner3" 
25.
   
26.
$OrdnerListe | Foreach-Object {  
27.
     New-Item -Path "$OrdnerPfad\$_" -ItemType Directory 
28.
29.
 
30.
$Fsw.EnableRaisingEvents = $false 
31.
Unregister-Event -SourceIdentifier FswCreate 
32.
Get-Job -Name FswCreate -ErrorAction SilentlyContinue | Stop-Job -PassThru | Remove-Job -Force 
Das sollte die Aufgabe erledigen.

Viele Grüße,
Pemo
[Edit Biber] Code-Formatierung [/Edit]
Bitte warten ..
Mitglied: Korbi1328
13.05.2011 um 10:03 Uhr
Hallo Pemo,

eine letzte Frage noch, mit dem FileSystemWatcher lässt sich ja nicht die Registry überwachen, wenn ich auf deine Weise Reg-Keys anlegen will. Gibt es hierzu etwas änliches?

Viele Grüße
Korbi
Bitte warten ..
Mitglied: Pemo11
13.05.2011 um 11:23 Uhr
Hallo Korbi,

Das geht auch, per WMI und einer WMI-Event-Klasse. Es ist sogar relativ einfach:
01.
<# 
02.
 .Synopsis 
03.
 Registry-Überwachung 
04.
#> 
05.
 
06.
$WQLQuery = @" 
07.
Select * From RegistryKeyChangeEvent Where Hive = 'HKEY_LOCAL_MACHINE' and KeyPath = 'Software\\Pemo' 
08.
"@ 
09.
 
10.
Register-WmiEvent -query $WQLQuery -SourceIdentifier RegEvent ` 
11.
 -Action { $RegPfad = [System.Windows.Forms.MessageBox]::Show("Neuer Subkey in $($Event.SourceEventArgs.NewEvent.KeyPath)") } 
12.
 
13.
#Unregister-Event -SourceIdentifier RegEvent
Der Name des neu angelegten Subkeys lässt sich meiner Meinung nach nicht abfragen (oder er versteckt sich in den Tiefen von dem Objekt, das über $Event angesprochen wird).

Das Ganze ist gut dokumentiert. Hier gibt es z.B. noch mehr dazu:

http://poshcode.org/2501

VIele Grüße,

Pemo
[Edit Biber] Code-Formatierung [/Edit]
Bitte warten ..
Ähnliche Inhalte
Windows Server
Powershell logfile nach Datei suchen
Frage von krischeuWindows Server2 Kommentare

Hi, ich suche nach einer Möglichkeit, das weggespeicherte Logfile auszulesen und zwar nach Zugriff auf eine bestimmte Datei. Das ...

Batch & Shell
PowerShell: Logfiles nach der 7ten Version verschieben
gelöst Frage von ImmerKindBatch & Shell3 Kommentare

Hallo zusammen Ich stehe an einem kleinen Problem. Ich will meine Logfiles nach der 7ten Version auf meine Festplatte ...

Batch & Shell
Powershell Datenauslesen und in eine CSV schreiben
gelöst Frage von PrekusBatch & Shell2 Kommentare

Hallo zusammen, ich stehe vor einem kleinem Problem. Unser powershell Pro ist langzeit erkrankt und unser Controller nervt uns ...

Batch & Shell
Powershell Skript richtig schreiben
Frage von 134864Batch & Shell16 Kommentare

Hallo liebe Community, ich arbeite seit einigen Tagen mit der Powershell. Meine Aufgabe ist es ein Skript zu schreiben ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 StundeWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 3 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Brainstorming, einfachste Option 1 getrenntes LAN (mit WAN zugang)
Frage von 132954LAN, WAN, Wireless13 Kommentare

Hi, folgendes: Wir bekommen eine Glasfaser Leitung, Und das sollte Optional so aussehen: Ein Modem/Router für das WAN, ein ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...