256 worker roles @ windows azure

Интересная демонстрация параллельной обработки изображений сделанная при помощи 256 worker ролей. Причем, приведен также и код воркера, использующего очередь задач.


Метки: ,   Категории:microsoft


10x Price Reduction for Windows Azure Storage Transactions

Команда разработчиков объявила о снижении стоимости транзакций в AzureStorage в 10 раз, теперь цена сравнима с транзакциями в AmazonRDS, однако стоит напомнить, что основная стоимость Storage всеравно складывается из объема, а не от транзакций, которые кстати ограничены 5000 в секунду. Читать другие новости по разработке Azure Storage можно в блоге разработчиков.

Метки:   Категории:microsoft


Использование Azure CDN для динамических страниц

Как мы знаем, микрософт предлагает невероятные возможности по распространению контента во все точки мира, что заметно уменьшает время доступа к контенту. Это CDN. Как я писал ранее это сокращает трафик между континентами (бэкбонами). Но, чтобы включить CDN у простого сайта есть несколько особенностей, о которых напишу под катом, так как не достаточно просто включить CDN в панели управления и настроить CNAME домена.
1) Надо понимать, что если мы выставили context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(10));//10min и сделали запрос через CDN, то результат этого запроса изменится не ранее чем через 10 минут.
2) В проекте создаем папку /cdn/ и настраиваем модуль rewrite для простой переброски всех запросов приходящих запросов следующим образом:
Copy Source | Copy HTML
  1. <system.webServer>
  2.   <rewrite>
  3.       <rules>
  4.         <rule name="0" stopProcessing="false">
  5.           <match url="^(?:cdn/)(.*)$"/>
  6.           <action type="Rewrite" url="{R:1}" appendQueryString="true"/>
  7.         </rule>
  8.     </rewrite>
  9.   </system.webServer>

3) Далее мы хотим, чтобы все наши ответы передавались в сжатом виде при помощи GZIP. Напомню, что GZIP отличается от deflate тем, что у последнего отсутствует избыточных заголовок. Итак, добавляем в проект модуль сжатия и настраиваем сжатие CompressionModule:
Copy Source | Copy HTML
  1. namespace Modules
  2. {
  3.     using System;
  4.     using System.IO;
  5.     using System.IO.Compression;
  6.     using System.Text;
  7.     using System.Text.RegularExpressions;
  8.     using System.Web;
  9.     using System.Web.UI;
  10.     using System.Net;
  11.     using System.Net.Sockets;
  12.     /// <summary>
  13.     /// Compresses the output using standard gzip/deflate.
  14.     /// </summary>
  15.     public sealed class CompressionModule : IHttpModule
  16.     {
  17.         #region Constants and Fields
  18.         /// <summary>
  19.         /// The deflate string.
  20.         /// </summary>
  21.         private const string Deflate = "deflate";
  22.         /// <summary>
  23.         /// The gzip string.
  24.         /// </summary>
  25.         private const string Gzip = "gzip";
  26.         #endregion
  27.         #region Public Methods
  28.         /// <summary>
  29.         /// Compresses the response stream using either deflate or gzip depending on the client.
  30.         /// </summary>
  31.         /// <param name="context">
  32.         /// The HTTP context to compress.
  33.         /// </param>
  34.         public static void CompressResponse(HttpContext context)
  35.         {
  36.             //Делаем так как у нас проксирование через CDN
  37.             context.Response.Cache.SetCacheability(HttpCacheability.Public);
  38.             context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(10));//10min
  39.             System.Diagnostics.Debug.WriteLine("compressing --->" + context.Request.Path);
  40.             if (IsEncodingAccepted(Deflate))
  41.             {
  42.                 context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
  43.                 WillCompressResponse = true;
  44.                 SetEncoding(Deflate);
  45.             }
  46.             else if (IsEncodingAccepted(Gzip))
  47.             {
  48.                 context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
  49.                 WillCompressResponse = true;
  50.                 SetEncoding(Gzip);
  51.             }
  52.         }
  53.         #endregion
  54.         #region Private Methods
  55.         private static bool WillCompressResponse
  56.         {
  57.             get
  58.             {
  59.                 HttpContext context = HttpContext.Current;
  60.                 if (context == null) { return false; }
  61.                 return context.Items["will-compress-resource"] != null && (bool)context.Items["will-compress-resource"];
  62.             }
  63.             set
  64.             {
  65.                 HttpContext context = HttpContext.Current;
  66.                 if (context == null) { return; }
  67.                 context.Items["will-compress-resource"] = value;
  68.             }
  69.         }
  70.         #endregion
  71.         #region Implemented Interfaces
  72.         #region IHttpModule
  73.         /// <summary>
  74.         /// Disposes of the resources (other than memory) used by the module 
  75.         ///     that implements <see cref="T:System.Web.IHttpModule"></see>.
  76.         /// </summary>
  77.         void IHttpModule.Dispose()
  78.         {
  79.             // Nothing to dispose; 
  80.         }
  81.         /// <summary>
  82.         /// Initializes a module and prepares it to handle requests.
  83.         /// </summary>
  84.         /// <param name="context">
  85.         /// An <see cref="T:System.Web.HttpApplication"></see> 
  86.         ///     that provides access to the methods, properties, and events common to 
  87.         ///     all application objects within an ASP.NET application.
  88.         /// </param>
  89.         void IHttpModule.Init(HttpApplication context)
  90.         {
  91.             context.PreRequestHandlerExecute += ContextPostReleaseRequestState;
  92.             context.Error += new EventHandler(context_Error);
  93.         }
  94.         void context_Error(object sender, EventArgs e)
  95.         {
  96.             HttpContext context = ((HttpApplication)sender).Context;
  97.             Exception ex = context.Server.GetLastError();
  98.             // If this CompressionModule will be compressing the response and an unhandled exception
  99.             // has occurred, remove the WebResourceFilter as that will cause garbage characters to
  100.             // be sent to the browser instead of a yellow screen of death.
  101.             if (WillCompressResponse)
  102.             {
  103.                 context.Response.Filter = null;
  104.                 WillCompressResponse = false;
  105.             }
  106.         }
  107.         #endregion
  108.         #endregion
  109.         #region Methods
  110.         /// <summary>
  111.         /// Checks the request headers to see if the specified
  112.         ///     encoding is accepted by the client.
  113.         /// </summary>
  114.         /// <param name="encoding">
  115.         /// The encoding.
  116.         /// </param>
  117.         /// <returns>
  118.         /// The is encoding accepted.
  119.         /// </returns>
  120.         private static bool IsEncodingAccepted(string encoding)
  121.         {
  122.             var context = HttpContext.Current;
  123.             return context.Request.Headers["Accept-encoding"] != null &&
  124.                    context.Request.Headers["Accept-encoding"].Contains(encoding);
  125.         }
  126.         /// <summary>
  127.         /// Adds the specified encoding to the response headers.
  128.         /// </summary>
  129.         /// <param name="encoding">The encoding.</param>
  130.         private static void SetEncoding(string encoding)
  131.         {
  132.             HttpContext.Current.Response.AppendHeader("Content-encoding", encoding);
  133.         }
  134.         /// <summary>
  135.         /// Handles the BeginRequest event of the context control.
  136.         /// </summary>
  137.         /// <param name="sender">
  138.         /// The source of the event.
  139.         /// </param>
  140.         /// <param name="e">
  141.         /// The <see cref="System.EventArgs"/> instance containing the event data.
  142.         /// </param>
  143.         private static void ContextPostReleaseRequestState(object sender, EventArgs e)
  144.         {
  145.             var context = ((HttpApplication)sender).Context;
  146.             System.Diagnostics.Debug.WriteLine("precessing request --->" + context.Request.Path);
  147.             // only when page is requested 
  148.             if (context.CurrentHandler is Page &&
  149.                 context.Request["_TSM_HiddenField_"] == null &&
  150.                 context.Request["HTTP_X_MICROSOFTAJAX"] == null &&
  151.                 context.Request.HttpMethod == "GET")
  152.             {
  153.                 CompressResponse(context);
  154.             }
  155.         }
  156.         #endregion
  157.     }
  158. }

Copy Source | Copy HTML
  1.   <system.webServer>
  2.     <validation validateIntegratedModeConfiguration="false"/>
  3.     <staticContent>
  4.       <remove fileExtension=".js" />
  5.       <mimeMap fileExtension=".js" mimeType="text/javascript" />
  6.       <remove fileExtension=".css" />
  7.       <mimeMap fileExtension=".css" mimeType="text/css" />
  8.       <remove fileExtension=".ico"/>
  9.       <mimeMap fileExtension=".ico" mimeType="image/x-icon"/>
  10.       <remove fileExtension=".gif"/>
  11.       <mimeMap fileExtension=".gif" mimeType="image/gif"/>
  12.       <remove fileExtension=".woff"/>
  13.       <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
  14.       <remove fileExtension=".svg"/>
  15.       <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
  16.       <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
  17.     </staticContent>
  18.     <httpCompression
  19.         directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"
  20.         cacheControlHeader="max-age=86400"
  21.         noCompressionForHttp10="false"
  22.         noCompressionForProxies="false"
  23.         noCompressionForRange="false"
  24.         sendCacheHeaders="true" minFileSizeForComp="0">
  25.       <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
  26.       <dynamicTypes>
  27.         <add mimeType="text/*" enabled="true" />
  28.         <add mimeType="message/*" enabled="true" />
  29.         <add mimeType="application/x-javascript" enabled="true" />
  30.         <add mimeType="*/*" enabled="false" />
  31.       </dynamicTypes>
  32.       <staticTypes>
  33.         <add mimeType="text/*" enabled="true" />
  34.         <add mimeType="message/*" enabled="true" />
  35.         <add mimeType="application/javascript" enabled="true" />
  36.         <add mimeType="*/*" enabled="false" />
  37.       </staticTypes>
  38.     </httpCompression>
  39.     <urlCompression doStaticCompression="true" doDynamicCompression="true" />
  40.     <modules runAllManagedModulesForAllRequests="true">
  41.       <add name="CompressionModule" type="Modules.CompressionModule"/>
  42.     </modules>
  43. </system.webServer>

4) Сразу особенность в том, что в CompressionModule мы не включаем сжатие для context.Request["_TSM_HiddenField_"] == null && context.Request["HTTP_X_MICROSOFTAJAX"] - это Ajax скрипты для AjaxControlToolkit и прочего от микрософта.
5) И в завершение нам необходимо сделать перезапись поля action у aspForm, так как при олучении обращения через CDN оно будет сформировано как "/cdn/page.aspx" , что при выполнении PostBack будет ошибка. Перезаписать action можно с помощью RewriteFormHtmlTextWriter, который вставляется в masterpage как
Copy Source | Copy HTML
  1. protected override void Render(HtmlTextWriter writer)
  2. {
  3.     base.Render(new RewriteFormHtmlTextWriter(writer));
  4. }
Copy Source | Copy HTML
  1. namespace top30{
  2.     using System.IO;
  3.     using System.Web;
  4.     using System.Web.UI;
  5.     /// <summary>
  6.     /// The RewriteFormHtmlTextWriter class implements Form action tag rewriting for rewritten pages 
  7.     ///     on Mono.
  8.     /// </summary>
  9.     public class RewriteFormHtmlTextWriter : HtmlTextWriter
  10.     {
  11.         #region Constructors and Destructors
  12.         /// <summary>
  13.         /// Initializes a new instance of the <see cref="RewriteFormHtmlTextWriter"/> class.
  14.         /// </summary>
  15.         /// <param name="writer">
  16.         /// The writer.
  17.         /// </param>
  18.         public RewriteFormHtmlTextWriter(Html32TextWriter writer)
  19.             : base(writer)
  20.         {
  21.             this.InnerWriter = writer.InnerWriter;
  22.         }
  23.         /// <summary>
  24.         /// Initializes a new instance of the <see cref="RewriteFormHtmlTextWriter"/> class.
  25.         /// </summary>
  26.         /// <param name="writer">
  27.         /// The writer.
  28.         /// </param>
  29.         public RewriteFormHtmlTextWriter(TextWriter writer)
  30.             : base(writer)
  31.         {
  32.             this.InnerWriter = writer;
  33.         }
  34.         #endregion
  35.         #region Public Methods
  36.         /// <summary>
  37.         /// Writes the specified markup attribute and value to the output stream, and, if specified, writes the value encoded.
  38.         /// </summary>
  39.         /// <param name="name">
  40.         /// The markup attribute to write to the output stream.
  41.         /// </param>
  42.         /// <param name="value">
  43.         /// The value assigned to the attribute.
  44.         /// </param>
  45.         /// <param name="encode">
  46.         /// true to encode the attribute and its assigned value; otherwise, false.
  47.         /// </param>
  48.         public override void WriteAttribute(string name, string value, bool encode)
  49.         {
  50.                 if (name == "action")
  51.                 {
  52.                     if (HttpContext.Current.Items["ActionAlreadyWritten"] == null)
  53.                     {
  54.                         value = HttpContext.Current.Request.RawUrl.Replace("/cdn/","/");
  55.                         HttpContext.Current.Items["ActionAlreadyWritten"] = true;
  56.                     }
  57.                 }
  58.             base.WriteAttribute(name, value, encode);
  59.         }
  60.         #endregion
  61.     }
  62. }

Метки:   Категории:microsoft | Code


Azure SQL - самая ненадажная часть Azure до сих пор

Если посмотреть статус сервиса, то ошибки идут каждый второй день, причем во всех регионах. А потом спрашиваю, почему для БД вы используете Amazon RDS...
Apr 30 2012 8:06PM We are actively investigating an intermittent timeout issue in SQL Azure which is likely to happen during database copies or sharing splits. We are working to resolve it as soon as possible. Further updates will be published to keep you apprised of the situation. We apologize for any inconvenience this causes our customers. May 2 2012 12:55AM We continue to work on repair steps to mitigate the issue. Further updates will be published to keep you apprised of the situation. We apologize for any inconvenience this causes our customers. May 4 2012 3:52PM We have found the issue and implemented a resolution. Service is now running as normal. We apologize for any inconvenience this causes our customers.

Метки:   Категории:microsoft


Демонстрация мощности Windows Azure Blob Storage

Через несколько дней все превьюшки на странице топа будут полностью отображаться через BlogStorage, а пока можно увидеть на что способно достижение от микрософта. В отчете представлен график загрузки страницы c 1000 картинок из одного браузера из США. Как можно видеть это заняло 40 секунд. При этом отдача каждой картинки заняла порядка 200 мс. Там же в таблице видно, что такой результат достигается только при включенном Keep-Alive, то есть 6 соединений открытых браузером остаются активными на протяжении всей передачи данных.

Метки:   Категории:Analytics | microsoft


CloudSearch

Сегодня Амазон объявил о выходе нового продукта - поисковик в облаке. То есть все то, о чем можно мечтать при обработке больших объемов данных. Есть интерфейс стоп слов , управление полями индексирования и т.п. Пугает лишь то, что за это придется платить и так как сервис новый, то стоит ожидать крупных сбоев. По цене все предлагается за от $0.12 per hour, что есть 1 инстанс и меньше 100у.е. в месяц. На базе cloudsearch уже проиндексировали Википедию, правда только англоязычную. Русский язык там не работает. В любом случае это мощная заявка на то, чтобы подвинуть другие корпоративные решения по контекстному поиску, который в перспективе станет мощнее яндексовского.

Что касается Azure, то для него пока нет решения из коробки в виде отдельного поискового сервиса, однако есть библиотека Lucene, которая позволяет индексировать и искать документы в облаке, хранить индекс будет в storageblob, но настраивать придется все самому. Но и тут нет морфологии. Если бы морфология поставлялась из коробки, а не приходилось бы прикручивать Lemmatizer, то это решение бы победило.

Метки: , ,   Категории:Semantic Web | trend | microsoft


Windows Azure - на заметку

Раскопал блог евангелиста WindowsAzure в России. Есть несколько интересных ссылок про CDN. В частности геокарта расположения микрософтных CDN.

Метки: ,   Категории:microsoft


Залогинивание по OpenID в .Net 4.5

В последнем выпуске channel9 показали презентацию нового решения по авторизации с помощью openid в web приложении в msvs2011. Ранее наиболее популярным средством была библиотека Арнота - dotnetopenid. Которая наверное теперь отойдет на второй план и будет использоваться только теми порталами, которые к ней уже привязались. Полная инструкция по интеграции с соц.сетями доступна в блоге MSDN, где видно, что над ее созданием работали 3 итальянца и 10 индусов.

Метки:   Категории:microsoft


Azure advertise with PHP

Микрософт в России проводит рекламу облачных вычислений. Для этого создан сайт сборщик идей - http://www.ybyf.ru. Где в рамках программы «Your Business — Your Fame» проходит конкурс идей. На конкурс идей может быть представлена идея проекта, не имеющего еще реализации. Проблема, о которой я пишу, что сайт падает при попытке отправить им идею с занятной ошибкой выполнения модуля на PHP. Удивительно, что облачные вычисления микрософта используют php:

HTTP Error 500.0 - Internal Server Error E:\approot\php\php-cgi.exe - The FastCGI process exceeded configured activity timeout Module FastCgiModule Notification ExecuteRequestHandler Handler PHP via FastCGI Error Code 0x80070102 Requested URL http://www.ybyf.ru:80/htdocs/index.php Physical Path E:\approot\htdocs\index.php Logon Method Anonymous Logon User Anonymous

Метки:   Категории:bugs | microsoft


Azure price reduce

Микрософт обещает значительное снижение цен на Азур. По факту это почти в 2 раза, так как в 2 раза падает стоимость вычислений на ExtraSmallInstance.

Метки:   Категории:microsoft


Windows Azure meltdown

Cтоило вчера недобрым словом написать про Windows Azure, так он взял и упал во всем мире на 8 часов. Хотя по сообщениям тех же инженеров - только 37% сервисов полегло. По интересной закономерности у меня полегли только те сервисы , которые были хоть как-то задействованы, то есть к ним шли обращения от пользователей. Теперь ждем будет ли какая компенсация со стороны микрософта. Напомню, что при падении Amazon;a на полдня - потом всем сделали месяц бесплатного пользования.
И самое главная мысль. Теперь мне кажется, что если раньше основная задача Интернета была сделать так, чтобы связь и работоспособность была всегда, даже если один из узлов вышел из строя, то теперь появились облака, которые успешно решают задачу, чтобы обронить почти весь Интернет при необходимости. Кстати от сегодняшнего падения пострадали сервисы правительства Великобритании.

Метки:   Категории:microsoft


BizSpark Azure

На днях стало известно о том, что в программу BizSpark для молодых кампаний добавился бесплатный доступ к WindowsAzure. Однако, для России это как и для страны третьего мира, данная возможность недоступна. Такая же фигня и с простым триальным доступом, который есть у большинства развитых стран, типа Перу. И стоит ли удивляться после этого, что представители микрософта потом налево и направо раздают гранты и тут же плачутся, что в России мало компаний, которые что-то могут создать стоящего на технологиях микрософта. Очевидно, что все гранты уйдут на покупку ПО, а другие партнерские программы просто недоступны.

Метки:   Категории:microsoft


ASP.NET 4.5 / SilverLight 5 x64

Последние события из мира Микрософта
1) Видео с презентации последних нововведений в asp.net 4.5, msvs2011 . Must see, все по-русски.
2) Оказывается в последней версии сильверлайта 5 наконец-таки сделали нормальную версию для x64 машин. Поэтому смело в x64 битном IE9 открываем страницу и ставим сильверлайт. Ранее оно не работало. IE9 пожалуй единственный браузер у которого есть 64-битная версия. В той же 32х битной опере, если открыть 100 вкладок фейсбука уже память начинает тратится более 2Гб, что приводит к заметному торможению.

Метки:   Категории:trend | microsoft


WebRole as WorkerRole

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

Метки:   Категории:microsoft


Agava VS Azure

По случаю того, что микрософт во всю начало проводить конференции и врать с больших экранов, что облачное Core намного лучше и дешевле простого VPS решил написать ниже небольшое сравнение реальной ситуации. Речь пойдет о 1 Extra Small Core в Azure и 1 VPS в Agava. Буду приводить преимущества.

Преимущества Agava
1) Цена 400р в месяц против 0,05у.е., плюс как говорил softline это не баксы как написано на сайте микрософта, а евро, кроме того они еще добавляют НДС. В общем примерно 1500р за простой ExtraSmallCore, то есть в 3 раза дороже.
2) Диск у агавы получается 25Гб (10Гб расширяемых, просто все установки по умолчанию идут с 15Гб видимых), против 20Гб у Азура.
3) Трафик у Агавы бесплатен, но ограничен 10МБ, а в Азуре исходящей трафик платный, а про ограничения ни слова.
4) Производительность ввода-вывода в Азуре написана, что "низкая", то есть низко-приоритетный трафик. У Агава известно, что это 2МБ в сек. доступа к диску.
5) Для азура придется переписывать весь много кода, чтобы соответствовать требованиям. Кроме того для Worker Role нет возможности просто вести много потоков, По сути 1 Worker - 1 поток, поэтому многие уже начинают придумывать извращения, типа SharedTimer и само-писаного пула потоков.
6) В WorkerRole Нельзя встроить сложные лицензионный комовские компоненты.
7) VPS может выполнять еще кучу задач, таких как файловый архив или DNS Server.

Преимущества Azure
1) простота администрирования по удалению, добавлению новых машин и .т.п.
2) в азуре не надо обновлять виндовс и перезагружать машину раз в месяц.
3) гарантирует 1 Ггц вместо 0,5Ггц у агавы.
4) Больше оперативной памяти - 1Гб вместо 0,5Гб, также часть памяти съедает сама система.

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

Метки:   Категории:Analytics | microsoft


Studay @ Digital October

Немного Видео с недавнего мероприятия Микрософта. К слову сказать на следующий день тут же выспупал медведев, но он был не так зажигателен как эти барабанщики


И собственно сами участники мероприятия, которые в основном играли в XBox.




Метки:   Категории:microsoft


Azure news

Облачные вычисления микрософта продолжают идти в ногу со временем
Уже доступен AzureToolkit for Windows 8
Для стартапов сделана программа бесплатного Азура на год с экономией аж до 3500у.е., но не спешим радоваться, так как это как всегда не для России, а во вторых требуется оформление BizSpark и лицензионного MSVS+MSDN , что и есть дуриловом на примерно такие же деньги


Метки:   Категории:microsoft | news


WinAzure and PnP2011

На последней конференции микрософта PnP2011 пожалуй самым интересным было EntLib и WASABi для динамического масштабирования и вообще все что может потребоваться для логирования. Пока не пользовался, но выглядит внушительно.
В тему Windows Azure - выяснилось что есть важный параметр upgradeDomainCount в CSDEF, позволяющий поочередно обновлять инстансы, не пользуясь VIP опцией.
Другой важный параметр - <LocalStorage cleanOnRoleRecycle="true" sizeInMB="15000" /> - позволяющий выделить произольную папку для записи данных. Открытием стало, что пользоваться в asp.net, портированной в Azure папкой App_Data более нельзя, так как любая Role в Windows Azure имеет ограничение на 100Мб и это ограничение никак не поменять. Получить же путь к созданной папке, можно следующим образом:
Copy Source | Copy HTML
  1. if (RoleEnvironment.IsAvailable)
  2. {
  3.     return RoleEnvironment.GetLocalResource("MyStorage").RootPath;
  4. }

Метки:   Категории:microsoft


MSVS 11 , TFS 11 , .Net 4.5

По итогам конференции BUILD, где как многие знают была представлена новая Windows 8. Также были аннонсированы следующие инструменты разработки (MSVS 11 , TFS 11 , .Net 4.5), которые можно будет загрузить уже в пятницу. Статус у них пока DeveloperPreview. В общем читайте тут с картинками. Также завтра можно будет послушать, и надеюсь почитать-посомтреть доклад Mads'a "ASP.NET optimization talk". PS: все ссылки на новости по теме включая видео

Метки:   Категории:microsoft


Power Shell from Windows Service

Некоторые особенности с организацией вызова PowerShell на WindowsServer 2008R2, для выполнения произвольного скрипта

1) Ставим PowerShell, через стандартную установку Features для WindowsServer, далее пишем примерно такую функцию
2) Важно, что ей можно передовать разовые команды, а можно имя файла, который нужно исполнить, для этого useScript ставим в true.
3) Вторая особенность неочевидна, так как PS выполняется в отдельном потоке под .Net 2.0 , а у вас .Net 4.0, то все токены прав потеряются, во избежание этого вы в приведенной выше функции указываем исполнять PS в том же потоке, что и текущий код (runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;).
4) Следующей командой важно разрешить выполнение скриптов в отдельном файле. Так как по умолчанию это запрещено (scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted");).
5) И в завершение важно помнить, что PS выполняется с рабочей директорией System, которая отлична от вашей текущей, поэтому все относительные пути в файле скрипта могут не работать.


Метки:   Категории:microsoft | Code


Кто я?

Программист. Я слежу за блогосферой и знаю, как будет развиваться интернет. Когда у меня есть время я даже прилагаю для этого усилия. Подробнее

Последние комментарии

Не отображать

Topbot at FeedsBurner

Мои Твиты

Twitter января 16, 16:22
Разбор Звездные войны: Последние джедаи http://dlvr.it/QBSdwN https://twitter.com/f1ashr/status/953301465962921985/photo/1

Twitter января 14, 19:00
8 японок основали поп-группу для пропаганды криптовалют http://dlvr.it/QBC3cw https://twitter.com/f1ashr/status/952616326605938688/photo/1

Twitter января 7, 10:12
Белый шум защищен авторским правом на youtube http://dlvr.it/Q9DFXS

Twitter января 1, 20:52
Новогодние белки http://dlvr.it/Q8SyPZ https://twitter.com/f1ashr/status/947933468222152704/photo/1

Twitter января 1, 16:43
Популярные блогеры и посты за 2017 год http://dlvr.it/Q8RpTj https://twitter.com/f1ashr/status/947870931896082433/photo/1

Twitter января 1, 15:37
@true_policy @nickolas_vs @KremlinRussia @iremeslo Но Путин делает все, чтобы выборная система в глазах аборигенов стала нелегитимной.

Twitter января 1, 11:32
@true_policy @nickolas_vs @KremlinRussia @iremeslo Нужен не новый президент, а другой система. От демократии к респ… https://twitter.com/i/web/status/947792574697431040

Twitter декабря 31, 21:11
Самоуправляемые ездящие картошки http://dlvr.it/Q8MGMd

Twitter декабря 31, 13:34
Разбор сериала Медичи: Повелители Флоренции http://dlvr.it/Q8KDRt https://twitter.com/f1ashr/status/947460855972601857/photo/1

Twitter декабря 31, 11:32
Папа Римский выступил на TED http://dlvr.it/Q8Jjb5

Twitter декабря 31, 10:25
коломенский кремль: альтернативная история 2 http://dlvr.it/Q8JRYv https://twitter.com/f1ashr/status/947413453701971968/photo/1

Twitter декабря 31, 10:25
Суперлайки в Перископе http://dlvr.it/Q8JRYr

Twitter декабря 30, 15:16
Peace, Death! (Пиз Дец) http://dlvr.it/Q8Cv1S https://twitter.com/f1ashr/status/947124264259395584/photo/1

Twitter декабря 30, 15:16
Итоги 2016 года в Живом Журнале http://dlvr.it/Q8Ctw6 https://twitter.com/f1ashr/status/947124257149956096/photo/1

Twitter декабря 30, 13:39
Разбор сериала "Молодой папа" (теория общего знания, часть 22) http://dlvr.it/Q8CP7P https://twitter.com/f1ashr/status/947099721675370496/photo/1

Twitter декабря 30, 13:05
Механического медведя не починить - пятая песня FNAF http://dlvr.it/Q8CDG8 https://twitter.com/f1ashr/status/947091170844278784/photo/1

Twitter декабря 30, 10:55
Skype and Baidu links http://dlvr.it/Q8Bf03

Twitter декабря 30, 10:23
Яндекс атаковал Израиль http://dlvr.it/Q8BWKR

Twitter декабря 30, 10:23
По случаю 8 марта погасили статую свободы http://dlvr.it/Q8BW9V https://twitter.com/f1ashr/status/947050399160156161/photo/1

Twitter декабря 30, 10:23
Рутин тутин Путин http://dlvr.it/Q8BW8y

Мой твиттер

Копирайт

Все мысли, высказанные в блоге, являются моим мнением и за это мнение меня никто не забанит! Кроме того, никто не имеет право копировать материалы блога без использования ctrl+C/V!

© Copyright 2008