Script de configuration Hyper-V Server in depth : hvconfig
Encore plus fort que Windows Server Core Configurator (cf. https://blogs.technet.com/longhorn/archive/2008/10/09/outil-de-configuration-pour-windows-server-2008-core.aspx) voici le script de configuration disponible dans Microsoft Hyper-V Server 2008.
Fabrice a trouvé la config et surtout récupéré le script sur sa machine Microsoft Hyper-V Server 2008. Good Job ;-)
La documentation https://www.microsoft.com/downloads/details.aspx?FamilyId=E1E111C9-FA69-4B4D-8963-1DD87804C04F&displaylang=en
Voici le script il est dans "%windir%system32en-UShvconfig.vbs" (de là à le réutiliser pour les installations core...)
'-------------------------------------------
' Copyright (c) Microsoft Corporation. All rights reserved.
'
' Version 1.0
' hvconfig.vbs - Configuration script used to setup a Hyper-V machine for remote configuration
'
'
'-------------------------------------------
const L_Msg001_Text = "No IP address"
const L_Msg002_Text = " No IP "
const L_Msg003_Text = "No active network adapters found."
const L_Msg004_Text = "Warning"
const L_Msg005_Text = " Hyper-V Configuration"
const L_Msg006_Text = "1) Domain/Workgroup: "
const L_Msg007_Text = "2) Computer Name: "
const L_Msg008_Text = "3) Network Settings"
const L_Msg009_Text = "4) Add Local Administrator"
const L_Msg010_Text = "5) Windows Update Settings: "
const L_Msg011_Text = "6) Download and Install Updates: "
const L_Msg012_Text = "7) Remote Desktop: "
const L_Msg013_Text = "8) Regional and Language Options"
const L_Msg014_Text = "9) Date and Time"
const L_Msg015_Text = "10) Log Off User"
const L_Msg016_Text = "11) Restart Server"
const L_Msg017_Text = "12) Shut Down Server"
const L_Msg018_Text = "13) Exit to Command Line"
const L_Msg019_Text = "Enter number to select an option: "
const L_Msg020_Text = "Change Domain/Workgroup Membership"
const L_Msg021_Text = "Join (D)omain or (W)orkgroup? (Blank=Cancel) "
const L_Msg022_Text = "Domain"
const L_Msg023_Text = "Workgroup"
const L_Msg024_Text = "Machine currently joined to a domain."
const L_Msg025_Text = "Do you want to remove this computer from the current domain now?"
const L_Msg026_Text = "Specify an authorized domainuser: "
const L_Msg027_Text = "Removing computer from current domain..."
const L_Msg028_Text = "You must restart your computer to apply these changes."
const L_Msg029_Text = "Restart now?"
const L_Msg030_Text = "Restart"
const L_Msg031_Text = "Specify domainuser: "
const L_Msg032_Text = "Join Domain"
const L_Msg033_Text = "Enter new computer name (Blank=Cancel): "
const L_Msg034_Text = "Computer Name"
const L_Msg035_Text = "Changing Computer name..."
const L_Msg036_Text = "Enter account to join local Administrators group (Blank=Cancel): "
const L_Msg037_Text = "Adding to local Administrators group..."
const L_Msg038_Text = "Local Administrators Group"
const L_Msg039_Text = "User added to local Administrators group."
const L_Msg040_Text = "User not found."
const L_Msg041_Text = "User already in local Administrators group."
const L_Msg042_Text = "Failed to add user to local Administrators group."
const L_Msg043_Text = "Windows Update currently set to: "
const L_Msg044_Text = "Select (A)utomatic or (M)anual updates: "
const L_Msg045_Text = "Automatic"
const L_Msg046_Text = "System will check for and install updates every day at 3:00 AM."
const L_Msg047_Text = "Enabling Automatic updates..."
const L_Msg048_Text = "Manual"
const L_Msg049_Text = "System will never check for updates."
const L_Msg050_Text = "Disabling Automatic updates..."
const L_Msg051_Text = "Windows Update set to "
const L_Msg052_Text = "Update Settings"
const L_Msg053_Text = "(E)nable or (D)isable Remote Desktop? (Blank=Cancel) "
const L_Msg054_Text = "1) Allow only clients running Remote Desktop with Network Level Authentication (more secure)"
const L_Msg055_Text = "2) Allow clients running any version of Remote Desktop (less secure)"
const L_Msg056_Text = "Enter selection: "
const L_Msg057_Text = "Enabling Remote Desktop..."
const L_Msg058_Text = "Remote Desktop enabled for clients running any version of Remote Desktop (less secure)."
const L_Msg059_Text = "Remote Desktop"
const L_Msg060_Text = "Remote Desktop enabled for clients only running Remote Desktop with Network Level Authentication (more secure)."
const L_Msg061_Text = "Failed to disable Remote Desktop."
const L_Msg062_Text = "Disabling Remote Desktop..."
const L_Msg063_Text = "Remote Desktop disabled."
const L_Msg064_Text = "Are you sure you want to log off?"
const L_Msg065_Text = "Log Off"
const L_Msg066_Text = "Are you sure you want to restart?"
const L_Msg067_Text = "Are you sure you want to shut down?"
const L_Msg068_Text = "Shut Down"
const L_Msg069_Text = "Enabled (all clients)"
const L_Msg070_Text = "Enabled (more secure clients only)"
const L_Msg071_Text = "Disabled"
const L_Msg072_Text = "--------------------------------"
const L_Msg073_Text = " Network settings"
const L_Msg074_Text = "Available Network Adapters"
const L_Msg075_Text = "Index# IP address Description"
const L_Msg076_Text = "Select Network Adapter Index# (Blank=Cancel): "
const L_Msg077_Text = " Network Adapter Settings"
const L_Msg078_Text = "NIC Index"
const L_Msg079_Text = "Description"
const L_Msg080_Text = "IP Address"
const L_Msg081_Text = "DHCP enabled"
const L_Msg082_Text = "Preferred DNS Server"
const L_Msg083_Text = "Alternate DNS Server"
const L_Msg084_Text = "1) Set Network Adapter IP Address"
const L_Msg085_Text = "2) Set DNS Servers"
const L_Msg086_Text = "3) Clear DNS Server Settings"
const L_Msg087_Text = "4) Return to Main Menu"
const L_Msg088_Text = "Select option: "
const L_Msg089_Text = "Select (D)HCP, (S)tatic IP (Blank=Cancel): "
const L_Msg090_Text = "Set Static IP"
const L_Msg091_Text = "Enter static IP address: "
const L_Msg092_Text = "Enter subnet mask (Blank = Default "
const L_Msg093_Text = "): "
const L_Msg094_Text = "Enter default gateway: "
const L_Msg095_Text = "Setting NIC to static IP..."
const L_Msg096_Text = "The IP address could not be changed."
const L_Msg097_Text = "Network Settings"
const L_Msg098_Text = "Setting NIC to use DHCP..."
const L_Msg099_Text = "DNS Servers"
const L_Msg100_Text = "Enter new preferred DNS server (Blank=Cancel): "
const L_Msg101_Text = "Preferred DNS server set."
const L_Msg102_Text = "Enter alternate DNS server (Blank = none): "
const L_Msg103_Text = "Alternate DNS server set."
const L_Msg104_Text = "Alternate DNS server could not be set."
const L_Msg105_Text = "Preferred DNS server could not be set."
const L_Msg106_Text = "DNS servers removed. DNS servers will be automatically obtained from network."
const L_Msg107_Text = "DNS servers could not be deleted."
const L_Msg108_Text = "Failed to join workgroup"
const L_Msg109_Text = "Welcome to workgroup: "
const L_Msg110_Text = "Unknown"
const L_Msg111_Text = "Inspecting system..."
const L_Msg112_Text = "Please specify a valid IP address."
const L_Msg113_Text = "IP addresses with 127 are not valid because they are reserved for loopback addresses. Please specify some other valid value between 1 and 223."
const L_Msg114_Text = "Access is denied."
const L_Msg115_Text = "The parameter is incorrect."
const L_Msg116_Text = "The system cannot open the specified object."
const L_Msg117_Text = "Unable to update the password."
const L_Msg118_Text = "Logon failure: unknown username or password."
const L_Msg119_Text = "The specified domain either does not exist or could not be contacted."
const L_Msg120_Text = "The account already exists."
const L_Msg121_Text = "The machine is already joined to the domain."
const L_Msg122_Text = "The machine is not currently joined to a domain."
const L_Msg123_Text = "Failed to join domain."
const L_Msg124_Text = "Name of domain to join: "
const L_Msg125_Text = "Name of workgroup to join: "
const L_Msg126_Text = "Joining "
const L_Msg127_Text = "..."
const L_Msg128_Text = "==============================================================================="
const L_Msg129_Text = "E" '(E)nable
const L_Msg130_Text = "D" '(D)isable
const L_Msg131_Text = "S" '(S)tatic IP
const L_Msg132_Text = "D" '(D)HCP
const L_Msg133_Text = "W" '(W)orkgroup
const L_Msg134_Text = "D" '(D)omain
const L_Msg135_Text = "In a domain environment, specify domainusername."
const L_Msg136_Text = "In a workgroup environment, specify username."
const L_Msg137_Text = "M" 'Manual
const L_Msg138_Text = "A" 'Automatic
const L_Msg139_Text = "Subnet Mask"
const L_Msg140_Text = "Default Gateway"
const L_Msg141_Text = "Last manual check: "
const WUA_Script = "cscript WUA_SearchDownloadInstall.vbs"
Dim CmdResults
Dim pcname
Dim group_type
Dim groupname
Dim InDomain
Dim MgmtNIC
Dim patching_status
Dim Autopatch
Dim Update_schedule
Dim objNetAdapter
Dim DNSsetting
Dim DisplayIP
Dim objWshScriptExec
Dim TS_status
Dim ResultsTitle
Set oShell = WScript.CreateObject ("WScript.shell")
Set objWMIService = GetObject( "winmgmts:\.rootcimv2")
'Force to run with cscript
if Instr(1,Wscript.FullName,"Cscript",vbTextCompare)=0 then
oShell.Run "cscript " & chr(34) & wscript.ScriptFullName & chr(34)
wscript.quit
end if
GetInitialStatusValues()
Do
' Get NICs
Set nics = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration where IPenabled=TRUE")
' Try to select the first NIC with an active IP
for each n in nics
MgmtNIC= n.index
Set objNetAdapter = GetObject("winmgmts:Win32_NetworkAdapterConfiguration=" & MgmtNIC)
exit for
next
' Deal with case where NICs go away
if MgmtNIC="" then
'No active NIC
DisplayIP = L_Msg003_Text
else
Set objNetAdapter = GetObject("winmgmts:Win32_NetworkAdapterConfiguration=" & MgmtNIC)
if objNetAdapter.IPenabled then
DisplayIP = objNetAdapter.IPAddress(0)
else
'No Active NICs
DisplayIP = L_Msg003_Text
end if
end if
' Get Domain status
InDomain = GetDomainStatus()
' Get Remote Desktop status
CheckRemoteDesktop()
wscript.echo
wscript.echo L_Msg128_Text
wscript.echo L_Msg005_Text
wscript.echo L_Msg128_Text
wscript.echo
wscript.echo L_Msg006_Text & group_type &": " & groupname
wscript.echo L_Msg007_Text & pcname
if MgmtNIC="" then
wscript.echo L_Msg008_Text & vbTab & vbTab & vbTab & DisplayIP
else
wscript.echo L_Msg008_Text
end if
wscript.echo L_Msg009_Text
wscript.echo ""
wscript.echo L_Msg010_Text & Update_schedule
wscript.echo L_Msg011_Text & L_Msg141_Text & patching_status
wscript.echo L_Msg012_Text & TS_status
wscript.echo ""
wscript.echo L_Msg013_Text
wscript.echo L_Msg014_Text
wscript.echo ""
wscript.echo L_Msg015_Text
wscript.echo L_Msg016_Text
wscript.echo L_Msg017_Text
wscript.echo ""
wscript.echo L_Msg018_Text
For i=1 to 2
wscript.echo
next
wscript.StdOut.Write L_Msg019_Text
OptionSelection = Wscript.StdIn.ReadLine
wscript.echo
Select Case OptionSelection
Case "1" 'Change Domain/workgroup name
wscript.echo
wscript.echo L_Msg020_Text
do
wscript.echo
wscript.StdOut.Write L_Msg021_Text
DorW = Wscript.StdIn.ReadLine
'added ascw(DorW)=164 and ascw(DorW)=1072 to detect Russian character choice
loop until ucase(DorW)=ucase(L_Msg134_Text) or ucase(DorW)=ucase(L_Msg133_Text) or DorW="" or ascw(DorW)=164 or ascw(DorW)=1072
if ucase(DorW)=ucase(L_Msg133_Text) or ascw(DorW)=1072 then
'Join Workgroup
'If in a domain, we need to remove it first before joining a workgroup
if InDomain then
confirm = msgbox(L_Msg024_Text & vbCRLF & L_Msg025_Text,VBYesNo,L_Msg004_Text)
if confirm=vbYes then
wscript.StdOut.Write L_Msg026_Text
domainuser = Wscript.StdIn.ReadLine
wscript.echo
wscript.echo L_Msg027_Text
targetstr = "netdom remove %computername% /domain:" & NewGroupName & " /userd:" & domainuser & " /passwordd:*"
result= oShell.Run(targetstr,1,TRUE)
if result=0 then
confirm = msgbox(L_Msg028_Text & vbCRLF & L_Msg029_Text, VBYesNo,L_Msg030_Text)
if confirm=vbYes then oShell.Run "shutdown /r /t 0",1
else
DomainAccessErrorMsg(result)
end if
end if
else
JoinWorkgroup()
end if
end if
if ucase(DorW)=ucase(L_Msg134_Text) or ascw(DorW)=164 then
'Joining Domain
group_type= L_Msg022_Text
wscript.StdOut.Write L_Msg124_Text
NewGroupName = Wscript.StdIn.ReadLine
wscript.StdOut.Write L_Msg026_Text
domainuser = Wscript.StdIn.ReadLine
wscript.echo
wscript.echo L_Msg126_Text & NewGroupName & L_Msg127_Text
targetstr = "netdom join %computername% /domain:" & NewGroupName & " /userd:" & domainuser & " /passwordd:*"
result= oShell.Run(targetstr,1,TRUE)
if result=0 then
confirm = msgbox(L_Msg028_Text & vbCRLF & L_Msg029_Text, VBYesNo,L_Msg032_Text)
if confirm=vbYes then oShell.Run "shutdown /r /t 0",1
else
DomainAccessErrorMsg(result)
end if
end if
Case "2" 'Change Computer Name
wscript.StdOut.Write L_Msg033_Text
NewComputerName = Wscript.StdIn.ReadLine
if NewComputerName<>"" then
ResultsTitle= L_Msg034_Text
wscript.echo L_Msg035_Text
wscript.echo
if not InDomain then
'In workgroup
Set objWshScriptExec = oShell.Exec("netdom renamecomputer %computername% /force /NewName:" & NewComputerName)
DisplayCmdLineOutput()
result= objWshScriptExec.exitcode
else
'In Domain
wscript.StdOut.Write L_Msg026_Text
domainuser = Wscript.StdIn.ReadLine
result = oShell.Run("netdom renamecomputer %computername% /force /NewName:" & NewComputerName & " /userd:" & domainuser & " /passwordd:*",1,TRUE)
if result<>0 then
DomainAccessErrorMsg(result)
end if
end if
if result=0 then
confirm = msgbox(L_Msg028_Text & vbCRLF & L_Msg029_Text, VBYesNo,L_Msg030_Text)
if confirm=vbYes then oShell.Run "shutdown /r /t 0",1
end if
end if
Case "3" 'Change Management NIC Assignment
If MgmtNIC<>"" then
ManagementNICsettings()
else
'Display no active NIC message
DisplayIP = L_Msg003_Text
Msgbox DisplayIP,vbExclamation,L_Msg004_Text
end if
Case "4" 'Add Account to local admin
wscript.echo L_Msg135_Text
wscript.echo L_Msg136_Text
wscript.echo
wscript.StdOut.Write L_Msg036_Text
AddUserAcct = Wscript.StdIn.ReadLine
if AddUserAcct="" then
'cancel
else
if not InDomain then
'Handle workgroup case by creating account first
targetstr = "net user " & AddUserAcct & " * /add"
result= oShell.Run(targetstr,1,TRUE)
end if
wscript.echo L_Msg037_Text
targetstr= "net localgroup administrators /add " & AddUserAcct
result= oShell.Run(targetstr,7,TRUE)
select case result
Case 0
msgbox L_Msg039_Text & vbCrLf & AddUserAcct,vbInformation,L_Msg038_Text
Case 1
msgbox L_Msg040_Text & vbCrLf & AddUserAcct,vbCritical,L_Msg038_Text
Case else
msgbox L_Msg042_Text & vbCrLf & AddUserAcct,vbCritical,L_Msg038_Text
end select
end if
Case "5" 'Update Settings
wscript.echo L_Msg043_Text & Update_schedule
wscript.StdOut.Write L_Msg044_Text
updateselection = Wscript.StdIn.ReadLine
if ucase(updateselection)=ucase(L_Msg138_Text) then
'Make updates automatic
Update_schedule= L_Msg045_Text
strSchedule= L_Msg046_Text
wscript.echo
wscript.echo L_Msg047_Text
oShell.Run "Cscript %WinDir%System32SCregEdit.wsf /AU 4" & NewComputerName,7,TRUE
end if
if ucase(updateselection)=ucase(L_Msg137_Text) then
'Make updates manual
Update_schedule= L_Msg048_Text
strSchedule= L_Msg049_Text
wscript.echo
wscript.echo L_Msg050_Text
oShell.Run "Cscript %WinDir%System32SCregEdit.wsf /AU 1" & NewComputerName,7,TRUE
end if
if ucase(updateselection)=ucase(L_Msg137_Text) or ucase(updateselection)=ucase(L_Msg138_Text) then
oShell.Run "Net stop wuauserv",7,TRUE
oShell.Run "Net start wuauserv",7,TRUE
MsgBox L_Msg051_Text & Update_schedule & ". " & strSchedule, vbInformation, L_Msg052_Text
end if
Case "6" 'Install Security Patches
'Install all patches
oShell.Run WUA_Script,1,False
on error resume next
patching_status = Now()
oShell.RegWrite "HKLMSoftwareMicrosoftHyperVServerQuickSettingsPatchDate",patching_status
on error goto 0
Case "7" 'Enable/disable Remote Desktop
WScript.Echo
wscript.StdOut.Write L_Msg053_Text
rd = Wscript.StdIn.ReadLine
if ucase(rd)=ucase(L_Msg129_Text) then ' Enable
do
wscript.echo
wscript.echo L_Msg054_Text
wscript.echo
wscript.echo L_Msg055_Text
wscript.echo
wscript.StdOut.Write L_Msg056_Text
rdsecuritylevel = Wscript.StdIn.ReadLine
loop while not (rdsecuritylevel="1" or rdsecuritylevel="2")
wscript.echo
wscript.echo L_Msg057_Text
'Enable Remote Desktop Admin mode
result=oShell.Run("Cscript %WinDir%System32Scregedit.wsf /ar 0 " & NewComputerName,7,TRUE)
oShell.Run "Cscript %WinDir%System32Scregedit.wsf /cs 1 " & NewComputerName,7,TRUE
if result=0 then
if rdsecuritylevel=2 then
'Allow WinXP and Win 2003 clients
oShell.Run "Cscript %WinDir%System32Scregedit.wsf /cs 0 " & NewComputerName,7,TRUE
msgbox L_Msg058_Text,Information,L_Msg059_Text
else
msgbox L_Msg060_Text,Information,L_Msg059_Text
end if
else
msgbox L_Msg061_Text,vbCritical,L_Msg059_Text
end if
end if
if ucase(rd)=ucase(L_Msg130_Text) then
wscript.echo
wscript.echo L_Msg062_Text
'Disable Remote Desktop mode
result=oShell.Run("Cscript %WinDir%System32Scregedit.wsf /ar 1 " & NewComputerName,7,TRUE)
oShell.Run "Cscript %WinDir%System32Scregedit.wsf /cs 1 " & NewComputerName,7,TRUE
if result=0 then
msgbox L_Msg063_Text,vbInformation,L_Msg059_Text
else
msgbox L_Msg061_Text,vbCritical,L_Msg059_Text
end if
end if
Case "8" 'Set Region and Language
oShell.Run "control intl.cpl"
Case "9" 'Set Date and Time
oShell.Run "control timedate.cpl"
Case "10" 'Logoff
confirm = msgbox(L_Msg064_Text, vbYesNo+vbDefaultButton2,L_Msg065_Text)
if confirm=vbYes then
oShell.Run "logoff",7,True
end if
Case "11" ' Restart
confirm = msgbox(L_Msg066_Text, vbYesNo+vbDefaultButton2,L_Msg030_Text)
if confirm=vbYes then oShell.Run "shutdown /r /t 0",1
Case "12" ' Shut Down
confirm = msgbox(L_Msg067_Text, vbYesNo+vbDefaultButton2,L_Msg068_Text)
if confirm=vbYes then oShell.Run "shutdown /s /t 0",1
Case "13" 'Exit
wscript.quit
Case Else
'msgbox "--- Invalid input! ---"
end Select
Loop until OptionSelection="13" 'Loops back to main menu unless exiting
wscript.quit
sub CheckRemoteDesktop()
' True if Remote Desktop enabled
Dim Sh, sKey, sValueName, sValue, nValue
Set Sh = CreateObject("WScript.Shell")
sKey = "HKLMSYSTEMCurrentControlSetControlTerminal Server"
sValueName = "fDenyTSConnections"
sValue = Sh.RegRead(SKey & sValueName)
if sValue=0 then
nValue= Sh.RegRead(sKey & "WinStationsRDP-TcpUserAuthentication")
if nValue = 0 then
TS_status= L_Msg069_Text
else
TS_status= L_Msg070_Text
end if
else
TS_status= L_Msg071_Text
end if
End sub
Function LegalNicSelected(pickedNIC)
LegalNicSelected=False
For Each nic in nics
if pickedNIC=CStr(nic.Index) then
LegalNicSelected=True
end if
Next
end Function
Sub ManagementNICsettings()
Set nics = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration where IPenabled=TRUE")
Set objNetAdapter = GetObject("winmgmts:Win32_NetworkAdapterConfiguration=" & MgmtNIC)
wscript.echo
wscript.echo L_Msg072_Text
wscript.echo L_Msg073_Text
wscript.echo L_Msg072_Text
wscript.echo
wscript.echo
wscript.echo L_Msg074_Text
wscript.echo
wscript.echo L_Msg075_Text
For Each nic in nics
if nic.IPenabled then
DisplayIP = nic.IPAddress(0)
else
DisplayIP=L_Msg002_Text
end if
wscript.echo
'Adjust spacing for non EN-US
if instr(L_Msg075_Text,"Index#") then
wscript.StdOut.Write " " & nic.Index & VBTab & DisplayIP & VBTab & left(nic.Description,54)
else
wscript.StdOut.Write " " & nic.Index & VBTab & VBTab & DisplayIP & VBTab & left(nic.Description,47)
end if
Next
wscript.Echo
do
wscript.Echo
wscript.StdOut.Write L_Msg076_Text
SelectedNIC = Wscript.StdIn.ReadLine
loop until LegalNicSelected(SelectedNIC) or SelectedNIC = ""
if SelectedNIC="" then
'Do nothing, Cancel was selected, return to main menu
else
'Set the MgmtNIC to a legal value
MgmtNIC=SelectedNIC
do
wscript.echo
wscript.echo L_Msg072_Text
wscript.echo L_Msg077_Text
wscript.echo L_Msg072_Text
wscript.echo
Set nics = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration where IPenabled=TRUE")
Set objNetAdapter = GetObject("winmgmts:Win32_NetworkAdapterConfiguration=" & MgmtNIC)
'Display NIC info (IP, DHCP, DNS)
For Each nic in nics
if nic.index=cint(MgmtNIC) then
if nic.IPenabled then
DisplayIP = nic.IPAddres