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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 507077
Url: https://administrator.de/forum/viele-verzeichnisse-zu-separater-iso-mit-powershell-machbar-507077.html
Ausgedruckt am: 20.04.2025 um 21:04 Uhr
5 Kommentare
Neuester Kommentar
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.
Grüße Uwe
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