stefan007
Goto Top

Viele Verzeichnisse zu separater ISO mit PowerShell machbar?

Hi Leute,

ich habe ca. 2000 Verzeichnisse, die ich jeweils zu einer ISO mittels PowerShell machen möchte.

Das Tool Folder2ISO ist schön, aber ich möchte das gerne automatisiert machen und nicht pro Verzeichnis.

Meine Frage: Ist das grundsätzlich mit PowerShell machbar? Falls ja, ist jemand so nett und hilft mir dabei?


Gruß und schönen Sonntag!


Stefan

Content-Key: 507077

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

Ausgedruckt am: 29.03.2024 um 08:03 Uhr

Mitglied: Lochkartenstanzer
Lochkartenstanzer 20.10.2019 aktualisiert um 11:07:00 Uhr
Goto Top
Moin,

Einfach Deine Verzeichnisse in einen temporären Ordner kopieren und mit Folder2ISO "brennen".

Funktioniert sigar ohne besondere Prohrammierkenntnisse oder Powershellkenntnisse mit CMD-Batch.

Wo ist das Problem?

lks
Mitglied: Stefan007
Stefan007 20.10.2019 um 11:08:02 Uhr
Goto Top
Zitat von @Lochkartenstanzer:

Moin,

Einfach Deine Verzeichnisse in einen temporären Ordner kopieren und mit Folder2ISO "brennen".

Funktioniert sigar ohne besondere Prohrammierkenntnisse oder Powershellkenntnisse mit CMD-Batch.

Wo ist das Problem?

lks


Moin LKS,

ich checke das mal. Bis dato war ich der Meinung, dass ich jedes Verzeichnis einzeln mit F2ISO "brennen" müsse und das wollte ich mir bei 2000 Verzeichnissen nicht antun.

Wo das Problem ist, weiß ich noch nicht, ich lasse es dich aber sofort wissen ;)
Mitglied: Lochkartenstanzer
Lochkartenstanzer 20.10.2019 um 11:14:14 Uhr
Goto Top
Das Tool macht aus einem Verzeichnis ind allen Unterverzeichnissen eine ISO. Wenn die verteilt auf verschiedene Folder sind kopiert man sie halt in ein temporäres Verzeichnus zusammen. ggf. halt nur als hardlink, um Platz zu sparen.

lks
Mitglied: Lochkartenstanzer
Lochkartenstanzer 20.10.2019 um 11:20:58 Uhr
Goto Top
Ansonsten nimm mkisofs oder dvdrecord, die es auch füe windows gibt.

lks
Mitglied: colinardo
Lösung colinardo 20.10.2019 aktualisiert um 12:47:05 Uhr
Goto Top
Servus,
geht auch ohne Drittanbietertools rein mit der Powershell:

Erstellt aus allen Unterordnern der ersten Ebene eines Root-Ordners jeweils eine ISO-Datei mit dem Namen des Ordners + .iso und dem Inhalt des Ordners.
# Oberordner der die Ordner enthält die jeweils zu einer ISO werden.
$rootfolder = 'D:\ISO'  

function New-IsoFile {
  Param( 
    [parameter(Position=1,Mandatory=$true,ValueFromPipeline=$true)]$Source,
    [parameter(Position=2)][string]$Path,
    [ValidateSet('CDR','CDRW','DVDRAM','DVDPLUSR','DVDPLUSRW','DVDPLUSR_DUALLAYER','DVDDASHR','DVDDASHRW','DVDDASHR_DUALLAYER','DISK','DVDPLUSRW_DUALLAYER','BDR','BDRE')][string]$Media = 'DVDPLUSRW_DUALLAYER',   
    [string]$Title = ""  
  ) 
 
  Begin {  
    ($cp = new-object System.CodeDom.Compiler.CompilerParameters).CompilerOptions = '/unsafe'   
    if (!('ISOFile' -as [type])) {    
      Add-Type -CompilerParameters $cp -TypeDefinition @'   
public class ISOFile  
{ 
  public unsafe static void Create(string Path, object Stream, int BlockSize, int TotalBlocks)  
  {  
    int bytes = 0;  
    byte buf = new byte[BlockSize];  
    var ptr = (System.IntPtr)(&bytes);  
    var o = System.IO.File.OpenWrite(Path);  
    var i = Stream as System.Runtime.InteropServices.ComTypes.IStream;  
  
    if (o != null) { 
      while (TotalBlocks-- > 0) {  
        i.Read(buf, BlockSize, ptr); o.Write(buf, 0, bytes);  
      }  
      o.Flush(); o.Close();  
    } 
  } 
}  
'@    
    } 
 
    $MediaType = @('UNKNOWN','CDROM','CDR','CDRW','DVDROM','DVDRAM','DVDPLUSR','DVDPLUSRW','DVDPLUSR_DUALLAYER','DVDDASHR','DVDDASHRW','DVDDASHR_DUALLAYER','DISK','DVDPLUSRW_DUALLAYER','HDDVDROM','HDDVDR','HDDVDRAM','BDROM','BDR','BDRE')   
    $Image = New-Object -com IMAPI2FS.MsftFileSystemImage -Property @{VolumeName=$Title}
    $image.ChooseImageDefaultsForMediaType($MediaType.IndexOf($Media))
    $Target = New-Item -Path $Path -ItemType File -Force -ErrorAction SilentlyContinue
    if (!$target) { 
        Write-Error -Message "Kann Datei $Path nicht erstellen."  
        break
    } 
  }  
 
  Process { 
    foreach($item in $Source) { 
      if($item -isnot [System.IO.FileInfo] -and $item -isnot [System.IO.DirectoryInfo]) { 
        $item = Get-Item -LiteralPath $item 
      } 
 
      if($item) { 
        try { 
            $Image.Root.AddTree($item.FullName, $true) 
        } catch { 
            Write-Error -Message ($_.Exception.Message.Trim() + ' Anderen Medientyp ausprobieren.')   
        } 
      } 
    } 
  } 
 
  End {  
    $Result = $Image.CreateResultImage()
    [ISOFile]::Create($Target.FullName,$Result.ImageStream,$Result.BlockSize,$Result.TotalBlocks) 
    $Target
  } 
} 

# Alle Ordner der ersten Ebene des Rootfolders verarbeiten (Jeder Ordner stellt den Inhalt jeder ISO dar)
Get-Childitem $rootfolder -Directory | %{
    $ISOPATH = "$rootfolder\$($_.Name).iso"  
    write-host "Erstelle ISO '$ISOPATH' aus Ordner '$($_.Fullname)'." -F Green  
    # erstelle ISO mit dem Namen des Ordners + .iso und dem Inhalt des Ordners im Rootfolder
    Get-ChildItem $_.Fullname -Force | New-IsoFile -Path $ISOPATH -Title $_.Name | out-null
}
Gruß und schönen Sonntag!
Gleichfalls.

Grüße Uwe