Jak odmontować dysk VHD za pomocą wiersza polecenia w systemie Windows 10

9

Muszę odmontować dysk VHD za pomocą skryptu wsadowego w systemie Windows 10. Jedyne rozwiązanie, które znalazłem w Internecie, dotyczyło systemu Windows 7 i dotyczyło programu Diskpart. Czy są dostępne inne natywne narzędzia wiersza polecenia systemu Windows, które mogą wykonać to zadanie?

Zerobinary99
źródło
w cmd może być trudne. Nie znam PowerShell, ale PowerShell robi tak wiele. Np. Wiele linków mówi, że PowerShell może robić, co chcesz, wirtualizationadmin.com/kbase/VirtualizationTips/… i technet.microsoft.com/en-us/library/hh848562(v=wps .630) .aspx
barlop
@barlop Dziękujemy za komentarz i linki. Partia musi być w stanie działać w systemie, w którym Powershell nie jest zainstalowany, więc obawiam się, że to nie jest opcja.
Zerobinary99
czy jest jakiś konkretny powód, dla którego nie chcesz używać diskpart? np. może działać w sposób nieinteraktywny, więc możesz mieć plik wsadowy, który wyśle ​​echo skryptu diskpart do pliku script.txt, a następnie robi diskpart / s script.txt jest
barlop
@barlop Znam rozwiązanie diskpart i obecnie używam go w innym systemie. Ten, na którym ma to działać, nie ma na nim partycji dyskowej.
Zerobinary99
Myślę, że byłoby wystarczająco trudne nawet znalezienie takiego, który to robi. Polecenia natywne są dość dobrze znane, jestem pewien, że nie ma innych, które by to zrobiły oprócz diskpart. To prawie cud, że robi to diskpart. (ponieważ diskpart jest tak „prostym” programem, jak program fdisk, a ludzie zwykle używają go, nie zauważając opcji. Pomysł, że zrobiłoby to inne natywne polecenie, jest prawie nie do pomyślenia. Jeśli możesz umieścić plik wsadowy czy nie można na nim umieścić programu takiego jak diskpart?
barlop,

Odpowiedzi:

6

Ponieważ nie znalazłem sposobu, aby polegać wyłącznie na narzędziach wiersza poleceń zainstalowanych w MS, wymienię rozwiązania innych firm.


WinApiExec

WinApiExec umożliwia użytkownikowi wywoływanie interfejsu API systemu Windows z wiersza polecenia. 32-bitowy plik wykonywalny ma tylko 3,5 KB (x64: 5,5 KB), a zatem jest absurdalnie mały, co powoduje jak najmniejsze obciążenie ogólne.

winapiexec.exe virtdisk.dll@OpenVirtualDisk $a:2,0 "C:\Example Path\Test.vhd" 262144 0 0 $b:4 , virtdisk.dll@DetachVirtualDisk $$:7@0 0 0

vMount

vMount obsługuje wiele funkcji związanych z VHD. Jego rozmiar (x86: 432 KB; x64: 2,53 MB) jest raczej ogromny dla zwykłego wywołania WinApi, więc nie jest to rozwiązanie dla mojego scenariusza, ale może być przydatne dla innych osób.

vmount detach \\.\PhysicalDriveX

DiskPart

Ze względu na kompletność należy również wspomnieć o DiskPart. Obsługuje wiele funkcji związanych z dyskami, ale ma dość powolny sposób, aby zautomatyzować wprowadzanie przez użytkownika danych niezbędnych do tworzenia skryptów. Jest to również jedyne narzędzie na liście, które zostanie uwięzione w pętli, jeśli przypadkowo uruchomisz skrypt bez podniesionych uprawnień.

Zapisz następujące dwa wiersze w pliku tekstowym:

vdisk file="C:\Example Path\Test.vhd"
detach vdisk

Teraz Dism może analizować plik tekstowy jako formę pliku nienadzorowanej odpowiedzi:

DISKPART /s C:\Path_to\Name_Of_Textfile.txt
Zerobinary99
źródło
3

Możesz montować i odmontowywać vhd / vhdx przy użyciu natywnego programu Windows 10 Powershell:

Import-module hyper-v
Dismount-VHD -Path 'c:\my.vhd'

Z cmd / bat:

powershell -command "Import-module hyper-v; Dismount-VHD -Path 'c:\my.vhd'"

W obu przypadkach musisz użyć podwyższonego poziomu (Uruchom jako administrator).

Należy również zauważyć, że najpierw musisz włączyć funkcję Hyper-V .

Anton Krouglov
źródło
Od mojego komentarza do mojego pytania: „Partia musi być w stanie działać w systemie, w którym Powershell nie jest zainstalowany, więc obawiam się, że to nie jest opcja”.
Zerobinary99
O ile mi wiadomo Powershell jest integralną częścią systemu Windows 10 (pytałeś o Windows 10), więc nie możesz go zainstalować ani odinstalować. Jednak jego wykonanie może być zablokowane na różne sposoby, takie jak zasady grupy.
Anton Krouglov
Dlaczego kwestionujesz warunki? Jest ich powód. Korzystam z systemu Windows Lite bez programu PowerShell i niechętnie utrzymuję całą platformę, której nie potrzebuję, jeśli jest dostępnych więcej lekkich opcji
Zerobinary99
1
Mam podobny problem. Logowanie przyniosło twoje stare pytanie. Tak więc ta odpowiedź może być przydatna także dla innych osób.
Anton Krouglov,
Ponieważ to pytanie ma ponad dwa lata, a tytuł jest niejasny w odniesieniu do twoich wymagań, ta odpowiedź pomaga wielu innym osobom, podobnie jak moja rozszerzona odpowiedź. Powinieneś przeczytać więcej Meta wymiany stosów, aby dowiedzieć się więcej o tym, jak działa ta strona i jej zasady. Tego rodzaju odpowiedzi są bardzo przydatne dla społeczności @ Zerobinary99
FreeSoftwareServers
1

To jest rozszerzona odpowiedź: (Powinieneś być w stanie dowiedzieć się, jak umountować VHD)

Jak automatycznie montować i podłączać pliki VHD podczas uruchamiania / zamykania systemu.

Wygląda na to, że nieco się zmieniło w Windows 10.

Po pierwsze, powinienem powiedzieć, że podłączam dysk VHD przechowywany na serwerze plików Linux, podłączając się przez SMB.

Po drugie, bardzo ważne jest to, że jeśli nie odłączysz dysku przy ponownym uruchomieniu, wtedy, gdy spróbujesz go ponownie podłączyć, mówi „Plik jest w użyciu i nie można uzyskać do niego dostępu” ..

Potrzebujemy więc zarówno automount, jak i odmontowania. Odmontowanie okazało się nieco trudniejsze, ponieważ nie mogę po prostu umieścić go w folderze startowym. Musisz użyć zasad grupy. Ponadto, gdy został uruchomiony jako skrypt „zamykania / uruchamiania”, działał zbyt wcześnie, należy go uruchomić przy „Logon / Logoff”

Mam 4 pliki w C:\mount

mount.cmd

@ECHO OFF

DISKPART /s C:\mount\mount.txt

umount.cmd

@ECHO OFF

DISKPART /s C:\mount\umount.txt

umount.txt

select vdisk file="\\192.168.1.255\Blizzard.vhdx"
detach vdisk

mount.txt

select vdisk file="\\192.168.1.255\Blizzard.vhdx"
attach vdisk

Teraz w Start wpisz / uruchom gpedit.msci dodaj skrypty do logowania / wylogowania

wprowadź opis zdjęcia tutaj

FreeSoftwareServers
źródło
Dzięki za odpowiedź, ale to nie jest rozwiązanie problemu. Oprócz korzystania z Diskpart szukałem rozwiązania kompatybilnego z partiami. Zasadniczo właśnie wkleiłeś tę samą składnię, która jest już w mojej odpowiedzi.
Zerobinary99
Oprócz korzystania z wbudowanej funkcji systemu Windows bez użycia narzędzi innych firm? Wydaje się oksymoronowy.
FreeSoftwareServers
Pytałem o inne natywne funkcje Windows. Nie ma w tym nic oksymoronicznego. Wydaje mi się, że masz ogólne problemy ze zrozumieniem.
Zerobinary99