<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="pl_PL" xmlns="http://www.w3.org/2005/Atom">
  <title>UMnieDziala.pl</title>
  <link rel="alternate" type="text/html" href="http://umniedziala.pl/" />
  <link rel="self" href="http://umniedziala.pl/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2009-06-18T00:07:56.0003986+02:00</updated>
  <author>
    <name>Krzysztof Pietrzak</name>
  </author>
  <subtitle />
  <id>http://umniedziala.pl/</id>
  <generator uri="http://www.dasblog.net" version="2.0.7180.0">DasBlog</generator>
  <entry>
    <title>Windows Update install</title>
    <link rel="alternate" type="text/html" href="http://UMnieDziala.pl/WindowsUpdateInstall.aspx" />
    <id>http://umniedziala.pl/PermaLink,guid,8cfcc8f3-f521-4e23-a398-fd8a796c7de9.aspx</id>
    <published>2009-06-18T00:07:56.0003986+02:00</published>
    <updated>2009-06-18T00:07:56.0003986+02:00</updated>
    <category term="Windows" label="Windows" scheme="http://umniedziala.pl/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ku pamięci -  na stronach MSDN, przy dokumentacji dotyczącej API do Windows Update,
znajduję się skrypt który wymusza pobranie i instalacje aktualizacji z Windows Update:
</p>
        <p>
 
</p>
        <pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> updateSession
= <span style="color: #0000ff">CreateObject</span>("<span style="color: #8b0000">Microsoft.Update.Session</span>") </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> updateSearcher
= updateSession.CreateupdateSearcher() </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">WScript.Echo "<span style="color: #8b0000">Searching
for updates...</span>" &amp; vbCRLF </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> searchResult
= _ </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">updateSearcher.Search("<span style="color: #8b0000">IsInstalled=0
and Type='Software'</span>") </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">WScript.Echo "<span style="color: #8b0000">List
of applicable items on the machine:</span>" </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">For</span> I
= 0 To searchResult.Updates.Count-1 </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> update
= searchResult.Updates.Item(I) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">    WScript.Echo I + 1 &amp; "<span style="color: #8b0000">&gt; </span>"
&amp; update.Title </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Next</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">If</span> searchResult.Updates.Count
= 0 <span style="color: #0000ff">Then</span></pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	WScript.Echo "<span style="color: #8b0000">There
are no applicable updates.</span>" </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	WScript.Quit
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">End</span>
            <span style="color: #0000ff">If</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">WScript.Echo vbCRLF &amp; "<span style="color: #8b0000">Creating
collection of updates to download:</span>" </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> updatesToDownload
= <span style="color: #0000ff">CreateObject</span>("<span style="color: #8b0000">Microsoft.Update.UpdateColl</span>") </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">For</span> I
= 0 to searchResult.Updates.Count-1 </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> update
= searchResult.Updates.Item(I) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">    WScript.Echo I + 1 &amp; "<span style="color: #8b0000">&gt;
adding: </span>" &amp; update.Title </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">    updatesToDownload.<span style="color: #0000ff">Add</span>(update) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Next</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">WScript.Echo vbCRLF &amp; "<span style="color: #8b0000">Downloading
updates...</span>" </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> downloader
= updateSession.CreateUpdateDownloader() </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">downloader.Updates = updatesToDownload
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">downloader.Download()
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">WScript.Echo  vbCRLF &amp; "<span style="color: #8b0000">List
of downloaded updates:</span>" </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">For</span> I
= 0 To searchResult.Updates.Count-1 </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> update
= searchResult.Updates.Item(I) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">If</span> update.IsDownloaded <span style="color: #0000ff">Then</span></pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">       WScript.Echo I + 1 &amp; "<span style="color: #8b0000">&gt; </span>"
&amp; update.Title </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">End</span>
            <span style="color: #0000ff">If</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Next</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> updatesToInstall
= <span style="color: #0000ff">CreateObject</span>("<span style="color: #8b0000">Microsoft.Update.UpdateColl</span>") </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">WScript.Echo  vbCRLF &amp; _
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">"<span style="color: #8b0000">Creating
collection of downloaded updates to install:</span>" </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">For</span> I
= 0 To searchResult.Updates.Count-1 </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">set</span> update
= searchResult.Updates.Item(I) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">If</span> update.IsDownloaded
= true <span style="color: #0000ff">Then</span></pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">       WScript.Echo I + 1 &amp; "<span style="color: #8b0000">&gt;
adding: </span>" &amp; update.Title </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">       updatesToInstall.<span style="color: #0000ff">Add</span>(update) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">End</span>
            <span style="color: #0000ff">If</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Next</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	WScript.Echo "<span style="color: #8b0000">Installing
updates...</span>" </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> installer
= updateSession.CreateUpdateInstaller() </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	installer.Updates = updatesToInstall
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Set</span> installationResult
= installer.Install() </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	'Output results of install
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	WScript.Echo "<span style="color: #8b0000">Installation
Result: </span>" &amp; _ </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	installationResult.ResultCode 
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	WScript.Echo "<span style="color: #8b0000">Reboot
Required: </span>" &amp; _ </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	installationResult.RebootRequired &amp; vbCRLF 
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	WScript.Echo "<span style="color: #8b0000">Listing
of updates installed </span>" &amp; _ </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">	 "<span style="color: #8b0000">and
individual installation results:</span>" </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">For</span> I
= 0 to updatesToInstall.Count - 1 </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">		WScript.Echo I + 1 &amp; "<span style="color: #8b0000">&gt; </span>"
&amp; _ </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">		updatesToInstall.Item(i).Title &amp; _
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">		"<span style="color: #8b0000">: </span>"
&amp; installationResult.GetUpdateResult(i).ResultCode </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">Next</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
        </pre>
        <img width="0" height="0" src="http://umniedziala.pl/aggbug.ashx?id=8cfcc8f3-f521-4e23-a398-fd8a796c7de9" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Powershell Remoting w C#</title>
    <link rel="alternate" type="text/html" href="http://UMnieDziala.pl/PowershellRemotingWC.aspx" />
    <id>http://umniedziala.pl/PermaLink,guid,c2fd69c5-f743-4b6f-b58c-a433fc64518a.aspx</id>
    <published>2009-04-22T22:48:22.5351738+02:00</published>
    <updated>2009-04-22T22:48:22.5351738+02:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
W Powershell  2.0 mamy możliwość zdalnego wykonywania poleceń. Powershell domyślnie
też umożliwia odwołania z kodu C#  do comandletów Powershellowych. Jednak połączenie
remotingu Powershella oraz C# nie jest prostym zadaniem – brakuje po prostu przykładów.
Nawet google jest w tym wypadku bezradny.
</p>
        <p>
Po wnikliwej lekturze SDK do Powershell-a, możemy znaleźć klasę RunspaceConnectionInfo,
ale niestety ta klasa ma prywatny konstruktor. Na szczęście jest klasa WSManConnection
Info.
</p>
        <p>
Jak więc zacząć? Zacznijmy od wymaganych klas:
</p>
        <p>
using System.Collections.Generic; 
<br />
using System.Management.Automation; 
<br />
using System.Collections.ObjectModel; 
<br />
using System.Management.Automation.Runspaces;
</p>
        <p>
Przy czym odwołanie do System.Management.Automation; wymaga referencji do klasy System.Management.Automation.dll.
Domyślnie klasa nie jest wrzucana do GAC, więc ręcznie musimy przeszukać katalog %WinDir%
i ją sobie wyciągnąć.
</p>
        <p>
Remote powershell ma ogrniczenie co do ilości sesji, więc musimy gdzieś przechowywać
informacje o sesji. Tu na przykład przechowuję informację o tworzeniu sesji w globalnych
zmiennych aplikacji:
</p>
        <p>
        </p>
        <pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #808080">///
&lt;summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #808080">///
Opens remote runspace</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #808080">///
&lt;/summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #808080">///
&lt;param name="uri"&gt;Uri to connect to, for example https://pod51002psh.outlook.com/powershell/"&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #808080">///
&lt;param name="schema"&gt;Schema of connection, for example http://schemas.microsoft.com/powershell/Microsoft.Exchange&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #808080">///
&lt;param name="username"&gt;Username&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #808080">///
&lt;param name="password"&gt;Secure pasword&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #808080">///
&lt;returns&gt;&lt;/returns&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">public</span>
            <span style="color: #0000ff">void</span> openRunspace(<span style="color: #0000ff">string</span> uri, <span style="color: #0000ff">string</span> schema, <span style="color: #0000ff">string</span> username, <span style="color: #0000ff">string</span> livePass) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            System.Security.SecureString password = <span style="color: #0000ff">new</span> System.Security.SecureString(); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">foreach</span> (<span style="color: #0000ff">char</span> c <span style="color: #0000ff">in</span> livePass.ToCharArray()) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">                password.AppendChar(c);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            PSCredential psc = <span style="color: #0000ff">new</span> PSCredential(username,
password); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            WSManConnectionInfo rri = <span style="color: #0000ff">new</span> WSManConnectionInfo(<span style="color: #0000ff">new</span> Uri(uri),
schema, psc); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            rri.AuthenticationMechanism = AuthenticationMechanism.Basic;
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            Runspace runspace = RunspaceFactory.CreateRunspace(rri);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            runspace.Open();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            Application["<span style="color: #8b0000">runspace</span>"]
= runspace; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        }
</pre>
A inicjalizacja takiej funkcji by wyglądała np tak:</pre>
        <pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">protected</span>
            <span style="color: #0000ff">void</span> Application_Start(<span style="color: #0000ff">object</span> sender,
EventArgs e) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">string</span> psremoteserver
= "<span style="color: #8b0000">https://pod51002psh.outlook.com/powershell/</span>"; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">string</span> liveLogin
= "<span style="color: #8b0000"><a href="mailto:liveadmin@domain.fqdn&quot;;">liveadmin@domain.fqdn
</a></span>"; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">string</span> livePass
= "<span style="color: #8b0000">Pass</span>"; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">string</span> schema
= "<span style="color: #8b0000">http://schemas.microsoft.com/powershell/Microsoft.Exchange</span>"; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">if</span> (Application["<span style="color: #8b0000">runspace</span>"]
== <span style="color: #0000ff">null</span>) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">                openRunspace(psremoteserver, schema, liveLogin, livePass);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        }</pre>
        </pre>
        <p>
Nie zapomnijmy o zamykaniu sesji:
</p>
        <pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">protected</span>
            <span style="color: #0000ff">void</span> Application_End(<span style="color: #0000ff">object</span> sender,
EventArgs e) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">if</span> (Application["<span style="color: #8b0000">runspace</span>"]
!= <span style="color: #0000ff">null</span>) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">                Runspace rs = (Runspace)Application["<span style="color: #8b0000">runspace</span>"]; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">                rs.Close();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">protected</span>
            <span style="color: #0000ff">void</span> Application_Error(<span style="color: #0000ff">object</span> sender,
EventArgs e) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">if</span> (Application["<span style="color: #8b0000">runspace</span>"]
!= <span style="color: #0000ff">null</span>) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">                Runspace rs = (Runspace)Application["<span style="color: #8b0000">runspace</span>"]; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">                rs.Close();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        }</pre>
        </pre>
        <pre>Po stworzeniu połączenia nie pozostaje nam nic innego jak go użyć. Np tak:</pre>
        <pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Opens remote runspace</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;/summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="uri"&gt;Uri to connect to, for example https://pod51002psh.outlook.com/powershell/"&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="schema"&gt;Schema of connection, for example http://schemas.microsoft.com/powershell/Microsoft.Exchange&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="username"&gt;Username&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="password"&gt;Secure pasword&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;returns&gt;&lt;/returns&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">public</span>
            <span style="color: #0000ff">void</span> openRunspace(<span style="color: #0000ff">string</span> uri, <span style="color: #0000ff">string</span> schema, <span style="color: #0000ff">string</span> username, <span style="color: #0000ff">string</span> livePass) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            System.Security.SecureString password = <span style="color: #0000ff">new</span> System.Security.SecureString(); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">foreach</span> (<span style="color: #0000ff">char</span> c <span style="color: #0000ff">in</span> livePass.ToCharArray()) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">                password.AppendChar(c);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            PSCredential psc = <span style="color: #0000ff">new</span> PSCredential(username,
password); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            WSManConnectionInfo rri = <span style="color: #0000ff">new</span> WSManConnectionInfo(<span style="color: #0000ff">new</span> Uri(uri),
schema, psc); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            rri.AuthenticationMechanism = AuthenticationMechanism.Basic;
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Runspace runspace = RunspaceFactory.CreateRunspace(rri);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            runspace.Open();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Application["<span style="color: #8b0000">runspace</span>"]
= runspace; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">private</span> Runspace
getRunSpace() </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Runspace runspace = (Runspace)Application["<span style="color: #8b0000">runspace</span>"]; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">if</span> (runspace.RunspaceStateInfo.State
!= RunspaceState.Opened) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">                runspace.Open();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">return</span> runspace; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Invokes any powershell script</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;/summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="scriptText"&gt;script to invoke&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;returns&gt;&lt;/returns&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">public</span> Collection&lt;PSObject&gt;
RunScript(<span style="color: #0000ff">string</span> scriptText) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Runspace runspace = getRunSpace();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #008000">//
create a pipeline and feed it the script text</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Pipeline pipeline = runspace.CreatePipeline();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            pipeline.Commands.AddScript(scriptText);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #008000">//
execute the script</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Collection&lt;PSObject&gt; results = <span style="color: #0000ff">new</span> Collection&lt;PSObject&gt;(); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            results = pipeline.Invoke();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">return</span> results; </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Invoke simple command</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Ex.</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Collection&lt;PSObject&gt; col = RunCommand("Get-Mailbox");</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;/summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="command"&gt;Command Name&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;returns&gt;&lt;/returns&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">public</span> Collection&lt;PSObject&gt;
RunCommand(<span style="color: #0000ff">string</span> command) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Command myCommand = <span style="color: #0000ff">new</span> Command(command); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Pipeline pipeLine = getRunSpace().CreatePipeline();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            pipeLine.Commands.Add(myCommand);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">return</span> pipeLine.Invoke(); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Invoke command with single paramtere</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;/summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="command"&gt;Command&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="param"&gt;Command parameter&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;returns&gt;&lt;/returns&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">public</span> Collection&lt;PSObject&gt;
RunCommand(<span style="color: #0000ff">string</span> command, <span style="color: #0000ff">string</span> param) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Command myCommand = <span style="color: #0000ff">new</span> Command(command); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            myCommand.Parameters.Add(param);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Pipeline pipeLine = getRunSpace().CreatePipeline();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            pipeLine.Commands.Add(myCommand);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">return</span> pipeLine.Invoke(); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Invoke command with single named parameter</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Ex.</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Collection&lt;PSObject&gt; col = RunCommand("Get-Mailbox","Identity","usr@iscg.eu");</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;/summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="command"&gt;Command to invoke&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="param"&gt;Parameter Name&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="paramValue"&gt;Parameter value&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;returns&gt;&lt;/returns&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">public</span> Collection&lt;PSObject&gt;
RunCommand(<span style="color: #0000ff">string</span> command, <span style="color: #0000ff">string</span> param, <span style="color: #0000ff">object</span> paramValue) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Command myCommand = <span style="color: #0000ff">new</span> Command(command); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            myCommand.Parameters.Add(<span style="color: #0000ff">new</span> CommandParameter(param,
paramValue)); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Pipeline pipeLine = getRunSpace().CreatePipeline();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            pipeLine.Commands.Add(myCommand);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">return</span> pipeLine.Invoke(); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Invokes command with collection of paramters</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Ex.</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Collection&lt;CommandParameter&gt; cpc = new Collection&lt;CommandParameter&gt;();</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
cpc.Add(new CommandParameter("Identity", "user@iscg.eu"));</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
Collection&lt;PSObject&gt; col = RunCommand("Get-Mailbox",cpc);</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;/summary&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="command"&gt;&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;param name="param"&gt;&lt;/param&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #808080">///
&lt;returns&gt;&lt;/returns&gt;</span>
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">public</span> Collection&lt;PSObject&gt;
RunCommand(<span style="color: #0000ff">string</span> command, Collection&lt;CommandParameter&gt;
param) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Command myCommand = <span style="color: #0000ff">new</span> Command(command); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">foreach</span> (CommandParameter
cp <span style="color: #0000ff">in</span> param) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">                myCommand.Parameters.Add(cp);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            Pipeline pipeLine = getRunSpace().CreatePipeline();
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            pipeLine.Commands.Add(myCommand);
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">return</span> pipeLine.Invoke(); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
          </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">public</span>
            <span style="color: #0000ff">string</span> translatePSObject(Collection&lt;PSObject&gt;
input) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            StringBuilder stringBuilder = <span style="color: #0000ff">new</span> StringBuilder(); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">foreach</span> (PSObject
obj <span style="color: #0000ff">in</span> (input)) </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            {
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">                stringBuilder.AppendLine(obj.ToString() + obj.GetType() + obj.ImmediateBaseObject.GetType());
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">            }
</pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">
            <span style="color: #0000ff">return</span> stringBuilder.ToString(); </pre>
          <pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 10px">        }</pre>
        </pre>
        <img width="0" height="0" src="http://umniedziala.pl/aggbug.ashx?id=c2fd69c5-f743-4b6f-b58c-a433fc64518a" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Rozszerzenia Kerberos v5 Microsoftu</title>
    <link rel="alternate" type="text/html" href="http://UMnieDziala.pl/RozszerzeniaKerberosV5Microsoftu.aspx" />
    <id>http://umniedziala.pl/PermaLink,guid,5b108be9-9e6b-4345-945d-51b2e4d298a6.aspx</id>
    <published>2009-03-03T07:52:37.4138205+01:00</published>
    <updated>2009-03-03T10:12:08.1459645+01:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Microsoft opublikował szereg dokumentów opisujących wszystko co wykracza poza specyfikacje
Kerberos v5. W końcu daje to nam podstawy do tego aby zrozumieć jak działa autentykacja
użytkownika w środowisku Windowsowym.
</p>
        <p>
Dla mnie najciekawsza jest informacja że w trakcie logowania za pomoca smartcard jest
generowany ticket NTLM, co zostało opisane w PKCA:
</p>
        <p>
[MS-PKCA] Public Key Cryptography for Initial Authentication (PKINIT) in Kerberos
Protocol Specification - <a title="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-PKCA%5D.pdf" href="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-PKCA%5D.pdf">http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-PKCA%5D.pdf</a></p>
        <p>
Specyfikacja NTLM:
</p>
        <p>
[MS-NLMP]:  NT LAN Manager (NTLM) Authentication Protocol Specification <a title="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-NLMP%5D.pdf" href="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-NLMP%5D.pdf">http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-NLMP%5D.pdf</a></p>
        <p>
Poniżej kilka dalszych specyfikacji dotyczących zmian w implementacji kerberosv5,
ale i nie tylko:
</p>
        <p>
[MS-KILE] Kerberos Protocol Extensions - <a title="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-PAC%5D.pdf" href="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-KILE%5D.pdf">http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-KILE%5D.pdf</a></p>
        <p>
[MS-PAC]:  Privilege Attribute Certificate Data Structure - <a title="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-PAC%5D.pdf" href="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-PAC%5D.pdf">http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-PAC%5D.pdf</a></p>
        <p>
[MS-SPNG]:  Simple and Protected Generic Security Service Application Program
Interface Negotiation Mechanism (SPNEGO) Protocol Extensions <a title="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-SPNG%5D.pdf" href="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-SPNG%5D.pdf">http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-SPNG%5D.pdf</a></p>
        <p>
[MS-LSAD]:  
<br />
Local Security Authority (Domain Policy) Remote Protocol Specification <a title="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-LSAD%5D.pdf" href="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-LSAD%5D.pdf">http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-LSAD%5D.pdf</a></p>
        <p>
[MS-SECO]:  Windows Security Overview <a title="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-SECO%5D.pdf" href="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-SECO%5D.pdf">http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-SECO%5D.pdf</a></p>
        <img width="0" height="0" src="http://umniedziala.pl/aggbug.ashx?id=5b108be9-9e6b-4345-945d-51b2e4d298a6" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Outlook Integration Error w OCS Communicator</title>
    <link rel="alternate" type="text/html" href="http://UMnieDziala.pl/OutlookIntegrationErrorWOCSCommunicator.aspx" />
    <id>http://umniedziala.pl/PermaLink,guid,4c9b4fa1-59c1-4216-8039-c4ecc0af74e5.aspx</id>
    <published>2009-03-02T08:10:31.8207645+01:00</published>
    <updated>2009-03-02T08:10:31.8207645+01:00</updated>
    <category term="Windows" label="Windows" scheme="http://umniedziala.pl/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <blockquote>
          <p>
            <a href="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs007_2.png">
              <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="umocs007" border="0" alt="umocs007" src="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs007_thumb.png" width="244" height="159" />
            </a>
          </p>
          <p>
Czym jest najczęściej spowodowany ten problem? Odpowiedzi na to pytanie szukałem dość
długo. Co dziwne, na niektórych stacjach wydawał się nie występować. Dziwne też było
zachowanie jeśli chodzi o przynależność do sieci – na stacjach domenowych, wpiętych
do sieci firmowej się nie pojawiał, natomiast już przy dostępie zewnętrznym występował
zawsze.
</p>
          <p>
Co dziwne, standardowe usługi z których korzystał komunikator wydawały się działać,
i nie zdradzać istnienia błędów.
</p>
          <p>
Jak więc rozwiązać ten problem? Ja najpierw sprawdziłem gdzie usługi Exchangowe się
znajdują: - 
</p>
          <p>
            <a href="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs001_2.png">
              <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="umocs001" border="0" alt="umocs001" src="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs001_thumb.png" width="392" height="256" />
            </a> 
</p>
        </blockquote>
        <blockquote>
          <p>
Następnie sprawdziłem za pomocą przeglądarki czy nie pojawia się żaden problem przy
dostępie do katalogów EWS i UnifiedMessanging – w szczególności problem z dostępem
do certyfikatów:
</p>
          <p>
            <a href="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs003_2.png">
              <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="umocs003" border="0" alt="umocs003" src="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs003_thumb.png" width="472" height="326" />
            </a>
          </p>
        </blockquote>
        <p>
 
</p>
        <p>
          <a href="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs002_2.png">
            <img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="umocs002" border="0" alt="umocs002" src="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs002_thumb.png" width="462" height="260" />
          </a>
        </p>
        <p>
Jak widać dostęp do witryn nie wygenerował żadnych błędów.
</p>
        <p>
Co więc jest przyczyną tego błędu? Jak się okazuję jest to sprawdzanie odwołania certyfikatu
serwera – takie standardowe ustawienie które przychodzi wraz z IE7. Użytkownicy wewnątrz
pobierają CRL z LDAP, zgodnie z wpisem w certyfikacie, natomiast zewnętrzni próbują
się dostać do strony CA:
</p>
        <p>
          <a href="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs004_2.png">
            <img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="umocs004" border="0" alt="umocs004" src="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs004_thumb.png" width="307" height="382" />
          </a>
        </p>
        <p>
Rozwiązanie1:Opublikować CRL na zewnątrz firmy. Dosyć trudny proces, wymagający przeważnie
wykorzystania ISA i/lub skryptów w celu utworzenia zewnętrznego repozytorium certyfikatów/CRL,
bez publikacji samego CA.
</p>
        <p>
Rozwiązanie2: Wyłączyć opcję w IE
</p>
        <p>
          <img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="umocs006" border="0" alt="umocs006" src="http://peki.pjwstk.edu.pl/blog/content/binary/WindowsLiveWriter/OutlookInterationErrorwOCSCommunicator_11AEE/umocs006_thumb.png" width="295" height="381" />
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
 
</p>
        <p>
Podobnie się zachowuję Outlook 2007. O ile Out Of Office Assistant nie korzysta z
sprawdzania CRL-i, to już UnifiedMessenging jak najbardziej z tego korzysta.
</p>
        <img width="0" height="0" src="http://umniedziala.pl/aggbug.ashx?id=4c9b4fa1-59c1-4216-8039-c4ecc0af74e5" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Hyper-V a 80070057</title>
    <link rel="alternate" type="text/html" href="http://UMnieDziala.pl/HyperVA80070057.aspx" />
    <id>http://umniedziala.pl/PermaLink,guid,c08101f2-2062-441d-b77f-05574cddc67f.aspx</id>
    <published>2009-01-06T14:36:55.3802724+01:00</published>
    <updated>2009-01-06T14:36:55.3802724+01:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <blockquote>
          <p>
Hyper-V to naprawdę solidna platforma wirtualizacyjna. Przeważnie podczas wszystkich
pokazów i dem działa bez zarzutu. Problem pojawia się jak zawsze dopiero outs-de-the-test-box.
</p>
          <p>
Otóż Hyper-V posiada pewien poważny błąd – przy próbie zaimportowania maszyny wirtualnej
która została wyeksportowana na innym serwerze pojawia się błąd 0x80070057.
</p>
          <p>
Rozwiązanie – dosyć proste:
</p>
          <p>
1.Otworzyć katalog z maszyną wirtualną
</p>
          <p>
2.Znajdujemy plik .Exp
</p>
          <p>
3. Wyszukujemy:
</p>
          <p>
  &lt;PROPERTY NAME="ScopeOfResidence" TYPE="string"&gt; 
<br /><font color="#ff0000">    &lt;VALUE&gt; 
<br />
      e7668fbc-216e-4ed1-8ce3-3b932b42e22b 
<br />
    &lt;/VALUE&gt;</font><br />
  &lt;/PROPERTY&gt;
</p>
          <p>
4. Usuwamy część zaznaczoną na czerwono
</p>
        </blockquote>
        <img width="0" height="0" src="http://umniedziala.pl/aggbug.ashx?id=c08101f2-2062-441d-b77f-05574cddc67f" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Autentykacja Certyfiaktem do IIS7</title>
    <link rel="alternate" type="text/html" href="http://UMnieDziala.pl/AutentykacjaCertyfiaktemDoIIS7.aspx" />
    <id>http://umniedziala.pl/PermaLink,guid,e7cfa087-ca1e-43aa-b74c-421ca0e10406.aspx</id>
    <published>2008-10-20T12:58:48.9847505+02:00</published>
    <updated>2008-10-20T12:58:48.9847505+02:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
IIS7, podobnie jak II6 posiada możliwość autoryzacji certyfiaktem cyfrowym do strony.
</p>
        <p>
Podonie jak w IIS 6, jest możliwość logowania za pomocą certyfikatów firm trzecich,
jak również logowania certyfikatami skojarzonymi z kontami AD.
</p>
        <p>
Problem pojawia się w momencie gdy chcemy skonfigurować takie rozwiązanie. Dla konfiguracji
certyfikatem zewnętrznym do AD można znaleźć w sieci poradniki, ale do konfiguracji
z uwierzytelnianiem z AD poradników nie ma. Niby wystarczy zainstalować dodatek do
IIS7, włączyć w opcjach site, i już powinno działać. Ale niestety tak nie jest.
</p>
        <p>
IIS7 ma poważne braki w interfejse do konfiguracji certyfikatów. O ile w opcjach całego
serwera mamy możliwośc zanza`czenia uwierzytelnienia certyfikatem, to przy pojedynczym
katalogu wirtualnym takiej możliwości nie ma. W związku z tym z cmd z podniesionymi
uprawnieniami:
</p>
        <p>
notepad %windir%\system32\inetsrv\config\applicationHost.config
</p>
        <p>
Ta opcja jest ustawiana z automatu:
</p>
        <p>
&lt;Configuration&gt; 
<br />
&lt;System.WebServer&gt; 
<br />
  &lt;Security&gt; 
<br />
   &lt;clientCertificateMappingAuthentication enabled="true" /&gt;
</p>
        <p>
Wyszukujemy teraz interesujący nas site, np "Default Web Site/owa"
</p>
        <p>
&lt;location path="Default Web Site/owa"&gt; 
<br />
&lt;system.webServer&gt; 
<br />
  &lt;security&gt; 
<br />
   &lt;authentication&gt; 
<br />
    &lt;windowsAuthentication enabled="false"&gt; 
<br />
     &lt;providers&gt; 
<br />
      &lt;clear /&gt; 
<br />
      &lt;add value="Negotiate" /&gt; 
<br />
      &lt;add value="NTLM" /&gt; 
<br />
     &lt;/providers&gt; 
<br />
    &lt;/windowsAuthentication&gt; 
<br />
    &lt;anonymousAuthentication enabled="false" /&gt; 
<br />
    &lt;digestAuthentication enabled="false" /&gt; 
<br />
    &lt;basicAuthentication enabled="false" /&gt; 
<br />
    <font color="#008000">&lt;clientCertificateMappingAuthentication
enabled="true" /&gt;</font><br />
   &lt;/authentication&gt; 
<br /><i>  &lt;access sslFlags="Ssl, SslNegotiateCert, SslRequireCert, Ssl128"
/&gt; 
<br /></i> &lt;/security&gt;
</p>
        <p>
Gdzie linijkę <font color="#008000">&lt;clientCertificateMappingAuthentication enabled="true"
/&gt;</font> trzeba po prostu dopisać, bo w GUI nie ma.
</p>
        <p>
Jeśli chcemy mieć ClientCertificate + Windows Integrated
</p>
        <p>
          <font color="#000080">&lt;windowsAuthentication enabled="true"&gt; 
<br />
&lt;clientCertificateMappingAuthentication enabled="true" /&gt; 
<br /></font>
          <i>
            <font color="#000080">&lt;access sslFlags="Ssl, SslNegotiateCert, Ssl128"
/&gt;</font>
          </i>
        </p>
        <img width="0" height="0" src="http://umniedziala.pl/aggbug.ashx?id=e7cfa087-ca1e-43aa-b74c-421ca0e10406" />
      </div>
    </content>
  </entry>
  <entry>
    <title>ShadowCopy w Windows 2008 x64</title>
    <link rel="alternate" type="text/html" href="http://UMnieDziala.pl/ShadowCopyWWindows2008X64.aspx" />
    <id>http://umniedziala.pl/PermaLink,guid,c948f06b-5cbd-45a3-91e0-15f5fa4031b6.aspx</id>
    <published>2008-09-02T12:30:23.1890922+02:00</published>
    <updated>2008-09-02T12:30:23.1890922+02:00</updated>
    <category term="Windows" label="Windows" scheme="http://umniedziala.pl/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ostatnio podczas przenoszenia plików użytkowników natknąłem się na typowy problem
w-files. 
</p>
        <p>
Otóż przenieśliśmy katalogi domowe użytkowników na nowy serwer w2k8 x64. Włączyliśmy
shadow copies. Zdefiniowaliśmy kopiowanie backupowe dfs-r do centrali, w celu późniejszego
zrzucania stanu na tasiemki. Serwer sobie spokojnie śmigał, i wszystko wydawało się
takie idealne. Nawet użytkownicy nie wydawali się niezadowolenia. 
</p>
        <p>
Wszystko niestety zepsuł błąd skryptu, który uszkodził strukturę katalogów na macierzy
w centrali. Jako że dfs-r działa prawie niezawodnie, szybko dało się odczuć braki
katalogów w oddziale. 
</p>
        <p>
Ale przecież jest shadow copy, więc nie powinno być problemu. Tak więc postanowiliśmy
wejść do shadow copy, i spróbować przywrócić foldery. 
</p>
        <p>
I tu pojawił się pierwszy problem - shadow copy udawał, że nie umie znaleźć plików
w folderach - wyświetlał się komunikat o ścieżce nie do znalezienia. Hmmm... problem
uprawnień. Wobec tego przelogowujemy się i próbujemy jeszcze raz.. znowu nic. 
</p>
        <p>
Niestety w oddziale nie było żadnego innego serwera, a tylko stacje klienckie z xp.
Wobec tego logujemy się zdalnie na stacje,i próbujemy odzyskać pliki. Jest, udaje
się, ale niestety uprawnienia do plików się nie przenoszą. 
</p>
        <p>
Próbujemy volrest z w2k3 resource tools, niestety bez skutecznie. Narzędzie nie może
sie podpiąć do shadow copy z windows 2008 w2k8 x64. 
</p>
        <p>
... chwilka załamania i wizja ręcznego ustawiania uprawnień.... nagle pomysł.., przecież
shadow copy sharuje folder udostępniony z tą samą nazwą tylko z przedrostkiem określającym
datę... wobec tego wejdźmy do właściwości otworzonej kopi shadow copy i znajdźmy ścieżkę...
o, jest. 
</p>
        <p>
To teraz tylko robocopy w trybie backup – robocopy /b /COPY:DATSO /s /e /r:1 /w:1
i juz. Tylko kilka godzi stresu dla administratorów, i tylko godzina szukania narzędzia
do przeglądania shadow copy : )
</p>
        <img width="0" height="0" src="http://umniedziala.pl/aggbug.ashx?id=c948f06b-5cbd-45a3-91e0-15f5fa4031b6" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Opcje DHCP -121 w w2k3, i 249 w w2k8</title>
    <link rel="alternate" type="text/html" href="http://UMnieDziala.pl/OpcjeDHCP121WW2k3I249WW2k8.aspx" />
    <id>http://umniedziala.pl/PermaLink,guid,27b58bc8-f261-4bca-b2a7-266bcdf64754.aspx</id>
    <published>2008-07-16T00:00:56.2203598+02:00</published>
    <updated>2008-07-16T00:00:56.2203598+02:00</updated>
    <category term="Longhorn" label="Longhorn" scheme="http://umniedziala.pl/CategoryView,category,Longhorn.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Jak wiadomo opcja 249 w DHCP nie przyjeła się - RFC zdefiniowało tę opcję jako opcję
121. W produktach Microsoftu do serii 2003 niestety nie było możliwości wyboru opcjii
121. Aż do momentu pojawienia się 2k8.
</p>
        <p>
I tu niespodzianka. W windows 2008 opcja 121 jest, ale nie ma opcji 249. Co więc zrobić
kiedy musimy użyć opcjii 121 w w2k3? ALbo użyć opcji 249 w w2k8? Musimy stworzyć ją
sami.
</p>
        <p>
Logujemy się do konsolki netsh:
</p>
        <blockquote>
          <p>
            <font face="Times New Roman" size="2">netsh</font>
          </p>
          <p>
            <font face="Times New Roman" size="2">dhcp server </font>
            <a href="file://\\nazwa_serwera">
              <font face="Times New Roman" size="2">\\nazwa_serwera</font>
            </a>
          </p>
        </blockquote>
        <p>
Tworzymy definicje obiektu:
</p>
        <blockquote>
          <p>
            <font face="Times New Roman">add optiondef  121 "Classless Static Routes - new"
BINARY 0</font>
          </p>
        </blockquote>
        <p>
lub dla 249
</p>
        <blockquote>
          <p>
            <font face="Traditional Arabic" size="2">add optiondef  249 "Classless Static
Routes - old" BINARY 0</font>
          </p>
        </blockquote>
        <p>
anastepnie przechodzimy do odpowiedniego scope - tu testowo 192.168.193.0
</p>
        <blockquote>
          <p>
            <font face="Times New Roman" size="2">scope 192.168.193.0</font>
          </p>
        </blockquote>
        <p>
wpisujemy wartosc
</p>
        <blockquote>
          <p>
            <font face="Times New Roman" size="2">set optionvalue 121 binary 100a64c0a8c10110ac16c0a8c101180a0c01c0a8c10118c0a8d5c0a8c101180a0c02c0a8c101180a0c03c0a8c101180a0c04c0a8c101180a0c05c0a8c101180a0c06c0a8c101</font>
          </p>
        </blockquote>
        <p>
Oczywiscie aby sie nie narobic, najprosciej jest wykorzystac GUI istniejacej klasy,
i za pomoca polecnia show optionvalue na scope sprawdzic odpowiedni ciag odpwiedzialny
za sciezki. <img width="0" height="0" src="http://umniedziala.pl/aggbug.ashx?id=27b58bc8-f261-4bca-b2a7-266bcdf64754" /></p>
      </div>
    </content>
  </entry>
  <entry>
    <title>w2k3 -&amp;gt; w2k8</title>
    <link rel="alternate" type="text/html" href="http://UMnieDziala.pl/w2k3GtW2k8.aspx" />
    <id>http://umniedziala.pl/PermaLink,guid,e8a3fc59-cd1d-4792-adc3-e86bd650aae9.aspx</id>
    <published>2008-02-15T20:29:38.748066+01:00</published>
    <updated>2008-02-15T20:29:38.748066+01:00</updated>
    <category term="Longhorn" label="Longhorn" scheme="http://umniedziala.pl/CategoryView,category,Longhorn.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Postanowiłem wykonać upgrade serwera na którym działa ten blog. Zabrałem się do tego
jak zawsze najbardziej hardcorowo ze wszystkich możliwych sposobów - tzn. odpaliłem
rdesktop, podmapowałem obraz iso za pomocą deamon tools, i wrzuciłem do katalogu.
Normalni bym to zrobił 7-zip-em, ale 7-zip nie ma jeszcze obsługi standardu plików
iso UFD, który został przyjęty przez Microsoft w Viscie i Longhornie.
</p>
        <p>
Ok, instalator standardowy. Next next next, chce wykonać upgrade. Następnie sprawdzanie
poprawności. Oczywiście nie spodobał mu się zainstalowany powershell, oraz deamon-toolsy.
Więc usunięcie.
</p>
        <p>
Kolejna próba instalacji, next next next, upgrade. 20 minut zbierania informacji o
tym czy upgrade można wykonać. Next. 
</p>
        <p>
I tu pojawia się zbieranie informacjo o systemie...... tak 1,5 godiny, na szczęście
terminal działa. Restart............godzina..........pół...nie pinguje sie... o co
chodzi.....ok, zterminalujmy sie na jakas workstacje w tej sieci.. nic. Ok, po dwóch
godzinach sie pinguje. Ale rdesktop nie dziala. Hmmm... Computer Management. Dziala
: ) Zobaczmy serwisy. Zobaczmy czy uslugi terminalowe dzialaja. Dzialaja. Ale nie
moge sie dostac dalej.. Hmm, www dziala, ale blog juz nie. A strona startowa to strona
IIS7. Hmmm... Windows Firewall działa. Wyłaczmy.
</p>
        <p>
........błąd rpc. Echh, i tyle : ) Hmm, musze sie jednak wybrac odwiedzic serwer.
</p>
        <p>
Pol godziny pozniej w koncu podlaczylem komputer. I ku mojemu zdziwieniu ukazal sie
ekran instalacyjny, z zaznaczonym Completing Installation(34%).
</p>
        <p>
Po kolejnych 2 godzinach w końcu serwer zadziałał. Ogólnie cały proces instalacj zaczął
się o 15, a zakończył o 19:30. Tak anprawde bez potrzeby ingerencji w sam proces upgradu.
</p>
        <p>
Do tego, i co najwazniejsze, upgrade się udał. Wszystkie usługi zaczeły działać poprawnie.
No, może oprucz blogu, ale po szybkim upgradzei silnika z asp1.1 do asp 2.0, i on
zaczął chodzić.
</p>
        <p>
No i ostatnia sprawa na koniec. Na moim systemie zainstalowany był WIndows 2003 Enterprise
R2 VLK. WIęc Windows 2008 postanowił poszukać serwera KMS, i pozostawił sobie na to
3 dni. Jak się okazało nie mam dostępnych kluczy KMS-owych, a tylko klucze MAK. W
przypadku w2k3 oznaczałoby to reinstalacje systemu WIndows. ALe w W2k8 można wipisać
klucz MAK, a system grzecznie przeprowadzi aktywacje w firmie Microsoft.
</p>
        <p>
Podsumowując - proces upgradu był bardzo prosty. Nawet przy tak skomplikowanym serwerze
jak mój - czyli maszyna serwero-administracyjni-developerska, z zainstalowanym IIS,
SQL-em, VS, antywirusem McAfee - przebiegł bez problemu, tylko wymagał dłuugiego czasu. 
</p>
        <img width="0" height="0" src="http://umniedziala.pl/aggbug.ashx?id=e8a3fc59-cd1d-4792-adc3-e86bd650aae9" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Multicast file copy</title>
    <link rel="alternate" type="text/html" href="http://UMnieDziala.pl/MulticastFileCopy.aspx" />
    <id>http://umniedziala.pl/PermaLink,guid,a6e229bb-76bd-4ef2-97f3-8bc190ddac78.aspx</id>
    <published>2008-02-04T17:25:58.0848339+01:00</published>
    <updated>2008-02-04T17:25:58.0848339+01:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Jesli kiedykolwiek przygotowywaliście obrazy maszyn wirtualnych na szkzolenia, wiecie
zapewne jakim problemem jest wgranie tych obrazów na stacje robocze.
</p>
        <p>
 
</p>
        <p>
Weźmy sytuacje typową: 16 komputerów w laboratorium, 4 GB danych, sieć 100MB
</p>
        <p>
dla uproszczenia powiedzmy że maksymalna wydajność kopiowania to 10Mb/s, a do skopiowania
jest 4000MB danych. Daje to 400sekund transferu. 400s*16/60s daje 106 minut na skopiowanie
danych.
</p>
        <p>
Możemy oczywiście zoptymalizować algorytm. Z stacji 1 kopiujemy na stacje 2. Później
z stacji 1 i 2 kopiujemy na stacje 3 i 4. następnie z stacji 1,2,3,4 kopiujemy na
stacje 4,5,6,7,8. Na końcu wykonujemy jeszcze jeden transfer z stacji 1,2,3,4,5,6,7,8
na stacje 9,10,11,12,13,14,15,16. Daje to 4 *400s/60s, czyli ~27 minut.
</p>
        <p>
 
</p>
        <p>
Czy można szybciej? Oczywiście. Wystarczy wykorzystać multicasty. W odróżnieniu od
broadcastów, nie zapychają całej sieci ( o ile switch to umożliwia, ale obecnie już
prawie każdy sobie z tym radzi), i jest routowalny ( o ile router to obsługuje).
</p>
        <p>
Długo szukałem darmowego programu który by umożliwiał transmisje plików pod systemem
windows.. I udało się. UdpCast
</p>
        <p>
- <a title="http://udpcast.linux.lu/exe.html" href="http://udpcast.linux.lu/exe.html">http://udpcast.linux.lu/exe.html</a></p>
        <p>
Wydajność na poziomie 87% wysycenia łącza, przy 16 jednoczesnych transmisjach plików,
czyli na poziomie 10.5Mb - zdecydownie szybciej niż SMB/CIFS. I do tego jest stabilny.
I działa.
</p>
        <img width="0" height="0" src="http://umniedziala.pl/aggbug.ashx?id=a6e229bb-76bd-4ef2-97f3-8bc190ddac78" />
      </div>
    </content>
  </entry>
</feed>