суббота, 25 мая 2013 г.

Выполнение PowerShell в коде программы .Net

Так как powershell и .Net очень близки, то помимо стандартного варианта "вызвать исполняемый файл powershell из кода и передать ему команды", есть и более красивый/умный вариант - через объектную модель PowerShell.

За работу с PowerShell отвечает сборка "System.Management.Automation.dll". Она ставится вместе с SDK или же через NuGet:
Install-Package System.Management.Automation

После этого пишем простенький метод:

   1:  using System.Management.Automation.Runspaces;
   2:  using System.Text;
   3:   
   4:  namespace PowerShell
   5:  {
   6:      public class PowerShellInterpreter
   7:      {
   8:          public string Execute(string command)
   9:          {
  10:              var runspace = RunspaceFactory.CreateRunspace();
  11:              var executeResult = new StringBuilder();
  12:              try
  13:              {
  14:                  runspace.Open();
  15:   
  16:                  var pipeline = runspace.CreatePipeline();
  17:                  pipeline.Commands.AddScript(command);
  18:   
  19:                  var result = pipeline.Invoke();
  20:                  foreach (var psObject in result)
  21:                  {
  22:                      executeResult.AppendLine(psObject.ToString());
  23:                  }
  24:              }
  25:              finally
  26:              {
  27:                  runspace.Close();
  28:              }
  29:              return executeResult.ToString();
  30:          }
  31:      }
  32:  }

Сначала мы создаём "Runspace" - это что-то типа инстанса powershell в памяти, который может обрабатывать поступающие команды (pipeline). Запихиваем в pipeline команду и просим её выполнить (Invoke), в результате получаем массив PSObject (базовый объект powershell). Результат выполнения команд в PowerShell может быть многострочным, поэтому именно массив, а не один объект. Далее мы эти объекты объединяем в строку и возвращаем результат.

Вот такой код можно используем для проверки:
   1:  using System;
   2:  using Microsoft.VisualStudio.TestTools.UnitTesting;
   3:   
   4:  namespace PowerShell
   5:  {
   6:      [TestClass]
   7:      public class PowerShell
   8:      {
   9:          [TestMethod]
  10:          public void PowerShellExcuteTest()
  11:          {
  12:              var interpreter = new PowerShellInterpreter();
  13:              const string command = "$psversiontable.psversion";
  14:              var result = interpreter.Execute(command);
  15:              const string expected = "3.0\r\n";
  16:   
  17:              Assert.AreEqual(expected, result);
  18:          }
  19:      }
  20:  }

вторник, 7 мая 2013 г.

Баги с лайками в SharePoint 2013

Интересно, как Microsoft тестируют продукт перед выпуском? 

Создаём обсуждение

лайкаем его, F5

дизлайкаем его, F5

Баг: 1 пометка "Нравится". Откудова, а?! Я же дизлайкнул!
лайкаем его, F5

Баг: уже 2 пометки "Нравитися". Можно два раза лайкать?
дизлайкаем его, F5

понедельник, 6 мая 2013 г.

Первая помощь

Кто обязан оказать первую помощь:
- госслужащий в форме (полицеский, врач, охранник, сварщик и кто угодно);
- любой водитель (да, читайте законы внимательно).

Алгоритм.
Первичный осмотр:
1. Мне что то угрожает? (Да -> уходите)
2.1. Чел сам попросил
2.2. Чел валяется без сознания, проверяем:
- окрикнуть
- потрясти
- сделать ему больно (костяшками пальцев по грудине, сжать трапецивидную мышцу за шеей, сжать губу под носом...)
2.2.1. Заглянуть в рот, очистить содержимое рта:
Запрокиньте челу голову назад. Указательные пальцы на челюсть снизу, где скулы. Большие бальцы на подбородок. Открывает рот, потянув чуть на себя челюсть. Не выньте челюсть =) Двумя пальцами вынимаем содержимое (блевотину)) ) изо рта (чтоб мог дышать, иначе помрёт).
2.2.2. Проверить дыхание
- глазами, движение воздуха
- запах
- почувствовать рукой на грудной клутке
Пульс мерять не нужно - не умеете и потеряете время. Дыхание = пульс!
Нет дыхания -> немедленно СЛР.
3. Вызвать скорую - 03.

Обращаем внимание на пункт 3 - чем раньше вызовете скорую, тем лучше, лечить и спасать, просьба, после вызова скорой!

Отгоните людей с нашатырём! Нашатырь дают только в предобморочном состоянии с 30-40 сантиметров. Он сжигает слизистую носа, это вызывает боль, это вызывает адреналин, он расширяет сосуды, кровь начинает ходить лучше - пациент не теряет сознание. Пациенту без сознания вы только сожжёте нос, так как боли он не чувствует, ну и лечиться он будет ещё и от ожога слизистой.

Обморок - если чел свалился при вас. Если никто не видел как он упал, лечить от обморока нельзя, даже опасно, можно убить. Если чел свалился при вас, то полождите на землю, поднимите ноги. Кровь к голове придёт и через 15-30 секунд чел очнётся. Если был не обморок, а сердечный приступ, то вы его убили, +1.

Вопросы от скорой.
Всегда такие, не психуйте и не спешите.
1. Пол:
- мужской
- женский
- иное (ага, есть такое, дети до 1 года)
2. Возраст:
- младенец
- ребёнок
- подросток
- молодой человек
- средних лет
- пожилой
- очень пожилой
Возраст влияет на бригаду медиков и тулзы, которые они с собой захватят!
3. Что случилось?
"Не вася много пил, его бросила жена, которая родила пятерых детей, уехавших за границу и не присылающих открытку бедной матери, которая с горя начала пить и порезала палец, когда дядя ваня смотрел футбол..." а "упал, без сознания". Что случилось - это не история жизни, а состояние человека, что с ним произошло в последнюю минуту.
4. Адрес
5. Опционально: Кто вы?
6. Опционально: Было ранение? (приедет милиция)
7. Телефон, можно мобильный. Да, у всех скорых есть мобильники!
"Вызов принят, ждите"

Вторичный осмотр:
1. МЧС (мужики, чего случилось) - потом расскажете скорой, толпа будет тупить и нихрена не сможет сказать.
2. Осмотр тела. Очень просто, как в американских фильмах про копов - кладёте руки по краям тела, начиная с плеч, и ведёте их вниз. Тело симметрично, если что-то есть с одной стороны, а с другой стороны нет - значит проблема, запоминаете и не лезете туда! Дождитесь скорой!

Перевести в востановительное состояние. 
Иначе язык западёт и чел задохнётся, так как даже в сознании запавший язык не вынуть. Восстановительное состояние - лёжит на богу, верхняя нога согнута в колене, нижняя рука вытянута в сторону взгляда, верхняя рука согнута и подложена под голову или плечо (не даёт челу скатиться на пузо).