使用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命令不存在
- 直接在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
}
}
- 再执行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