суббота, декабря 29, 2012

Hyper-V features in VirtualBox

Одна из понравившихся вещей в Hyper-V, которые хотелось бы иметь в VirtualBox после удаления Hyper-V - автоматическое сохранение состояния виртуальных машин при перезагрузке или выключении.

Отсутствие такой feature при непрекращающейся любви разработчиков Windows к перезагрузкам при установке обновлений (и участившихся выпусках самих обновлений) очень угнетает. Однажды даже забыл сохранить виртуалку с контроллером домена и после загрузки пришлось её восстанавливать из "снимка"…

Небольшие раскопки показывают, что VB предоставляет необходимые средства для управления виртуальными машинами, остаётся лишь соединить их между собой для получения недостающих возможностей.

Вот PS-скрипт, который сохраняет все работающие виртуальные машины и выполняет перезагрузку или выключение компьютера:

clip_image001

"Побочный" результат работы скрипта - список работающих виртуалок в текстовом файле. Этот список можно использовать для реализации второй недостающей feature - восстановления ранее работавших виртуальных машин.

Вот соответствующий скрипт:

clip_image002

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

пятница, декабря 28, 2012

Бойся Try/Catch…

Вот, только что наткнулся: конструкция try/catch в PS v.2 (которая с Шарепойнтом 2010 только и работает) срабатывает в зависимости от типа ошибки - некоторые вовсе не перехватывает.

Пример: конструкция try{2/0}catch{"низя!"} вываливает сообщение в консоль:

clip_image001

PS v.3 исполняет как надо:

clip_image002

Выясняется, правда, что если делить не на нуль, а на переменную, содержащую нуль, то этот примерчик работает и во второй версии:

clip_image003

С другой стороны, наткнулся-то я на такое смешное поведение Catch в реальном скрипте при попытке в блоке Try записать данные в системный лог:

Write-EventLog -LogName $eventLogName -Source $eventLogSourceName ...

Если переменная $eventLogSourceName пустая, то в Catch ловится ошибка с сообщением "Cannot validate argument on parameter 'Source'. The argument is null or empty."

А если там неверное значение, то исключение не ловится и сообщение пишется в консоль:

clip_image004

Как с этим бороться? Не перечислять же все известные в природе исключения? Тем более, что некоторые всё равно не перехватываются…

Нашёлся способ в виде конструкции Trap - нечто наподобие On Error в бейсике.

Ловит все ошибки, но особо с действиями над этими ошибками не развернёшься. В файл на диске ошибки записать можно (чего я, собственно, и добивался), а вот собрать тексты разных ошибок, чтобы потом их разом записать в лог, как обычно в CS делаю - вигвам.

Вот примерчик:

$err="Error: "

trap$err += $_
$err
Out-File -FilePath "errors.log" -Encoding "utf8" -Append -InputObject $_.Exception.Message
continue }

$dvdr = 0
1/$dvdr
NonsenseString 
2+3
$err #здесь та же строка "Error: " :(

Здесь выполняются все действия, а сообщения об ошибках выводятся в файл:


Попытка деления на нуль.
Имя "NonsenseString" не распознано как имя командлета, функции, файла скрипта или выполняемой программы.


Не фонтан, конечно, но, всё же, лучше, чем просто пропадающее сообщение (пускай даже код после "кривых" Catch иногда и выполняется нормально)…

пятница, декабря 21, 2012

Троянский конь…

С декабрьским пакетом обновлений установился Windows Management Framework 3.0 for Windows Server. Спасибо, конечно, но можно было бы и предупредить, что при попытке воспользоваться “Командной консолью Sharepoint 2010” получим сообщение “The local farm is not accessible. Cmdlets with FeatureDependencyId are not registered.”

Конечно, новый PS работает под .NET 4.0, а Sharepoint – под 3.5…

Хорошо хоть, что решается проблемка простым удалением этого “обновления”. Но опять перезагрузка… А на сервере люди…

суббота, декабря 08, 2012

Студийный предел

Два или три дня копался с рефакторингом одного своего решения – выделял классы в отдельные сборки, добавлял к решению новые проекты, удалял ненужные, файлы с исходниками перетаскивал из одной папки в другую. При  этом не всё делалось средствами VS 2012, активно в операциях использовался ФАР. Один раз за это время была перезагрузка компьютера (точнее, нажимал на Reset по причине зависания системы).

В конце эпопеи решил сделать возврат (checkin) – использую TFS на http://visualstudio.com – и фсё, узнал предел возможностей: не шмогла Студия сохранить моё произведение. То каких-то файлов на сервере не обнаруживает (да и откуда им взяться там, если они новые), то, наоборот, говорит, что файл .sln там уже есть (конечно, есть, решение-то уже шесть лет существует)… Сражение кончилось тем, что я тоже признал получившееся новым решением и сохранил его в другой папке.

И что теперь, каждые пять минут checkin делать?
Или это от того, что недавно для Студии update 1 установил? Update 2 это исправит? Или усугубит?

суббота, декабря 01, 2012

Жизнь ли без Microsoft ?

Сегодня наш сельский провайдер устроил проверку, есть ли жизнь без Microsoft – взял, и забанил все MS-сайты: hotmail.com, skydrive.com и все остальные, даже msdn.microsoft.com, часа три экспериментировал. Зачем он это сделал – другой вопрос, думаю, никогда не расскажут.

Выяснилось, что попасть на эти сайты вполне можно через Tor, но зарегистрироваться на них – уже нельзя. При необходимости, ничего оттуда не скачаешь, если нужна авторизация…

Самое неприятное, что при этом приключении выяснилось – на компьютер с Windows 8 невозможно зайти с MS-учёткой, сервера-то недоступны. В принципе, может так получиться, что на компьютере имеется только одна эта учётка – тогда привет, не попадёшь. А ведь при установке этот вариант аутентификации является основным…
И дать бы по башке MS-программерам за такой сюрпризик – с доменными учётными данными, ведь, можно залогиниться и без доступа к контроллеру домена…