Прежде чем закрыть это, обратите внимание, что это не проблема кода, а проблема среды, привилегий и политики о том, как мы можем включить это во всей среде.
Мы регулярно создаем виртуальные жесткие диски, серверы и клиенты, и по большей части этот сценарий запускается с использованием пакетного файла, указанного ниже, из командной строки администратора с повышенными привилегиями.
Сценарий не является проблемой, поскольку он отлично работает на нескольких машинах с Win 8.1 Pro и Server.
Для компьютеров с Win 8.1 и некоторых серверов, где он не работает.
Я хотел бы выяснить, почему, и применить настройки среды, политики ко всем машинам.
Желательно автоматизированный способ или, если нет выбора, сделать это вручную.
Появляется сообщение об ошибке:
New-VHD: термин «New-VHD» не распознается как имя командлета, функции, файла сценария или работающей программы.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At E:\VHD\VhdCreateFormat\VhdCreateFormat.ps1:4 char:1
+ New-VHD -Path $vhdpath -Dynamic -SizeBytes $vhdsize | Mount-VHD -Passthru | Init ...
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (New-VHD:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Код для справки. По-видимому, этот командлет был добавлен в Win 8.1 / 08 R2 / 12 и далее из того, что я читаю в Интернете.
VHD_CF.ps1
$vhdpath = "E:\VHD\NameItServerClient.vhd"
$vhdsize = 25GB
$vhdVolFsName = "NameItServerClient"
New-VHD -Path $vhdpath -Dynamic -SizeBytes $vhdsize | Mount-VHD -Passthru | Initialize-Disk -PartitionStyle MBR -Passthru |New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -NewFileSystemLabel $vhdVolFsName -FileSystem NTFS -Confirm:$false -Force
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Write-Host "Press any key to continue ...2 "
Function Pause($M="Press any key to continue . . . "){If($psISE){$S=New-Object -ComObject "WScript.Shell";$B=$S.Popup("Click OK to continue.",0,"Script Paused",0);Return};Write-Host -NoNewline $M;$I=16,17,18,20,91,92,93,144,145,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183;While($K.VirtualKeyCode -Eq $Null -Or $I -Contains $K.VirtualKeyCode){$K=$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")};Write-Host}
Write-Host "Press any key to continue ...3"
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Запуск через одноименный командный файл:
VHD_CF.bat
REM So we don’t have to re-write the batch file for every script, or every time we move a script around, it’s going to make use of a self-referencing variable to build the file path for the PowerShell script. To make this work, the batch file will need to be placed in the same folder as your PowerShell script and have the same file name. So if your PowerShell script is called “MyScript.ps1”, you’ll want to name your batch file “MyScript.bat” and make sure it’s in the same folder. Then, put these lines in the batch script:
REM @ECHO OFF
PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs}"
PAUSE
New-Vhd
является частью командлетов Hyper-V PowerShell. Предполагая, что вы вызываете эту команду удаленно на самих серверах, я бы предположил, что на некоторых из ваших серверов эти командлеты не установлены.