пятница, 29 ноября 2013 г.

Включение функций копирования и вставки текста через буфер обмена при работе с консолью VMware vSphere Client

По умолчанию данный функционал отключен в целях безопасности, но его можно задействовать несколькими способами:

1. Включение на уровне ESXi хоста:
Через консоль или SSH добавляем следующие строки в конец файла "/etc/vmware/config":

isolation.tools.copy.disable="FALSE"
isolation.tools.paste.disable="FALSE"

2. Включение на уровне виртуальной машины:
Заходим в свойства выбранной виртуалки, переходим во вкладку "Options", затем в "Advanced","General". Нажимаем "Configuration Parameters..." и вносим два параметра: "isolation.tools.copy.disable" и "isolation.tools.paste.disable" со значением "false".

 
Использовать можно любой из вариантов. Все зависит от политики безопасности вашей организации. В первом случае буфер заработает на всех виртуалках настраиваемого гипервизора, во втором - на конкретной машине. Чтобы изменения вступили в силу, необходимо выключить и включить виртуалку или выполнить vMotion. Стоит отметить, что буфер будет работать только для текстовой информации, но не для файлов, изображений и т.п. Более подробно о проблеме и решении можно прочитать в VMware Knowledge Base.

Если вы администрируете виртуальную среду большого объема, применить настройки вам поможет скрипт PowerCLI:


$NewExtraOptions = @{
   "isolation.tools.copy.disable"="false";
   "isolation.tools.paste.disable"="false";
}
$VMConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec 
foreach ($Option in $NewExtraOptions.GetEnumerator())
{
   $OptionValue = New-Object VMware.Vim.OptionValue
   $OptionValue.Key = $Option.Key
   $OptionValue.Value = $Option.Value
   $VMConfigSpec.ExtraConfig += $OptionValue
}
$VMs = Get-View -ViewType VirtualMachine -Property Name -Filter @{"Config.Template"="false"} | where {$_.name -like "*"}
foreach($VM in $VMs)
{
   $VM.ReconfigVM_Task($VMConfigSpec)
}


В строке с элементом "where {$_.name -like "*"}" вместо звёздочки задаётся фильтр по имени виртуальных компьютеров, согласно которому будут применяться параметры.
Данный скрипт можно без опасений выполнять повторно по планировщику, чтобы настраивать недавно созданные машины в виртуальных центрах.

Проблемы отсутствия в консоли WSUS клонированных или установленных из образа Windows XP/2003 систем

Данная проблема происходит из-за того, что при выполнении sysprep ОС Windows старших поколений (до Vista/2008) значение SusClientId не удаляется. Соответственно ID не может быть сгенерирован заново из уже обновленного SID, что приводит к дублированию идентификаторов и некорректной работе ОС с сервером WSUS.

Для решения проблемы следует использовать данный cmd-скрипт:


net stop wuauserv
rd /S /Q %WinDir%\SoftwareDistribution
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v LastWaitTimeout /f
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v DetectionStartTime /f
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v NextDetectionTime /f
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v PingID /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v AccountDomainSid /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientIDValidation /f
net start wuauserv
wuauclt /resetauthorization /detectnow


Чтобы в дальнейшем исключить проблему дублирования SusClientId, создаём текстовый файл Sysprep.inf в каталоге с Sysprep.exe (команды будут выполняться при распаковке образа) следующего содержания:


[GuiRunOnce]
Command0="reg.exe delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v PingID /f"
Command1="reg.exe delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v AccountDomainSid /f"
Command2="reg.exe delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientId /f"
Command3="reg.exe delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientIDValidation /f"


Для поиска и исправления проблемных компьютеров в домене можно использовать следующий скрипт:


@echo off
setlocal ENABLEEXTENSIONS
set KEY_NAME=HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate
set VALUE_NAME=SusClientId
for /F "usebackq tokens=3" %%A IN (`reg query "%KEY_NAME%" /v "%VALUE_NAME%" 2^>nul ^| find "%VALUE_NAME%"`) do (
if not "%%A"=="30dd6c6d-b444-4b98-802b-0d35a28bca51" (
if not "%%A"=="30dd6c6d-b444-4b98-802b-0d35a28bca52" (
if not "%%A"=="30dd6c6d-b444-4b98-802b-0d35a28bca53" (
if not "%%A"=="30dd6c6d-b444-4b98-802b-0d35a28bca54" (
if not "%%A"=="30dd6c6d-b444-4b98-802b-0d35a28bca55" (
if not "%%A"=="30dd6c6d-b444-4b98-802b-0d35a28bca56" (
exit
))))))
net stop wuauserv
rd /S /Q %WinDir%\SoftwareDistribution
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v LastWaitTimeout /f
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v DetectionStartTime /f
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v NextDetectionTime /f
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v PingID /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v AccountDomainSid /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientIDValidation /f
net start wuauserv
wuauclt /resetauthorization /detectnow
)


В нём необходимо перечислить ваши дублирующиеся SusClientId и установить на выполнение в автозагрузку групповыми политиками домена.

среда, 27 ноября 2013 г.

Проблема при запуске виртуальной машины на последней версии VMware Workstation: This virtual machine's policies are too old to be run by this version of VMware Workstation

При открытии в обновленной версии VMware Workstation старых виртуальных машин может возникнуть следующая ошибка:


Для решения данной проблемы достаточно отредактировать .vmx файл виртуалки.
Удалите строки:

policy.vm.mvmtid = "52 b5 eb 58 4c 32 cd ec-fb 5f 46 a1 ab 8a 17 78"
policy.vm.managedVMTemplate = "TRUE"
policy.vm.managedVM = "FALSE"


Затем найдите в той же папке файл с расширением .vmpl и переименуйте его в .vmpl.bak.
Более подробно о проблеме можно узнать из Knowledge Base.

среда, 20 ноября 2013 г.

Сброс счётчика rearm на ОС Windows Vista/7/2008/2008R2

Продолжительность работы Windows Vista и выше без активации составляет 30 суток. Если данного периода не хватает, командой "slmgr.vbs /rearm" можно до 4 раз сбросить счётчик и таким образом получить около 120 суток времени работы. Счётчик уменьшается и в случае выполнения sysprep-а системы.
При острой необходимости продления триального периода, количество попыток сброса можно увеличить до первоначального значения без переустановки ОС. Для этого:

1. Создаем в корне системного диска текстовый файл, называем его "delwpa.bat".
2. Открываем файл на редактирование и заносим туда следующие строки:

reg load HKLM\MY_SYSTEM "%~dp0Windows\System32\config\system"
reg delete HKLM\MY_SYSTEM\WPA /f
reg unload HKLM\MY_SYSTEM


3. Сохраняемся и перегружаемся в режиме устранения неполадок компьютера. В данный режим можно зайти, нажав сразу после BIOS клавишу "F8".


Если у вас пункт "Устранение неполадок компьютера" отсутствует, загрузитесь с инсталляционного диска и выберите режим восстановления.
4. Далее понадобится  выбрать раскладку клавиатуры и ввести данные локального администратора для доступа к системе.

 
5. Когда окажемся в командной строке, переключаемся на системный диск с установленной Windows (для Vista/2008 это будет C:, для 7/2008R2 - D:) и выполняем наш скрипт: "delwpa.bat".


6. После успешного отрабатывания bat-ника загружаемся в обычном режиме и используем "slmgr.vbs /rearm".
По завершению финальной перезагрузки можно проверить информацию о лицензии и состояние счётчика rearm командой "slmgr.vbs /dlv".

вторник, 19 ноября 2013 г.

Использование логических операций И ИЛИ (AND OR) в скриптах командного процессора CMD

При написании bat-ников часто появляется необходимость использовать логические операции И и ИЛИ в условиях IF и т.д. К сожалению, разработчики не заложили такой синтаксис в командный процессор. Но данный функционал можно успешно заменить следующими наборами команд:

1. Логическое И (AND):

IF a&&b&&c


@echo off
set a="1"
set b="1"
set c="0"
echo %a%
echo %b%
echo %c%
if %a%=="1" (
if %b%=="1" (
if %c%=="1" (
echo "TRUE a&&b&&c"
goto END
)))
echo "FALSE a&&b&&c"
:END
pause


2. Логическое ИЛИ (OR):

IF a||b||c


@echo off
set a="0"
set b="0"
set c="1"
echo %a%
echo %b%
echo %c%
if not %a%=="1" (
if not %b%=="1" (
if not %c%=="1" (
echo "FALSE a||b||c"
goto END
)))
echo "TRUE a||b||c"
:END
pause


В зависимости от заданных в начале значений переменных "a","b" и "c" вы будете попадать в блоки "TRUE" или "FALSE" в соответствии с выполнением той или иной логической операции.

пятница, 15 ноября 2013 г.

SYSPREP прекращает свою работу с неустранимой ошибкой на ОС Windows Vista/2008 и выше

Если вы подготовили образ операционной системы, запустили sysprep и получили данное окно с ошибкой, действуйте следующим образом:


Проверьте лог-файл setuperr.log, который находится в папке "%windir%\System32\sysprep\Panther". В случае обнаружения похожих строк,

[0x0f0073] SYSPRP RunExternalDlls:Not running DLLs; either the machine is in an invalid state or we couldn't update the recorded state, dwRet = 31
[0x0f00ae] SYSPRP WinMain:Hit failure while processing sysprep cleanup external providers; hr = 0x8007001f

откройте реестр и проверьте следующие параметры ключа "HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus\":

CleanupState должен быть равен 2,
GeneralizationState должен быть равен 7.

Если значения другие, исправьте их и запустите sysprep.

В ином случае, если вы слишком часто (более 4 раз) запускали скрипт Windows Software Licensing Rearm (slmgr.vbs /rearm) для сброса триального периода, сможете увидеть следующие строки в setuperr.log:

[0x0f0082] SYSPRP LaunchDll:Failure occurred while executing 'C:\Windows\System32\slc.dll,SLReArmWindows', returned error code -1073425657
[0x0f0070] SYSPRP RunExternalDlls:An error occurred while running registry sysprep DLLs, halting sysprep execution. dwRet = -1073425657
[0x0f00a8] SYSPRP WinMain:Hit failure while processing sysprep generalize internal providers; hr = 0xc004d307

Сброс "Rearm" также автоматически производится при выполнении sysprep. Поэтому, если вы используете единый эталонный образ, постоянно раскрываете его для обновлений, а затем заново делаете sysprep, Microsoft рекомендует задействовать файл ответов Unattend.xml примерно следующего содержания:


<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="generalize">
<component name="Microsoft-Windows-Security-Licensing-SLC" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SkipRearm>1</SkipRearm>
</component>
</settings>
</unattend>

Файл подкладывается в папку с sysprep.exe. Это позволит исключить выполнение Windows Software Licensing Rearm при использовании sysprep. Если целевая ОС 32-битная, значение параметра "processorArchitecture" должно быть установлено в "x86".
Для ОС Windows 7/2008R2 и выше можно обойтись без файла ответов. Достаточно изменить значение параметра SkipRearm с 0 на 1 в ветке реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\SoftwhereProtectionPlatform\

После распаковки образа данный параметр автоматически установится в 0.