31

Mount-DiskImageコマンドでマウントした ISO があります。ただし、マウントされたディスク イメージのドライブ文字を取得する方法がわかりません。私は試してみ$mountResult = Mount-DiskImage D:\ISOs\clonezilla-live-1.2.12-10-i486.iso -PassThruます。以下に示すように、返される情報はドライブ文字ではありません。

PS C:\Windows\system32> $mountResult | fl *


Attached              : False
BlockSize             : 0
DevicePath            : 
FileSize              : 110100480
ImagePath             : D:\ISOs\clonezilla-live-1.2.12-10-i486.iso
LogicalSectorSize     : 2048
Number                : 
Size                  : 110100480
StorageType           : 1
PSComputerName        : 
CimClass              : ROOT/Microsoft/Windows/Storage:MSFT_DiskImage
CimInstanceProperties : {Attached, BlockSize, DevicePath, FileSize...}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties

PS C:\Windows\system32> $mountResult | select -ExpandProperty CimSystemProperties | fl *


Namespace  : ROOT/Microsoft/Windows/Storage
ServerName : ECHO-BASE
ClassName  : MSFT_DiskImage
Path       : 

後にGet-DiskImage を呼び出しD:\ISOs\clonezilla-live-1.2.12-10-i486.isoても、ドライブ文字は返されません。

ドライブ文字を取得するにはどうすればよいですか?

4

6 に答える 6

62

これを試して:

$mountResult = Mount-DiskImage D:\ISOs\clonezilla-live-1.2.12-10-i486.iso -PassThru
$mountResult | Get-Volume

これにより、ISO が割り当てられているドライブ文字とその他の情報が返されます。そこから出力を解析するだけです。

編集:これはドライブ文字だけを返します:

$driveLetter = ($mountResult | Get-Volume).DriveLetter

于 2013-05-09T02:01:33.010 に答える
3

これが機能することがわかりました

$beforeMount = (Get-Volume).DriveLetter

$mountResult = Mount-DiskImage $imagePath

$setuppath = (compare $beforeMount (Get-Volume).DriveLetter -PassThru) + ":\"
于 2013-12-18T22:26:14.563 に答える
1

それがここに属しているかどうかは完全にはわかりませんが、質問と回答を考慮すると、そうであると言えます。

斜体: コマンド プロンプトからのコピー。

仮定

マウントについて話すときは、通常、DISKPART.EXE がある (仮想) ディスクのマウント、または DISM.EXE (IMAGEX.EXE) がある .WIM や .SWM などのインストール ファイル、またはサード パーティ ソフトウェアについて話します。 'NTLite' のような、または .ISO のような CD および DVD イメージに関するものです。私の知る限り、サードパーティのソフトウェアを使用しない限り、.ISO ファイルは常に読み取り専用でマウントされます。そのため、.ISO ファイルは最も融通の利かないファイルであるため、1 つまたは複数のコピー コマンド (検索コマンド) のソース ファイルへの正確かつ完全なパスを提供するために、その時点で質問が行われたという仮定からこれを書きました。または読み取りコマンド。それらのそれぞれは、マウントされたイメージへのパスであるとは限らず、ソースファイルへの明確に定義されたパスに依存します。

1つの可能な解決策#

c:\windows\system32>powershell.exe mount-diskimage -imagepath
"d:\blah\vlah.iso" -confirm -passthru

Attached           : True
Blocksize          : 0
Devicepath         : \\.\CDROM0 <<== Object of interest, since COPY.EXE
Filesize           : 4586569728           won't recurse and XCOPY.EXE
Imagepath          : "d:\blah\vlah.iso"   won't accept it as a valid 
Logicalsectorsize  : 2048                 path, however ROBOCOPY.EXE
Number             : 0                 will accept it and then it does 
Size               : 4586569728        do what I demand of it, copy the  
Storagetype        : 1                 contents of the  mounted .ISO
Pscomputername     :

xcopy \\.\CDROM0\*.* C:\new /h /i /c /k /e /r /y /f /b
Invalid drive specification
0 File(s) copied

Robocopy \\.\CDROM0 C:\new /E /ZB /COPYALL /256 /R:3 /W:1 /X /V /TS  
/FP /NP /ETA /LOG:w:\ROBO.LOG /TEE /NJH

おそらく、この組み合わせは質問への回答と問題の解決の両方に最も効果的です。なぜなら、POWERSHELL.EXE は 'gui' を開かないからです (したがって、すべてのフィードバック 'stdout' と 'stderr' は、許可されている場合は 1 つに表示されます)。ウィンドウ)、それは私たちに「stdout」を提供するため、ファイルやコマンドに不要なドライブ文字を取得する必要があり、時間の無駄になります. 私が正しければ、「devicepath」は常に同じになりますが、それを確認していないため、それが私のコンピューターだけに当てはまるかどうかはわかりません。

COMMAND PROPMT による POWERSHELL.EXE の使用に関する問題

ただし、1 つの問題は、私のコンピューターにある可能性がありますが、POWERSHELL.EXE コマンドを繰り返したほうがよいでしょう。なぜなら、私と私のバッチ ファイルでは、ほとんどの場合、'Attached : False'が最初の試行の結果であり、両方ともマウントされているためです ( false )、およびイメージの「マウント解除」( true )。これにより、my または your 'Batch-file' の実行で次のようなエラーが発生します。「指定されたパスが見つかりません。」これは、別のコマンドが目的の「マウントポイント」とイメージを参照する瞬間に続きます。

追記 2017 年 2 月 5 日: \.\CDROMX を使用するソリューションは、/256 を追加した場合にのみ機能するように思われることがわかりました。そうしないと、次のメッセージが表示されて失敗する可能性があります。

2017/02/05 01:11:15 ERROR 53 (0x00000035) Accessing Source Directory \.\CDROM0\ ネットワークパスが見つかりませんでした。

メモ帳の長い行の設定に従って、これはすでに私を助けてくれました: 72 は、stackoverflow で醜いレイアウトを作成します。

于 2016-12-13T04:03:47.513 に答える
0

これは私のために働いた:

$beforeMount = (Get-Volume).DriveLetter
$imagePath = 'C:\dsc\en_windows_server_2016_x64_dvd_9718492.iso'
$mountResult = Mount-DiskImage $imagePath
$afterMount = (Get-Volume).DriveLetter
$setuppath = "$(($afterMount -join '').replace(($beforeMount -join ''), '')):\"
于 2017-05-19T14:04:48.667 に答える