使用New-IsoFile将文件夹创建IOS文件

使用New-IsoFile将原U盘启动盘内容创建IOS文件

使用PowerShell的New-IsoFile命令

# 查看所有磁盘
Get-Disk

# 找到你的U盘对应的磁盘编号(Disk Number)
# 然后使用以下命令创建ISO,假设U盘是磁盘1
New-IsoFile -Source E:\ -Path "C:\filename.iso" -Title "filename" -Force

如果New-IsoFile命令不存在

  1. 直接在powershell中输入如下内容,只在当前会话生效:
function New-IsoFile {
    [CmdletBinding(DefaultParameterSetName = 'SourceDir')]
    Param(
        [Parameter(Mandatory = $true, Position = 0, ParameterSetName = 'SourceDir')]
        [ValidateNotNullOrEmpty()]
        [ValidateScript({ Test-Path $_ -PathType Container })]
        [System.IO.DirectoryInfo[]] $SourceDir = @(Get-Item .),

        [Parameter(Mandatory = $true, Position = 1)]
        [ValidateNotNullOrEmpty()]
        [ValidateScript({ Test-Path $_ -PathType Container })]
        [System.IO.DirectoryInfo] $OutDir = $SourceDir[0].Parent,

        [Parameter(Mandatory = $false)]
        [ValidateNotNullOrEmpty()]
        [string] $Title = $SourceDir[0].Name,

        [ValidateScript({ Test-Path -LiteralPath $_ -PathType Leaf })]
        [ValidateNotNullOrEmpty()]
        [System.IO.FileInfo] $BootFile = $null,

        [ValidateSet('CDR', 'CDRW', 'DVDRAM', 'DVDPLUSR', 'DVDPLUSRW', 'DVDPLUSR_DUALLAYER', 'DVDDASHR', 'DVDDASHRW', 'DVDDASHR_DUALLAYER', 'DISK', 'DVDPLUSRW_DUALLAYER', 'BDR', 'BDRE')]
        [string] $Media = 'DVDPLUSRW_DUALLAYER',

        [switch] $Force,

        [Parameter(ParameterSetName = 'Clipboard')]
        [switch] $FromClipboard
    )

    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();
                    }
                }
            }
'@
        }

        if ($BootFile) {
            if ('BDR', 'BDRE' -contains $Media) { Write-Warning "Bootable image doesn't seem to work with media type $Media" }
            ($Stream = New-Object -ComObject ADODB.Stream -Property @{Type = 1 }).Open() # adFileTypeBinary
            $Stream.LoadFromFile((Get-Item -LiteralPath $BootFile).Fullname)
            ($Boot = New-Object -ComObject IMAPI2FS.BootOptions).AssignBootImage($Stream)
        }

        $MediaType = @('UNKNOWN', 'CDROM', 'CDR', 'CDRW', 'DVDROM', 'DVDRAM', 'DVDPLUSR', 'DVDPLUSRW', 'DVDPLUSR_DUALLAYER', 'DVDDASHR', 'DVDDASHRW', 'DVDDASHR_DUALLAYER', 'DISK', 'DVDPLUSRW_DUALLAYER', 'HDDVDROM', 'HDDVDR', 'HDDVDRAM', 'BDROM', 'BDR', 'BDRE')
        Write-Verbose -Message "Selected media type is $Media with value $($MediaType.IndexOf($Media))"

        ($Image = New-Object -com IMAPI2FS.MsftFileSystemImage -Property @{VolumeName = $Title }).ChooseImageDefaultsForMediaType($MediaType.IndexOf($Media))

        $Path = Join-Path -Path $OutDir -ChildPath "${Title}.iso"
        if (!($Target = New-Item -Path $Path -ItemType File -Force:$Force -ErrorAction SilentlyContinue)) { Write-Error -Message "Cannot create file $Path. Use -Force parameter to overwrite if the target file already exists."; break }
    }

    Process {
        if ($FromClipboard) {
            if ($PSVersionTable.PSVersion.Major -lt 5) { Write-Error -Message 'The -FromClipboard parameter is only supported on PowerShell v5 or higher'; break }
            $SourceDir = (Get-Clipboard -Format FileDropList | Get-Item)
        }

        foreach ($item in ($SourceDir | Get-ChildItem)) {
            if ($item -isnot [System.IO.FileInfo] -and $item -isnot [System.IO.DirectoryInfo]) {
                $item = Get-Item -LiteralPath $item
            }
            if ($item) {
                Write-Verbose -Message "Adding item to the target image: $($item.FullName)"
                try { $Image.Root.AddTree($item.FullName, $true) } catch { Write-Error -Message ($_.Exception.Message.Trim() + ' Try a different media type.') }
            }
        }
    }

    End {
        if ($Boot) { $Image.BootImageOptions = $Boot }
        $Result = $Image.CreateResultImage()
        [ISOFile]::Create($Target.FullName, $Result.ImageStream, $Result.BlockSize, $Result.TotalBlocks)
        Write-Verbose -Message "Target image ($($Target.FullName)) has been created"
        $Target
    }
}
  1. 再执行New-IsoFile命令
New-IsoFile -SourceDir "E:\" -Path "D:\filename.iso" -Title "filename" -Force -Verbose

找不到与参数名称“Path”匹配的参数

New-IsoFile -SourceDir "E:\" -OutDir "D:\" -Title "filename" -Force -Verbose
posted @ 2025-12-10 15:03  明月心~  阅读(4)  评论(0)    收藏  举报