thomaskern
Goto Top

Script zum Überschreiben eines USB Sticks

Hallo zusammen,

folgendes Problem. Wir haben viele USB Sticks mit einer veralteten Datei bekommen. Ich benötige ein Script welches z.B. das Laufwerk E überwacht und wenn dort ein USB Stick eingesteckt ist die darauf befindende Datei überschreibt. Und eine Rückmeldung gibt sobald erfolgreich überschrieben ist. Damit wir einen Stick nach dem anderen schnellst möglich überschreiben können.

Kann hier wer weiterhelfen?

Vorab besten Dank

Viele Grüße
Tom

Content-ID: 336744

Url: https://administrator.de/contentid/336744

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

132895
132895 03.05.2017 aktualisiert um 15:55:49 Uhr
Goto Top
Per Eventlog-Trigger Skript auslösen.

Gruß
colinardo
colinardo 03.05.2017 aktualisiert um 16:41:38 Uhr
Goto Top
Servus Tom.
Kleines Powershell-Skript das das Einstecken eines Wechseldatenträgers überwacht und dann sofort eine Datei drauf schreibt:
Der Laufwerksbuchstabe wird automatisch ermittelt:
$global:sourcefile = "D:\quelle\datei.zip"  
Unregister-Event NewDisk -EA 0
Register-WmiEvent -Query "Select * From __InstanceCreationEvent within 1 where TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 2" -SourceIdentifier NewDisk -Action {  
  write-host "New disk detected." -f Green  
  $letter = $Event.SourceEventArgs.NewEvent.TargetInstance.DeviceId
  write-host "Copying file '$global:sourcefile' to Drive '$letter' ... " -NoNewline  
  copy-item $global:sourcefile -Destination $letter -Force
  write-host "finished. Waiting for new device ..."  
}
cls
write-host "Waiting for new disk ..."  
while($true){sleep 1}
Grüße Uwe
ThomasKern
ThomasKern 03.05.2017 um 16:27:17 Uhr
Goto Top
Hallo Uwe,

vielen Dank für deine schnelle Hilfe. Kann die alte Datei welche sich auf den Stick befindet zuvor gelöscht oder einfach überschreiben werden?

VG
Tom
colinardo
colinardo 03.05.2017 aktualisiert um 16:38:12 Uhr
Goto Top
Die wird oben per Default im Root des Laufwerks überschrieben (Parameter: -Force) sofern sie gleich heißt und vorhanden ist,vorheriges explizites löschen ist hier nicht nötig.
ThomasKern
ThomasKern 03.05.2017 um 16:43:28 Uhr
Goto Top
Perfekt. Vielen Vielen Dank Uwe... Und auch Danke an password face-wink
colinardo
colinardo 03.05.2017 aktualisiert um 16:58:58 Uhr
Goto Top
Keine Ursache.
Wenn du willst könntest du das Auswerfen des Sticks auch gleich erledigen face-wink, spart einen Klick. Bei Bedarf liefere ich das gerne nach.

-edit- hier mit automatischem Eject nach dem Kopiervorgang:
$global:sourcefile = 'D:\quelle\datei.zip'  
$global:shell = New-Object -Com Shell.Application
Unregister-Event NewDisk -EA 0
Register-WmiEvent -Query "Select * From __InstanceCreationEvent within 1 where TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 2" -SourceIdentifier NewDisk -Action {  
  $letter = $Event.SourceEventArgs.NewEvent.TargetInstance.DeviceId
  write-host "New disk '$letter' detected." -f Green  
  write-host "Copying file '$global:sourcefile' to Drive '$letter' ... " -NoNewline  
  copy-item $global:sourcefile -Destination $letter -Force
  write-host "Copy finished."  
  write-host "Ejecting Device '$letter' ..." -NoNewline  
  $global:shell.Namespace(17).ParseName($letter).Verbs() | ?{$_.Name.replace('&','') -match '^(Auswerfen|Eject)$'} | %{$_.Doit()}  
  write-host "OK"  
  write-host "Waiting for next device ..."  
}
cls
write-host "Waiting for new disk ..."  
while($true){sleep 1}

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
ThomasKern
ThomasKern 04.05.2017 um 10:36:45 Uhr
Goto Top
Hallo Uwe,

jetzt hab ich doch noch ein Problem auf den Stick sind mehrere Daten und es soll nur eine in einem bestimmten Unterordner ES\Industry \test.pdf überschrieben werden.

Wie könnte ich das umsetzen?

Vorab besten Dank

VG
Tom
colinardo
colinardo 04.05.2017 aktualisiert um 11:55:23 Uhr
Goto Top
Ändere einfach den Destination-Pfad im Copy-Befehl face-smile
copy-item $global:sourcefile -Destination "$letter\ES\Industry\test.pdf" -Force   
ThomasKern
ThomasKern 04.05.2017 um 14:40:07 Uhr
Goto Top
Hallo Uwe,

also ich hab das Script jetzt angepasst. Alle Pfadangaben usw habe ich 100% richtig gesetzt. Wenn ich das Script starte und einen USB Stick einstecke wird dieser sofort erkannt und versucht zu kopieren. Leider bleibt es danach hängen.

Waiting for new disk ...
New disk 'G:' detected.
Copying file 'C:\quelle\ES_2016_12_low.pdf' to Drive
'G:' ...


$global:sourcefile = 'C:\quelle\ES_2016_12_low.pd'  
$global:shell = New-Object -Com Shell.Application
Unregister-Event NewDisk -EA 0
Register-WmiEvent -Query "Select * From __InstanceCreationEvent within 1 where TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 2" -SourceIdentifier NewDisk -Action {  
  $letter = $Event.SourceEventArgs.NewEvent.TargetInstance.DeviceId
  write-host "New disk '$letter' detected." -f Green  
  write-host "Copying file '$global:sourcefile' to Drive '$letter' ... " -NoNewline  
  copy-item $global:sourcefile -Destination $letter\ES\Industry\ES_2016_12_low.pd  -Force
  write-host "Copy finished."  
  write-host "Ejecting Device '$letter' ..." -NoNewline  
  $global:shell.Namespace(17).ParseName($letter).Verbs() | ?{$_.Name.replace('&','') -match '^(Auswerfen|Eject)$'} | %{$_.Doit()}  
  write-host "OK"  
  write-host "Waiting for next device ..."  
}
cls
write-host "Waiting for new disk ..."  
while($true){sleep 1}

Vielen Dank für deine Hilfe
VG
Tom
colinardo
colinardo 04.05.2017 aktualisiert um 14:51:35 Uhr
Goto Top
Alle Pfadangaben usw habe ich 100% richtig gesetzt.
Nee, schau noch mal ganz genau hin face-wink.
Läuft hier without issues ...
Natürlich sollte der Ordner existieren, ansonsten einfach im Code ein md reinpacken. Zur info: Es wird kein Progress beim Kopieren angezeigt.
132895
132895 04.05.2017 aktualisiert um 15:20:46 Uhr
Goto Top
Hab's hier auch mal versucht, funktioniert perfekt! Danke.