윈도우 10, 11에서 VMWARE 강제 재부팅 문제 발생
vmware 사용할때에는 자체 file share 기능을 이용하여 host 폴더를 지정하여 guest vm에서 같은 폴더를 지정하여 사용하였습니다. 그런데 host pc에서 최근들어 강제로 업데이트 되면서 vmware workstation 버전 상관없이 강제 재부팅이 자주 일어나고 있습니다.
이를 해결하기 위해서 xenserver, vmware esxi, 기타 등등 linux 기반에서 vm을 관리하는 방법이 윈도우 10 강제 재부팅을 막을 수 있는 유일한 방법이더군요.
게중에는 윈도우10, 11 업데이트를 막으면 된다는 글들이 많지만 실제로 수도 없이 해보았고 업데이트 안될시 불이익 등등 다 따져보았을때 운영체제를 바꾸는것이 정답이더군요.
결국 ESXi 서버를 도입하게 되었습니다.
그런데 이때 문제가 발생하더군요.
기존에 vmware workstation 에서는 위에서 이미 말씀드린바 공유폴더를 지정할수 있었습니다.
ESXi 와 Xenserver 와 같은 시스템에서는 그러한 부분들이 잘 되어 있지 않아 (제가 모를수도 있고요) 직접 guest vm마다 공유폴더를 만들어서 사용하려합니다.
이렇다보니 윈도우7, 윈도우10 guest vm에서 파일을 강제로 다운받아야 하는데 리눅스처럼 wget 기능이 없어 윈도우 wget 대체 프로그램을 찾다가 파워쉘이 유일한 방법이더군요.
그래서 제가 직접 만들게 된겁니다.
아래 파워쉘 방법은 그냥 참고 하시고요.
매번 배치파일 만들어서 매번 저 명령어를 외울수도 없고…
powershell "(New-Object System.Net.WebClient).DownloadFile('https://vlog.tion.co.kr/app/wget.exe','C:\Windows\System32\wget.exe')"
powershell "(New-Object System.Net.WebClient).DownloadFile('https://URI','Filename.zip')"
윈도우 wget 대체 소스코드 공유
C#으로 만들었으며 소스코드는 그대로 올려놓을테니 저처럼 직접 필요한분들은 C#으로만들어 쓰세요.
wget.exe 소스코드
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
namespace wget
{
internal class Program
{
static void help()
{
Console.WriteLine("wget version: 1.0");
Console.WriteLine("wget: missing URL");
Console.WriteLine("Usage: wget https://vlog.tion.co.kr/app/wget.exe");
Console.WriteLine("");
Console.WriteLine("Try `wget --help` for help");
Console.WriteLine("");
Console.WriteLine("made by 리눅스맨 2023-02-24 vlog.tion.co.kr");
}
static void Main(string[] args)
{
if (args.Length == 0)
{
help();
}
else
{
switch (args.Length)
{
case 1:
if (args[0].Contains("http"))
{
Uri uri = new Uri(args[0]);
string fileName = null;
string[] uriSegments = uri.Segments;
int indexSegment = 0;
foreach (string getFileName in uriSegments)
{
if (++indexSegment == uriSegments.Length)
{
//Console.WriteLine(getFileName);
fileName = WebUtility.UrlDecode(getFileName.Trim());
}
}
string remoteUri = uri.OriginalString;
string myStringWebResource = remoteUri;
// Create a new WebClient instance.
WebClient myWebClient = new WebClient();
// Concatenate the domain with the Web resource filename.
Console.WriteLine("Downloading File \"{0}\" from \"{1}\" .......\n\n", fileName, myStringWebResource);
// Download the Web resource and save it into the current filesystem folder.
myWebClient.DownloadFile(myStringWebResource, fileName);
Console.WriteLine("Successfully Downloaded File \"{0}\" from \"{1}\"", fileName, myStringWebResource);
Console.WriteLine("\nDownloaded file saved");
}
else if (args[0].Equals("--help"))
{
}
else
{
help();
}
break;
}
}
}
}
}
이제 필요한 파일을 웹서버 하나 만들어서 업로드 하고 필요할때마다 wget.exe 파일 이용해서 다운받으면됩니다.
목차