28okn28
Goto Top

Progressbar Powershell

Wie kann ich zu diesem Quellcode ein Ladebalken hinzufügen, dieses soll während des Kopie-Vorgang starten?

<#
    AUTO COPY DISK ON INSERT
#>
# ==============
# drive letter to monitor
$drive = 'D:'  
# backup root folder
$target = 'C:\tmp'  
# =============
# only continue if PS >= Version 3.0
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}  
# create root folder if not exist
if (!(Test-Path $target)) {md $target -Force | out-null}

# delete eventcubscriber if there are still open ones
Get-EventSubscriber | Unregister-Event -Force
# shell object
$global:shell = New-Object -Com Shell.Application

# WMI Event Registration (Action fires when CD-Drive changes it's state)  
Register-WmiEvent -Query "Select * From __InstanceModificationEvent Within 1 where TargetInstance isa 'Win32_LogicalDisk' and TargetInstance.DriveType = 5 and TargetInstance.Size != null and TargetInstance.DeviceId = '$drive'" -SourceIdentifier 'RemovableDetector' -Action {  
    $deviceid = $Event.SourceEventArgs.NewEvent.TargetInstance.DeviceID
    
    

    # create target subfolder with name format 
    $targetfolder = "c:\tmp\$(Read-host 'Patientennamen eingeben')$('_')$(get-date -f yyyy)$('__')$(get-date -f HH.mm.ss)"  
    md $targetfolder -Force | out-null



    # list drive information
    write-host "CD lädt..." -F Green  
    write-host ($Event.SourceEventArgs.NewEvent.TargetInstance | select DeviceId | ft -AutoSize | out-string)
    write-host "CD-Inhalte werden kopiert ... '$targetfolder' ... " -F Green  

    # copy to target
    copy-item "$deviceid\*" -Recurse -Destination $targetfolder -Force -exclude *.txt  
    

    # eject disk
    write-host "Fertig. CD wird ausgeworfen ... '$deviceid' ..." -F Red  
    $global:shell.Namespace(17).ParseName($deviceid).Verbs() | ?{$_.Name.replace('&','') -match '^(Auswerfen|Eject)$'} | %{$_.Doit()}  
    write-host 'Nächste CD einlegen ...' -F white  
} | out-null
cls
write-host 'CD einlegen ...' -F Green  
while($true){sleep 1}

Content-Key: 425846

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

Printed on: April 24, 2024 at 23:04 o'clock

Member: St-Andreas
St-Andreas Mar 07, 2019 at 12:26:41 (UTC)
Goto Top
So?
2019-03-07 13_24_58-window
Member: erikro
erikro Mar 07, 2019 at 12:47:43 (UTC)
Goto Top
Mitglied: 138810
138810 Mar 07, 2019 at 12:50:28 (UTC)
Goto Top
Member: H41mSh1C0R
H41mSh1C0R Mar 07, 2019 at 12:52:39 (UTC)
Goto Top
ymmd!! ^^
Member: 28okn28
28okn28 Mar 07, 2019 at 13:24:27 (UTC)
Goto Top
mit Write-Progress
Mitglied: 138810
Solution 138810 Mar 07, 2019 updated at 14:19:19 (UTC)
Goto Top
Zitat von @28okn28:

mit Write-Progress
Du kannst den Kopiervorgang von Copy-Item vom Codebeispiel damit nicht loggen! Dazu müsstest du z.B. Robocopy verwenden und dessen Statusausgabe auswerten, oder jede Datei einzeln mit Foreach-Schleife kopieren, dazu gibt es hier aber im Forum schon genügend Beispiele.
Wie gesagt Suchfunktion nutzen.

Vorgehensweise
  • Mit Get-childitem alle Dateien enumerieren
  • Die Anzahl mit der Eigenschaft Count ermitteln
  • Mit for each Schleife die Dateien kopieren und in der Schleife mit Write-progress den Status aktualisieren. Prozentsatz bekommst du ja mit einer Grundschulrechenaufgabe => Schleifenvariable / Gesamtanzahl Dateien * 100
  • So und jetzt Birne anschalten und ran ans Werk.
Member: Kraemer
Kraemer Mar 07, 2019 at 17:02:27 (UTC)
Goto Top
Zitat von @138810:
  • So und jetzt Birne anschalten und ran ans Werk.
der Code kommt hier aus dem Forum, die erste Anpassung (Pipifax) kommt hier aus dem Forum, nun dies "Problem" - ich wette um nen Kieselstein, dass der "Gute" nicht eine Zeile davon versteht.
Mitglied: 138810
138810 Mar 07, 2019 at 17:42:27 (UTC)
Goto Top
Dann holt er sich eben ein Grid-Girl das bei jedem Wechsel mit einem Schild mit der Prozentzahl vorbei kommt 😄