<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Kazun</title>
	<atom:link href="http://kazunposh.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://kazunposh.wordpress.com</link>
	<description>Заметки о PowerShell.</description>
	<lastBuildDate>Thu, 16 Feb 2012 15:05:20 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='kazunposh.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Kazun</title>
		<link>http://kazunposh.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://kazunposh.wordpress.com/osd.xml" title="Kazun" />
	<atom:link rel='hub' href='http://kazunposh.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Q&amp;A</title>
		<link>http://kazunposh.wordpress.com/2012/02/02/qa-4-2/</link>
		<comments>http://kazunposh.wordpress.com/2012/02/02/qa-4-2/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 19:50:32 +0000</pubDate>
		<dc:creator>Kazun</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Q&A]]></category>

		<guid isPermaLink="false">http://kazunposh.wordpress.com/?p=247</guid>
		<description><![CDATA[1) Как установить пользователю 'Deny this use permissions to logon to a Remote Desktop Session Host Server'? 0 - для установки флажка 1 - для снятия флажка $user = [ADSI]"LDAP://CN=UserName,OU=Clients,DC=contoso,DC=com" $user.InvokeSet("AllowLogon",1) $user.CommitChanges() 2) Как найти все пустые группы в Active Directory? ([adsisearcher]"(&#38;(objectCategory=group)(!member=*))").FindAll() 3) Как найти все события с определенный LogonType в журнале Security? Значения Logon [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=247&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre><span style="color:#000000;">1</span><span style="color:#000000;">) Как установить пользователю </span><span style="color:#800000;">'</span><span style="color:#800000;">Deny this use permissions to logon
    to a Remote Desktop Session Host Server</span><span style="color:#800000;">'</span><span style="color:#000000;">?

</span><span style="color:#000000;">0</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> для установки флажка
</span><span style="color:#000000;">1</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> для снятия флажка

</span><span style="color:#800080;">$user</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [</span><span style="color:#008080;">ADSI</span><span style="color:#000000;">]</span><span style="color:#800000;">"</span><span style="color:#800000;">LDAP://CN=UserName,OU=Clients,DC=contoso,DC=com</span><span style="color:#800000;">"</span><span style="color:#000000;">
</span><span style="color:#800080;">$user</span><span style="color:#000000;">.InvokeSet(</span><span style="color:#800000;">"</span><span style="color:#800000;">AllowLogon</span><span style="color:#800000;">"</span><span style="color:#000000;">,</span><span style="color:#000000;">1</span><span style="color:#000000;">)
</span><span style="color:#800080;">$user</span><span style="color:#000000;">.CommitChanges()

</span><span style="color:#000000;">2</span><span style="color:#000000;">) Как найти все пустые группы в Active Directory?

    ([</span><span style="color:#008080;">adsisearcher</span><span style="color:#000000;">]</span><span style="color:#800000;">"</span><span style="color:#800000;">(&amp;(objectCategory=group)(!member=*))</span><span style="color:#800000;">"</span><span style="color:#000000;">).FindAll()

</span><span style="color:#000000;">3</span><span style="color:#000000;">) Как найти все события с определенный LogonType в журнале Security?

Значения Logon </span><span style="color:#5F9EA0;font-weight:bold;">Type</span><span style="color:#000000;"> </span><span style="color:#800000;">можно</span><span style="color:#000000;"> </span><span style="color:#800000;">посмотреть</span><span style="color:#000000;"> </span><span style="color:#800000;">на</span><span style="color:#000000;"> </span><span style="color:#800000;">сайте</span><span style="color:#000000;"> </span><span style="color:#800000;">-</span><span style="color:#000000;"> 

http://technet.microsoft.com/en-us/library/cc787567(v=ws.10).aspx

    </span><span style="color:#800080;">$filter</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">*[EventData[Data[@Name='LogonType']=5]]</span><span style="color:#800000;">"</span><span style="color:#000000;">
    </span><span style="color:#5F9EA0;font-weight:bold;">Get-WinEvent</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-FilterXPath</span><span style="color:#000000;"> </span><span style="color:#800080;">$filter</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-LogName</span><span style="color:#000000;"> </span><span style="color:#800000;">Security</span><span style="color:#000000;">

    </span><span style="color:#008000;">#</span><span style="color:#008000;">Найдем все события с опеределенным значением Logon Type и EventID</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$filter</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">*[System[EventID=4624]
        and EventData[Data[@Name='LogonType']=5]]</span><span style="color:#800000;">"</span><span style="color:#000000;">
    </span><span style="color:#5F9EA0;font-weight:bold;">Get-WinEvent</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-FilterXPath</span><span style="color:#000000;"> </span><span style="color:#800080;">$filter</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-LogName</span><span style="color:#000000;"> </span><span style="color:#800000;">Security</span><span style="color:#000000;">

    </span><span style="color:#008000;">#</span><span style="color:#008000;">Найдем все события с опеределенным значением Logon Type и EventID за</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;">последние сутки</span><span style="color:#008000;">
</span><span style="color:#800080;">$time</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [</span><span style="color:#008080;">int</span><span style="color:#000000;">](</span><span style="color:#5F9EA0;font-weight:bold;">New-TimeSpan</span><span style="color:#000000;"> ([</span><span style="color:#008080;">datetime</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Today</span><span style="color:#000000;">) (</span><span style="color:#5F9EA0;font-weight:bold;">get-date</span><span style="color:#000000;">)).TotalMilliseconds
    </span><span style="color:#800080;">$filter</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">*[System[TimeCreated[timediff(@SystemTime) &lt; $time] and
        EventID=4624] and EventData[Data[@Name='LogonType']=5]]</span><span style="color:#800000;">"</span><span style="color:#000000;">
    </span><span style="color:#5F9EA0;font-weight:bold;">Get-WinEvent</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-FilterXPath</span><span style="color:#000000;"> </span><span style="color:#800080;">$filter</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-LogName</span><span style="color:#000000;"> </span><span style="color:#800000;">Security</span><span style="color:#000000;"> 

Командлет </span><span style="color:#5F9EA0;font-weight:bold;">Get-WinEvent</span><span style="color:#000000;"> </span><span style="color:#800000;">работает</span><span style="color:#000000;"> </span><span style="color:#800000;">только</span><span style="color:#000000;"> </span><span style="color:#800000;">в</span><span style="color:#000000;"> </span><span style="color:#800000;">системах</span><span style="color:#000000;"> </span><span style="color:#800000;">Vista</span><span style="color:#000000;"> </span><span style="color:#800000;">и</span><span style="color:#000000;"> выше,но </span><span style="color:#800000;">дает</span><span style="color:#000000;">
преимущество,т.к не зависит от языка операционной системы.

</span><span style="color:#000000;">4</span><span style="color:#000000;">) Как создать диалог InputBox?

Пример был взят с сайта(C</span><span style="color:#008000;">#</span><span style="color:#008000;">) - http://www.csharp-examples.net/inputbox/ </span><span style="color:#008000;">
</span><span style="color:#000000;">
</span><span style="color:#0000FF;">Function</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;">Show-InputBox</span><span style="color:#000000;">(</span><span style="color:#800080;">$title</span><span style="color:#000000;">, </span><span style="color:#800080;">$promptText</span><span style="color:#000000;">)
{
  </span><span style="color:#800080;">$form</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">Windows.Forms.Form</span><span style="color:#000000;">
  </span><span style="color:#800080;">$label</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">Windows.Forms.Label</span><span style="color:#000000;">
  </span><span style="color:#800080;">$textBox</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">Windows.Forms.TextBox</span><span style="color:#000000;">
  </span><span style="color:#800080;">$buttonOk</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">Windows.Forms.Button</span><span style="color:#000000;">
  </span><span style="color:#800080;">$buttonCancel</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">Windows.Forms.Button</span><span style="color:#000000;">

  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.Text </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$title</span><span style="color:#000000;">
  </span><span style="color:#800080;">$label</span><span style="color:#000000;">.Text </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$promptText</span><span style="color:#000000;">

  </span><span style="color:#800080;">$buttonOk</span><span style="color:#000000;">.Enabled </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$false</span><span style="color:#000000;">
  </span><span style="color:#800080;">$buttonOk</span><span style="color:#000000;">.Text </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">OK</span><span style="color:#800000;">"</span><span style="color:#000000;">
  </span><span style="color:#800080;">$buttonCancel</span><span style="color:#000000;">.Text </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">Cancel</span><span style="color:#800000;">"</span><span style="color:#000000;">
  </span><span style="color:#800080;">$buttonOk</span><span style="color:#000000;">.DialogResult </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [</span><span style="color:#008080;">Windows.Forms.DialogResult</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">OK</span><span style="color:#000000;">
  </span><span style="color:#800080;">$buttonCancel</span><span style="color:#000000;">.DialogResult </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [</span><span style="color:#008080;">Windows.Forms.DialogResult</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Cancel</span><span style="color:#000000;">

  </span><span style="color:#800080;">$label</span><span style="color:#000000;">.SetBounds(</span><span style="color:#000000;">9</span><span style="color:#000000;">, </span><span style="color:#000000;">20</span><span style="color:#000000;">, </span><span style="color:#000000;">372</span><span style="color:#000000;">, </span><span style="color:#000000;">13</span><span style="color:#000000;">)
  </span><span style="color:#800080;">$textBox</span><span style="color:#000000;">.SetBounds(</span><span style="color:#000000;">12</span><span style="color:#000000;">, </span><span style="color:#000000;">36</span><span style="color:#000000;">, </span><span style="color:#000000;">372</span><span style="color:#000000;">, </span><span style="color:#000000;">20</span><span style="color:#000000;">)
  </span><span style="color:#800080;">$buttonOk</span><span style="color:#000000;">.SetBounds(</span><span style="color:#000000;">228</span><span style="color:#000000;">, </span><span style="color:#000000;">72</span><span style="color:#000000;">, </span><span style="color:#000000;">75</span><span style="color:#000000;">, </span><span style="color:#000000;">23</span><span style="color:#000000;">)
  </span><span style="color:#800080;">$buttonCancel</span><span style="color:#000000;">.SetBounds(</span><span style="color:#000000;">309</span><span style="color:#000000;">, </span><span style="color:#000000;">72</span><span style="color:#000000;">, </span><span style="color:#000000;">75</span><span style="color:#000000;">, </span><span style="color:#000000;">23</span><span style="color:#000000;">)

  </span><span style="color:#800080;">$label</span><span style="color:#000000;">.AutoSize </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$true</span><span style="color:#000000;">
  </span><span style="color:#800080;">$textBox</span><span style="color:#000000;">.Anchor </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$textBox</span><span style="color:#000000;">.Anchor </span><span style="color:#FF0000;">-bor</span><span style="color:#000000;"> [</span><span style="color:#008080;">Windows.Forms.AnchorStyles</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Right</span><span style="color:#000000;">
  </span><span style="color:#800080;">$buttonOk</span><span style="color:#000000;">.Anchor </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [</span><span style="color:#008080;">Windows.Forms.AnchorStyles</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Bottom</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-bor</span><span style="color:#000000;"> [</span><span style="color:#008080;">Windows.Forms.AnchorStyles</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Right</span><span style="color:#000000;">
  </span><span style="color:#800080;">$buttonCancel</span><span style="color:#000000;">.Anchor </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [</span><span style="color:#008080;">Windows.Forms.AnchorStyles</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Bottom</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-bor</span><span style="color:#000000;"> [</span><span style="color:#008080;">Windows.Forms.AnchorStyles</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Right</span><span style="color:#000000;">

  </span><span style="color:#800080;">$textBox</span><span style="color:#000000;">.Add_TextChanged({
    </span><span style="color:#0000FF;">if</span><span style="color:#000000;">(</span><span style="color:#800080;">$this</span><span style="color:#000000;">.Text){
        </span><span style="color:#800080;">$buttonOk</span><span style="color:#000000;">.Enabled </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$true</span><span style="color:#000000;">
    }
    </span><span style="color:#0000FF;">else</span><span style="color:#000000;"> {
        </span><span style="color:#800080;">$buttonOk</span><span style="color:#000000;">.Enabled </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$false</span><span style="color:#000000;">
        }
    })
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.ClientSize </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">Drawing.Size</span><span style="color:#000000;">(</span><span style="color:#000000;">396</span><span style="color:#000000;">, </span><span style="color:#000000;">107</span><span style="color:#000000;">)
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.Controls.Add(</span><span style="color:#800080;">$label</span><span style="color:#000000;">)
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.Controls.Add(</span><span style="color:#800080;">$textBox</span><span style="color:#000000;">)
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.Controls.Add(</span><span style="color:#800080;">$buttonOk</span><span style="color:#000000;">)
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.Controls.Add(</span><span style="color:#800080;">$buttonCancel</span><span style="color:#000000;">)
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.ClientSize </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">Drawing.Size</span><span style="color:#000000;">([</span><span style="color:#008080;">Math</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Max</span><span style="color:#000000;">(</span><span style="color:#000000;">300</span><span style="color:#000000;">, </span><span style="color:#800080;">$label</span><span style="color:#000000;">.Right </span><span style="color:#FF0000;">+</span><span style="color:#000000;"> </span><span style="color:#000000;">10</span><span style="color:#000000;">), </span><span style="color:#800080;">$form</span><span style="color:#000000;">.ClientSize.Height)
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.FormBorderStyle </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [</span><span style="color:#008080;">Windows.Forms.FormBorderStyle</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">FixedDialog</span><span style="color:#000000;">
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.StartPosition </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [</span><span style="color:#008080;">Windows.Forms.FormStartPosition</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">CenterScreen</span><span style="color:#000000;">
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.MinimizeBox </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$false</span><span style="color:#000000;">
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.MaximizeBox </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$false</span><span style="color:#000000;">
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.AcceptButton </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$buttonOk</span><span style="color:#000000;">
  </span><span style="color:#800080;">$form</span><span style="color:#000000;">.CancelButton </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$buttonCancel</span><span style="color:#000000;">

  </span><span style="color:#800080;">$dialogResult</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$form</span><span style="color:#000000;">.ShowDialog()
  </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">PsObject</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-Property</span><span style="color:#000000;"> @{
          Value </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$textBox</span><span style="color:#000000;">.Text
         DialogResult </span><span style="color:#FF0000;">=</span><span style="color:#000000;">  </span><span style="color:#800080;">$dialogResult</span><span style="color:#000000;">
    }
}

Еще пару вариантов:
Creating a Custom Input Box </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> 

http://technet.microsoft.com/en-us/library/ff730941.aspx

An Easy InputBox </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> http://bit.ly/xyfKSe

</span><span style="color:#000000;">5</span><span style="color:#000000;">) Как проверить учетные данные пользователя при подключении
    к Active Directory?

    </span><span style="color:#008000;">#</span><span style="color:#008000;">Требуется минимальная версия .Net 3.5</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$domain</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">contoso.com</span><span style="color:#800000;">"</span><span style="color:#000000;">
    </span><span style="color:#800080;">$cred</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">Get-Credential</span><span style="color:#000000;">
</span><span style="color:#800080;">$pc</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">DirectoryServices.AccountManagement.PrincipalContext</span><span style="color:#000000;">(
            </span><span style="color:#800000;">"</span><span style="color:#800000;">Domain</span><span style="color:#800000;">"</span><span style="color:#000000;">, </span><span style="color:#800080;">$domain</span><span style="color:#000000;">)
</span><span style="color:#800080;">$isValid</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$pc</span><span style="color:#000000;">.ValidateCredentials(
    (</span><span style="color:#800080;">$cred</span><span style="color:#000000;">.UserName </span><span style="color:#FF0000;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">^\\</span><span style="color:#800000;">"</span><span style="color:#000000;">), </span><span style="color:#800080;">$cred</span><span style="color:#000000;">.GetNetworkCredential().Password)

    </span><span style="color:#008000;">#</span><span style="color:#008000;">Вариант для младших версий</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$domain</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">DC=Contoso,DC=Com</span><span style="color:#800000;">"</span><span style="color:#000000;">
    </span><span style="color:#800080;">$cred</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">Get-Credential</span><span style="color:#000000;">

    </span><span style="color:#0000FF;">try</span><span style="color:#000000;">
    {
        </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">System.DirectoryServices.DirectoryEntry</span><span style="color:#000000;">(
            </span><span style="color:#800000;">"</span><span style="color:#800000;">LDAP://$domain</span><span style="color:#800000;">"</span><span style="color:#000000;">,
            (</span><span style="color:#800080;">$cred</span><span style="color:#000000;">.UserName </span><span style="color:#FF0000;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">^\\</span><span style="color:#800000;">"</span><span style="color:#000000;">),
            </span><span style="color:#800080;">$cred</span><span style="color:#000000;">.GetNetworkCredential().Password) | </span><span style="color:#5F9EA0;font-weight:bold;">Out-String</span><span style="color:#000000;">
    }
    </span><span style="color:#0000FF;">catch</span><span style="color:#000000;"> {
        </span><span style="color:#5F9EA0;font-weight:bold;">Write-Host</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-ForegroundColor</span><span style="color:#000000;"> </span><span style="color:#800000;">Yellow</span><span style="color:#000000;"> </span><span style="color:#800080;">$_</span><span style="color:#000000;">
    }

</span><span style="color:#000000;">6</span><span style="color:#000000;">) Как найти индекс указанного элемента в массиве?

Для этого нам понадобится статическое свойство IndexOf класса Array.

    </span><span style="color:#008000;">#</span><span style="color:#008000;">V2</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$array</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">.</span><span style="color:#000000;">.10</span><span style="color:#000000;">
    [</span><span style="color:#008080;">array</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">IndexOf</span><span style="color:#000000;">(</span><span style="color:#800080;">$array</span><span style="color:#000000;">,</span><span style="color:#000000;">5</span><span style="color:#000000;">)

    </span><span style="color:#008000;">#</span><span style="color:#008000;">V3</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;">В версии V3 появилось нововведение и теперь мы можем использовать </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;">статические методы класса из экземпляра объекта</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$array</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">.</span><span style="color:#000000;">.10</span><span style="color:#000000;">
    </span><span style="color:#800080;">$array</span><span style="color:#000000;">.IndexOf(</span><span style="color:#000000;">5</span><span style="color:#000000;">)

</span><span style="color:#000000;">7</span><span style="color:#000000;">) Как отправить пользователю сообщения на удаленный компьютер?

    </span><span style="color:#5F9EA0;font-weight:bold;">Invoke-WmiMethod</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-Path</span><span style="color:#000000;"> </span><span style="color:#800000;">Win32_Process</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-Name</span><span style="color:#000000;"> </span><span style="color:#800000;">Create</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">`</span><span style="color:#000000;">
    </span><span style="color:#5F9EA0;font-style:italic;">-ArgumentList</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">msg * Hello</span><span style="color:#800000;">"</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-ComputerName</span><span style="color:#000000;"> </span><span style="color:#800000;">UserPc</span><span style="color:#000000;">

</span><span style="color:#000000;">8</span><span style="color:#000000;">) Почему при запуске powershell параметры </span><span style="color:#FF0000;">-file</span><span style="color:#000000;"> и -command
            должны быть последними?

Данный баг был зарегистрирован на сайте http://bit.ly/xONJpz,
    особо неприятный момент,что </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">Closed as Won't Fix</span><span style="color:#800000;">"</span><span style="color:#000000;">.

</span><span style="color:#000000;">9</span><span style="color:#000000;">) Получаю ошибку </span><span style="color:#800000;">"</span><span style="color:#800000;">Unable to index into an object of type
    System.Management.ManagementObjectCollection</span><span style="color:#800000;">"</span><span style="color:#000000;"> ?

Ошибка возникает,что данный класс не содержит индексатора и мы не можем,
обращаться к элементам по индексу.

    </span><span style="color:#008000;">#</span><span style="color:#008000;">Пример ошибки</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$disks</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">gwmi</span><span style="color:#000000;"> </span><span style="color:#800000;">win32_diskdrive</span><span style="color:#000000;">
    </span><span style="color:#800080;">$d</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$disks</span><span style="color:#000000;">[0]
    </span><span style="color:#800080;">$p</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$d</span><span style="color:#000000;">.getrelated(</span><span style="color:#800000;">"</span><span style="color:#800000;">win32_diskpartition</span><span style="color:#800000;">"</span><span style="color:#000000;">)
    </span><span style="color:#800080;">$p</span><span style="color:#000000;">[0]
    Unable to index into an object of </span><span style="color:#5F9EA0;font-weight:bold;">type</span><span style="color:#000000;">
        System.Management.ManagementObjectCollection.

    </span><span style="color:#008000;">#</span><span style="color:#008000;">Решение: привести явно к типу массив объектов</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#000000;">1</span><span style="color:#000000;">) @(</span><span style="color:#800080;">$p</span><span style="color:#000000;">)[0]
    </span><span style="color:#000000;">2</span><span style="color:#000000;">) @(</span><span style="color:#800080;">$P</span><span style="color:#000000;">).get(</span><span style="color:#000000;">0</span><span style="color:#000000;">)
    </span><span style="color:#000000;">3</span><span style="color:#000000;">) </span><span style="color:#800080;">$p</span><span style="color:#000000;"> | </span><span style="color:#5F9EA0;font-weight:bold;">select</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-f</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">
    </span><span style="color:#000000;">4</span><span style="color:#000000;">) [</span><span style="color:#008080;">array</span><span style="color:#000000;">]</span><span style="color:#800080;">$p</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$d</span><span style="color:#000000;">.getrelated(</span><span style="color:#800000;">"</span><span style="color:#800000;">win32_diskpartition</span><span style="color:#800000;">"</span><span style="color:#000000;">)
       </span><span style="color:#800080;">$p</span><span style="color:#000000;">[0]

Решения и вопрос из темы на форуме Technet(автор темы JRich,
    I wish to thank the author of the question Justin).:

indexing problem </span><span style="color:#FF0000;">-</span><span style="color:#000000;">  http://bit.ly/yT4o2f

Также советую почитать его полезный блог,где можно подчерпнуть для себя
много нового, jrich </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> http://jrich523.wordpress.com .

</span><span style="color:#000000;">10</span><span style="color:#000000;">) Какие потоки существуют в PowerShell?

    </span><span style="color:#008000;">#</span><span style="color:#008000;">V2</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#000000;">0</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> stdin
    </span><span style="color:#000000;">1</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> stdout
    </span><span style="color:#000000;">2</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> stderr

    </span><span style="color:#008000;">#</span><span style="color:#008000;">V3</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#000000;">0</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> stdin
    </span><span style="color:#000000;">1</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> stdout
    </span><span style="color:#000000;">2</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> stderr
    </span><span style="color:#000000;">3</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> warning
    </span><span style="color:#000000;">4</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> verbose
    </span><span style="color:#000000;">5</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-</span><span style="color:#000000;"> debug     

</span><span style="color:#000000;">11</span><span style="color:#000000;">) Как удалить запрещающее правило из ключа реестра?

Представим,что мы хотим удалить ключ реестра,но у него есть
запрещающее правило, которое не позволяет нам удалить этот ключ,
но права у нас есть на изменение правил доступа.

    </span><span style="color:#5F9EA0;font-weight:bold;">PS</span><span style="color:#000000;"> &gt;  </span><span style="color:#800000;">Get-Acl</span><span style="color:#000000;"> HKCU:\Test
    </span><span style="color:#5F9EA0;font-weight:bold;">Get-Acl</span><span style="color:#000000;"> : </span><span style="color:#800000;">Requested</span><span style="color:#000000;"> </span><span style="color:#800000;">registry</span><span style="color:#000000;"> </span><span style="color:#800000;">access</span><span style="color:#000000;"> </span><span style="color:#800000;">is</span><span style="color:#000000;"> </span><span style="color:#800000;">not</span><span style="color:#000000;"> allowed.

В этом случае нам поможет WMI  и метод SetSecurityDescriptor,который
доступен только начиная с Vista и выше.

    </span><span style="color:#800080;">$hkey</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">2147483649</span><span style="color:#000000;"> </span><span style="color:#008000;">#</span><span style="color:#008000;">HKCU</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$hsubkey</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">Test</span><span style="color:#800000;">"</span><span style="color:#000000;">
    </span><span style="color:#800080;">$reg</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [</span><span style="color:#008080;">wmiclass</span><span style="color:#000000;">]</span><span style="color:#800000;">"</span><span style="color:#800000;">root\default:StdRegProv</span><span style="color:#800000;">"</span><span style="color:#000000;">
    </span><span style="color:#800080;">$ace</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$reg</span><span style="color:#000000;">.GetSecurityDescriptor(</span><span style="color:#800080;">$hkey</span><span style="color:#000000;">,</span><span style="color:#800080;">$hsubkey</span><span style="color:#000000;">).Descriptor.DACL

    </span><span style="color:#800080;">$reg</span><span style="color:#000000;">.psbase.Scope.Options.EnablePrivileges </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$true</span><span style="color:#000000;">
    </span><span style="color:#800080;">$sd</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> ([</span><span style="color:#008080;">WMIClass</span><span style="color:#000000;">] </span><span style="color:#800000;">"</span><span style="color:#800000;">Win32_SecurityDescriptor</span><span style="color:#800000;">"</span><span style="color:#000000;">).CreateInstance()
    </span><span style="color:#800080;">$sd</span><span style="color:#000000;">.ControlFlags </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">0x0004</span><span style="color:#000000;">

    </span><span style="color:#008000;">#</span><span style="color:#008000;">AceType=1 - Deny</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">for</span><span style="color:#000000;">(</span><span style="color:#800080;">$i</span><span style="color:#FF0000;">=</span><span style="color:#000000;">0</span><span style="color:#000000;">;</span><span style="color:#800080;">$i</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-lt</span><span style="color:#000000;"> </span><span style="color:#800080;">$ace</span><span style="color:#000000;">.length;</span><span style="color:#800080;">$i</span><span style="color:#000000;">++)
    {
        </span><span style="color:#0000FF;">if</span><span style="color:#000000;">(</span><span style="color:#800080;">$ace</span><span style="color:#000000;">[</span><span style="color:#800080;">$i</span><span style="color:#000000;">].AceType </span><span style="color:#FF0000;">-ne</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">)
        {
            </span><span style="color:#800080;">$SD</span><span style="color:#000000;">.dacl </span><span style="color:#FF0000;">+=</span><span style="color:#000000;"> </span><span style="color:#800080;">$ace</span><span style="color:#000000;">[</span><span style="color:#800080;">$i</span><span style="color:#000000;">]
        }
    }
    </span><span style="color:#800080;">$reg</span><span style="color:#000000;">.SetSecurityDescriptor(</span><span style="color:#800080;">$hkey</span><span style="color:#000000;">,</span><span style="color:#800080;">$hsubkey</span><span style="color:#000000;">,</span><span style="color:#800080;">$sd</span><span style="color:#000000;">)

    </span><span style="color:#008000;">#</span><span style="color:#008000;">Когда мы удалили запрещаюищее правило,мы снова можем посмотреть ACL</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#5F9EA0;font-weight:bold;">PS</span><span style="color:#000000;">  &gt;  </span><span style="color:#800000;">Get-Acl</span><span style="color:#000000;"> HKCU:\Test | </span><span style="color:#5F9EA0;font-weight:bold;">Out-String</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-Width</span><span style="color:#000000;"> </span><span style="color:#000000;">80</span><span style="color:#000000;">

Path                       Owner                      Access
--</span><span style="color:#FF0000;">--</span><span style="color:#000000;">                       ---</span><span style="color:#FF0000;">--</span><span style="color:#000000;">                      ----</span><span style="color:#FF0000;">--</span><span style="color:#000000;">
Microsoft.PowerShell.Co... WINPC\Александр            WINPC\Александр Allow

PS. Но лучше использовать для этого утилиты SubInAcl,SetAcl.

    </span></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kazunposh.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kazunposh.wordpress.com/247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kazunposh.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kazunposh.wordpress.com/247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kazunposh.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kazunposh.wordpress.com/247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kazunposh.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kazunposh.wordpress.com/247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kazunposh.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kazunposh.wordpress.com/247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kazunposh.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kazunposh.wordpress.com/247/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kazunposh.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kazunposh.wordpress.com/247/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=247&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kazunposh.wordpress.com/2012/02/02/qa-4-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc601b5bec21303a9f9505d8735d07f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kazunposh</media:title>
		</media:content>
	</item>
		<item>
		<title>Q&amp;A</title>
		<link>http://kazunposh.wordpress.com/2012/01/17/qa-3/</link>
		<comments>http://kazunposh.wordpress.com/2012/01/17/qa-3/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 20:52:51 +0000</pubDate>
		<dc:creator>Kazun</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Q&A]]></category>

		<guid isPermaLink="false">http://kazunposh.wordpress.com/?p=233</guid>
		<description><![CDATA[1) Как найти строку в которой присутствует два слова? Более подробно про регулярные выражения,Вы можете прочитать в блоге Василия Гусева &#8211; http://xaegr.wordpress.com/category/regular-expressions/ 2) Как получить удаленный доступ к 64-x реестру из 32-x битного процесса? Для этого требуется,чтобы на компьюетер был установлен .Net 4.0. Скрипт &#8220;Access 64bit registry values from 32bit powershell&#8221; &#8211; использует Com объекты(не [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=233&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>1) Как найти строку в которой присутствует два слова?<br />
<pre class="brush: powershell;">
&quot;Вы заглянули в Интернет-магазин кормов для собак и кошек&quot; -match &quot;(?=.+кошек)(?=.+собак)&quot;
</pre></p>
<p>Более подробно про регулярные выражения,Вы можете прочитать в блоге Василия Гусева &#8211; http://xaegr.wordpress.com/category/regular-expressions/</p>
<p>2) Как получить удаленный доступ к 64-x реестру из 32-x битного процесса?<br />
Для этого требуется,чтобы на компьюетер был установлен .Net 4.0.</p>
<p>Скрипт &#8220;<a href="http://gallery.technet.microsoft.com/scriptcenter/6062bbfc-53bf-4f92-994d-08f18c8324c0">Access 64bit registry values from 32bit powershell</a>&#8221; &#8211; использует Com объекты(не требует .Net 4.0, но  и сложен).</p>
<p>Shay Levy написал два модуля для V3 и V2:<br />
V2 &#8211; http://archive.msdn.microsoft.com/PSRemoteRegistry<br />
V3 &#8211; http://psrr.codeplex.com/</p>
<p>3) Как установить изображение учетной записи?<br />
<pre class="brush: powershell;">
$code = @&quot;
[DllImport(&quot;shell32.dll&quot;, EntryPoint = &quot;#262&quot;, CharSet = CharSet.Unicode, PreserveSig = false)]  
public static extern void SetUserTile(string username, int notneeded, string picturefilename);
&quot;@

Add-Type -MemberDefinition $code -Name UserTile -Namespace System

#Применение
[UserTile]::SetUserTile(&quot;domain\username&quot;,&quot;picturefilename.jpg&quot;)
</pre></p>
<p>4) Как установить максимальный строк действия пароля неограничен?<br />
<pre class="brush: powershell;">
Set-ADDefaultDomainPasswordPolicy contoso.com -MaxPasswordAge ([timespan]::MinValue)
</pre><br />
5) Как экранировать символ \ в фильтре командлетов Active Directory ?</p>
<p>Для экранирования символа \ &#8211; используйте escape-последовательность \5c. Про остальные символы &#8211; можно прочитать в стандартной справке &#8211; about_ActiveDirectory_Filter</p>
<p>Как пример,найти всех пользователей у которых профайл хранится на определенной общей папке:<br />
<pre class="brush: powershell;">
Get-ADUser -Filter &quot;ProfilePath -like '\5c\5ceserver1\5cProfiles$\5c*'&quot; -Properties profilepath
</pre><br />
6) Как очистить корзину для конкретного пользователя или для всех?<br />
<pre class="brush: powershell;">
#xp/2003
$shell = New-Object –ComObject Shell.Application
$rb = $shell.NameSpace(0xA).Self
$rb.InvokeVerb(&quot;Empty Recycle &amp;Bin&quot;)

#Vista и выше
$shell = New-Object –ComObject Shell.Application
$shell.NameSpace(0xA).Items() | Remove-Item -Recurse

#Для всех пользователей
#Recycle - Xp/2003/Vista
#$Recycle.Bin - 7
$disks = Get-WmiObject Win32_LogicalDisk -Filter &quot;DriveType=3&quot;

foreach ($disk in $disks)
{
	$rbpathold = &quot;$($disk.DeviceID)\Recycle&quot;
	$rbpathnew = &quot;$($disk.DeviceID)\`$Recycle.Bin&quot;
	
	if (Test-Path $rbpathold)
	{
		Remove-Item $rbpathold -Force -Recurse
	}
	
	if (Test-Path $rbpathnew)
	{
		Remove-Item $rbpathnew -Force -Recurse 
	}
}
</pre></p>
<p>7) Как установить значение параметров во вкладе &#8220;Совместимость&#8221; для приложения?</p>
<p>Для управления параметрами воспользуемся реестром.</p>
<p><pre class="brush: powershell;">
#Для конкретного пользователя,путь в реестре 
&quot;HKCU:\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers&quot;

#Для всех пользователей,путь в реестре
&quot;HKLM:\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers&quot;

Name - путь к приложению
Type - REG_SZ
Value - параметры(через пробел)

Run in 256 colors - 256COLOR
Run in 640 x 480 screen resolution - 640X480
Disable visual themes - DISABLETHEMES
Disable Desktop composition - DISABLEDWM 
Disable display scaling on hight DPI settings - HIGHDPIAWARE
Run this  program run as an administrator - RUNASADMIN

Установить для приложения все эти параметры - &quot;256COLOR 640X480 DISABLETHEMES DISABLEDWM HIGHDPIAWARE RUNASADMIN&quot; 
</pre><br />
<pre class="brush: powershell;">
Set-ItemProperty -Path &quot;HKLM:\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers&quot; -Name &quot;C:\Program\calcX.exe&quot; -Value &quot;256COLOR 640X480 DISABLETHEMES DISABLEDWM HIGHDPIAWARE RUNASADMIN&quot; 

Set-ItemProperty -Path &quot;HKCU:\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers&quot; -Name &quot;C:\Program\calcX.exe&quot; -Value &quot;256COLOR 640X480 DISABLETHEMES DISABLEDWM HIGHDPIAWARE RUNASADMIN&quot; 
</pre></p>
<p>Чтобы параметры вступили в силу требуется перезагрузка или рестарт explorer.</p>
<p>8) Как установить свойство AutomaticManagedPage у класса Win32_ComputerSystem?</p>
<p>Для установки AutomaticManagedPage, требуется ,чтобы PowerShell был запущен в режиме STA и с правами администратора.<br />
<pre class="brush: powershell;">
Start-Process powershell -Arg &quot;-STA&quot; -Verb RunAs

$System = Get-WmiObject Win32_ComputerSystem 
$System.AutomaticManagedPagefile = $False
$System.Put()

</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kazunposh.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kazunposh.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kazunposh.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kazunposh.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kazunposh.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kazunposh.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kazunposh.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kazunposh.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kazunposh.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kazunposh.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kazunposh.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kazunposh.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kazunposh.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kazunposh.wordpress.com/233/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=233&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kazunposh.wordpress.com/2012/01/17/qa-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc601b5bec21303a9f9505d8735d07f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kazunposh</media:title>
		</media:content>
	</item>
		<item>
		<title>Q&amp;A</title>
		<link>http://kazunposh.wordpress.com/2012/01/06/qa-2/</link>
		<comments>http://kazunposh.wordpress.com/2012/01/06/qa-2/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 11:44:15 +0000</pubDate>
		<dc:creator>Kazun</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Q&A]]></category>

		<guid isPermaLink="false">http://kazunposh.wordpress.com/?p=226</guid>
		<description><![CDATA[1) Как программно отключить монитор? 2) Какие ярлыки соответствуют данному exe? 3) Какой класс использовать для работы с большими целыми числами? В .Net 4.0 есть структура BigInteger Structure для работы с большими числами. По умолчанию в PowerShell V2 не включена поддержка .Net 4.0, для включение &#8211; http://tfl09.blogspot.com/2010/08/using-newer-versions-of-net-with.html 4) Как сделать побитовый сдвиг? V2 : Используйте [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=226&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>1) Как программно отключить монитор?</p>
<p><pre class="brush: powershell;">
$signature = @&quot;
    [DllImport(&quot;User32.DLL&quot;)]
    public static extern int SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);
&quot;@

$type = Add-Type -MemberDefinition $signature -Name Win32 -Namespace SendMessage -PassThru
$type::SendMessage(0xFFFF,0x0112,0xF170,2)
</pre></p>
<p>2) Какие ярлыки соответствуют данному exe?<br />
<pre class="brush: powershell;">
Get-WmiObject Win32_ShortcutFile  -Filter &quot;Target='C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe'&quot;
</pre></p>
<p>3) Какой класс использовать для работы с большими целыми числами?</p>
<p>В .Net 4.0 есть структура <a href="http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx">BigInteger Structure</a> для работы с большими числами. По умолчанию в PowerShell V2 не включена поддержка .Net 4.0, для включение &#8211; http://tfl09.blogspot.com/2010/08/using-newer-versions-of-net-with.html</p>
<p>4) Как сделать побитовый сдвиг?</p>
<p>V2 : Используйте скрипт http://huddledmasses.org/powershell-needs-shift-operators/</p>
<p>V3 : Появились встроенные операторы для побитового сдвига, -shl и -shr</p>
<p>5) Как просто сгенерировать пароль?</p>
<p><pre class="brush: powershell;">
Function Get-Password {
        param($number=1,$length=10)
        $rand = New-Object System.Random
        for($i=0;$i -lt $number;$i++)
        {
                -join (1..$length | ForEach { [char]$rand.next(33,127) })
        }
}

PS &gt; Get-Password -number 5 -length 15
1'K[jc_K8fLV4V:
,Y;u*r)u!9-,lr$
v$m6@`-I:gpY0yG
4~YC1MNlMe)0KB]
XrX4oIh|7X~0&quot;.9
</pre></p>
<p>6) Как работать с путями больше 256 символов?</p>
<p>Модуль &#8211; http://huddledmasses.org/long-path-module-experimental-io/</p>
<p>Также можно использовать часть возможностей cmd.exe используя префикс \\?\ &#8211; подробнее можно узнать в статье <a href="http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#namespaces">Naming Files, Paths, and Namespaces</a>.</p>
<p>7) Как преобразовать пароль в Base64 для использование в атрибуте unicodepwd?</p>
<p>VBS &#8211; http://www.rlmueller.net/Programs/PwdToBase64.txt<br />
Вручную &#8211; http://www.oszone.net/13669/Active-Directory-UnicodePwd-AD-LDS</p>
<p>И в одну строчку на PowerShell, двойные кавычки обязательные.</p>
<p>[convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes(&#8216;&#8221;xZy$132#q!&#8221;&#8216;))</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kazunposh.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kazunposh.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kazunposh.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kazunposh.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kazunposh.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kazunposh.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kazunposh.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kazunposh.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kazunposh.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kazunposh.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kazunposh.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kazunposh.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kazunposh.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kazunposh.wordpress.com/226/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=226&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kazunposh.wordpress.com/2012/01/06/qa-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc601b5bec21303a9f9505d8735d07f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kazunposh</media:title>
		</media:content>
	</item>
		<item>
		<title>Как программно открыть CD-ROM с помощью PowerShell</title>
		<link>http://kazunposh.wordpress.com/2012/01/06/%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%bd%d0%be-%d0%be%d1%82%d0%ba%d1%80%d1%8b%d1%82%d1%8c-cd-rom-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-powershell/</link>
		<comments>http://kazunposh.wordpress.com/2012/01/06/%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%bd%d0%be-%d0%be%d1%82%d0%ba%d1%80%d1%8b%d1%82%d1%8c-cd-rom-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-powershell/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 11:13:27 +0000</pubDate>
		<dc:creator>Kazun</dc:creator>
				<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://kazunposh.wordpress.com/?p=221</guid>
		<description><![CDATA[1)      Использование ComObject &#8211; WMPlayer.OCX.7 2)      Использование ComObject &#8211; Shell.Application Данная библиотека хорошо документирована , подробнее можно прочитать на сайте &#8211; http://msdn.microsoft.com/en-us/library/bb774094(v=vs.85).aspx Константы можно также посмотреть на сайте &#8211; ShellSpecialFolderConstants enumeration, нам потребуется только одна константа: ssfDRIVES 0&#215;11 (17). My Computer—the virtual folder that contains everything on the local computer: storage devices, printers, and Control [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=221&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>1)      Использование ComObject &#8211; WMPlayer.OCX.7</p>
<p><pre class="brush: powershell;">
$cds = (New-Object -ComObject &quot;WMPlayer.OCX.7&quot;).cdromcollection
#Количество cd-rom's в системе
$cds.count
#Какой букве,соответсвует номер в коллекции
0..($cds.count-1) | select @{n=&quot;ItemCount&quot;;e={$_}},@{n=&quot;driveSpecifier&quot;;e={$cds.item($_).driveSpecifier}}
#Извлечь первый в номере коллекции
$cds.item(0).eject()
#Для закрытия 
$cds.item(0).eject()
#Извлечь по букве
$cds.getByDriveSpecifier(&quot;X&quot;).Eject()
#Для закрытия
$cds.getByDriveSpecifier(&quot;X&quot;).Eject()


Пример вывода
PS &gt;  0..($cds.count-1) | select @{n=&quot;ItemCount&quot;;e={$_}},@{n=&quot;driveSpecifier&quot;;e={$cds.item($_).driveSpecifier}}

                                                 ItemCount driveSpecifier
                                                 --------- --------------
                                                         0 D:
                                                         1 I:

PS &gt;  $cds.item(1).eject()
PS &gt;  $cds.getByDriveSpecifier(&quot;I&quot;).Eject()
</pre></p>
<p>2)      Использование ComObject &#8211; Shell.Application</p>
<p>Данная библиотека хорошо документирована , подробнее можно прочитать на сайте &#8211; <a href="http://msdn.microsoft.com/en-us/library/bb774094(v=vs.85).aspx"><span style="color:#0000ff;">http://msdn.microsoft.com/en-us/library/bb774094(v=vs.85).aspx</span></a></p>
<p>Константы можно также посмотреть на сайте &#8211; <a href="http://msdn.microsoft.com/en-us/library/bb774096(v=vs.85).aspx"><span style="color:#0000ff;">ShellSpecialFolderConstants enumeration</span></a>, нам потребуется только одна константа:</p>
<p><strong>ssfDRIVES</strong></p>
<p>0&#215;11 (17). My Computer—the virtual folder that contains everything on the local computer: storage devices, printers, and Control Panel. This folder can also contain mapped network drives.</p>
<p>PS. Глагола для закрытия CD-ROM’a я не нашел.</p>
<p><pre class="brush: powershell;">
$shellapp = New-Object -comObject Shell.Application
#Количество cd-rom's в системе
$shellapp.Namespace(17).Items() | Where {$_.Type -eq &quot;CD Drive&quot;}
#Какие действия можно выполнять над объектом,используя Verb
#Основная проблема,что зависит от локализации системы
$shellapp.Namespace(17).ParseName(&quot;X:&quot;).Verbs()
#Для англоязычной Windows - глагол Eject
$shellapp.Namespace(17).ParseName(&quot;X:&quot;).InvokeVerb(&quot;Eject&quot;)

Пример вывода:

PS &gt; $shellapp.Namespace(17).Items() | Where {$_.Type -eq &quot;CD Drive&quot;}
Application  : System.__ComObject
Parent       : System.__ComObject
Name         : BD-ROM Drive (D:)
Path         : D:\
GetLink      : 
GetFolder    : System.__ComObject
IsLink       : False
IsFolder     : True
IsFileSystem : True
IsBrowsable  : False
ModifyDate   : 30.12.1899 0:00:00
Size         : 0
Type         : CD Drive

Application  : System.__ComObject
Parent       : System.__ComObject
Name         : DVD RW Drive (I:)
Path         : I:\
GetLink      : 
GetFolder    : System.__ComObject
IsLink       : False
IsFolder     : True
IsFileSystem : True
IsBrowsable  : False
ModifyDate   : 30.12.1899 0:00:00
Size         : 0
Type         : CD Drive


PS &gt;  $shellapp.Namespace(17).ParseName(&quot;I:&quot;)


Application  : System.__ComObject
Parent       : System.__ComObject
Name         : DVD RW Drive (I:)
Path         : I:\
GetLink      :
GetFolder    : System.__ComObject
IsLink       : False
IsFolder     : True
IsFileSystem : True
IsBrowsable  : False
ModifyDate   : 30.12.1899 0:00:00
Size         : 0
Type         : CD Drive

PS &gt; $shellapp.Namespace(17).ParseName(&quot;I:&quot;).Verbs() | Select Name

Name
----
&amp;Open

Burn &amp;to disc
Scan selected files with Anti&amp;Vir
Form&amp;at...
E&amp;ject
&amp;Copy
Create &amp;shortcut
P&amp;roperties

PS &gt; $shellapp.Namespace(17).ParseName(&quot;I:&quot;).InvokeVerb(&quot;Eject&quot;)
</pre></p>
<p>3)      Использование WinAPI – mciSendString</p>
<p>Документация по функции, можно посмотреть на msdn &#8211; <a href="http://msdn.microsoft.com/en-us/library/dd757161(v=vs.85).aspx"><span style="color:#0000ff;">mciSendString</span></a> , определение данной функции для C#, можно посмотреть на pInvoke &#8211; <a href="http://pinvoke.net/default.aspx/winmm.mciSendString"><span style="color:#0000ff;">mciSendString</span></a>.</p>
<p><pre class="brush: powershell;">
#Количество cd-rom's в системе
Get-WmiObject Win32_CDROMDrive

$code = @&quot;
[DllImport(&quot;winmm.dll&quot;)]
public static extern Int32 mciSendString(String command, StringBuilder buffer, Int32 bufferSize, IntPtr hwndCallback);
&quot;@
$cdrom = Add-Type -MemberDefinition $code -Name System -Namespace CDROM -UsingNamespace System.Text -PassThru 
#OPEN
$cdrom::mciSendString(&quot;open X: type CDAudio alias driveX&quot;, $null, 0, [IntPtr]::Zero)
$cdrom::mciSendString(&quot;set driveX door open&quot;, $null, 0, [IntPtr]::Zero)
#CLOSE
$cdrom::mciSendString(&quot;open X: type CDAudio alias driveI&quot;, $null, 0, [IntPtr]::Zero)
$cdrom::mciSendString(&quot;set driveX door closed&quot;, $null, 0, [IntPtr]::Zero)


Пример вывода:

PS &gt; Get-WmiObject Win32_CDROMDrive | Select Caption,Drive

Caption                                                     Drive
-------                                                     -----
Optiarc DVD RW AD-7203A ATA Device                          I:
WDKVYZW YJ85M3OT SCSI CdRom Device                          D:

PS &gt; $drive = &quot;I&quot;
PS &gt; $string = &quot;open $drive`: type CDAudio alias drive$drive&quot;
PS &gt; $cdrom::mciSendString($string, $null, 0, [IntPtr]::Zero)
0
PS &gt; $setstring = &quot;set drive$drive door open&quot;
PS &gt; $cdrom::mciSendString($setstring, $null, 0, [IntPtr]::Zero)
0
PS &gt; $clsstring = &quot;set drive$drive door closed&quot;
PS &gt; $cdrom::mciSendString($clsstring, $null, 0, [IntPtr]::Zero)
0
</pre></p>
<p>4)      Использование других WinAPi функций</p>
<p>Пример класса для C# был взят с сайта &#8211; <a href="http://stackoverflow.com/questions/1449410/programatically-ejecting-and-retracting-the-cd-drive-in-vb-net-or-c-sharp"><span style="color:#0000ff;">http://stackoverflow.com/questions/1449410/programatically-ejecting-and-retracting-the-cd-drive-in-vb-net-or-c-sharp</span></a> за авторством C# гуру <a href="http://msmvps.com/blogs/jon_skeet/"><span style="color:#0000ff;">Jon Skeet</span></a>. Здесь лишь небольшая косметическая правка и адаптировано для PowerShell.</p>
<p><pre class="brush: powershell;">
$code = @&quot;
using System; 
using System.IO; 
using System.Runtime.InteropServices; 

namespace  System
{
	public class CDROM
	{ 
	    const int OPEN_EXISTING = 3; 
	    const uint GENERIC_READ = 0x80000000; 
	    const uint GENERIC_WRITE = 0x40000000; 
	    const uint IOCTL_STORAGE_EJECT_MEDIA = 2967560; 
	 
	    [DllImport(&quot;kernel32&quot;)] 
	    private static extern IntPtr CreateFile 
	        (string filename, uint desiredAccess,  
	         uint shareMode, IntPtr securityAttributes, 
	         int creationDisposition, int flagsAndAttributes,  
	         IntPtr templateFile); 
	 
	    [DllImport(&quot;kernel32&quot;)] 
	    private static extern int DeviceIoControl 
	        (IntPtr deviceHandle, uint ioControlCode,  
	         IntPtr inBuffer, int inBufferSize, 
	         IntPtr outBuffer, int outBufferSize,  
	         ref int bytesReturned, IntPtr overlapped); 
	 
	    [DllImport(&quot;kernel32&quot;)] 
	    private static extern int CloseHandle(IntPtr handle); 
	 
	    public static void EjectMedia(char driveLetter) 
	    { 
	        string path = &quot;\\\\.\\&quot; + driveLetter + &quot;:&quot;; 
	        IntPtr handle = CreateFile(path, GENERIC_READ | GENERIC_WRITE, 0,  
	                                   IntPtr.Zero, OPEN_EXISTING, 0, 
	                                   IntPtr.Zero); 
	        if ((long) handle == -1) 
	        { 
	            throw new IOException(&quot;Unable to open drive &quot; + driveLetter); 
	        } 
	        int dummy = 0; 
	        DeviceIoControl(handle, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero, 0,  
	                        IntPtr.Zero, 0, ref dummy, IntPtr.Zero); 
	        CloseHandle(handle); 
	    } 
	}
}
&quot;@
Add-Type -TypeDefinition $code 

Пример вывода:

PS &gt; Get-WmiObject Win32_CDROMDrive | Select Caption,Drive

Caption                                                     Drive
-------                                                     -----
Optiarc DVD RW AD-7203A ATA Device                          I:
WDKVYZW YJ85M3OT SCSI CdRom Device                          D:

PS &gt;  [CDROM]::EjectMedia(&quot;I&quot;)

</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kazunposh.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kazunposh.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kazunposh.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kazunposh.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kazunposh.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kazunposh.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kazunposh.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kazunposh.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kazunposh.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kazunposh.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kazunposh.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kazunposh.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kazunposh.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kazunposh.wordpress.com/221/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=221&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kazunposh.wordpress.com/2012/01/06/%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%bd%d0%be-%d0%be%d1%82%d0%ba%d1%80%d1%8b%d1%82%d1%8c-cd-rom-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-powershell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc601b5bec21303a9f9505d8735d07f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kazunposh</media:title>
		</media:content>
	</item>
		<item>
		<title>Управление Access-based enumeration с помощью PowerShell</title>
		<link>http://kazunposh.wordpress.com/2011/12/11/%d1%83%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-access-based-enumeration-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-powershell/</link>
		<comments>http://kazunposh.wordpress.com/2011/12/11/%d1%83%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-access-based-enumeration-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-powershell/#comments</comments>
		<pubDate>Sun, 11 Dec 2011 15:53:28 +0000</pubDate>
		<dc:creator>Kazun</dc:creator>
				<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://kazunposh.wordpress.com/?p=217</guid>
		<description><![CDATA[По умолчанию в Windows нет консольного приложения для управления ABE. Более подробно про ABE,можно узнать в блоге Алексея Горбунова и ABE Graphical User Interface , во второй ссылке подробно рассказывается, какие API используются для управления ABE. Утилита командной строки для управления ABE(более подробно смотри во второй ссылке): ABECMD &#8211; http://www.microsoft.com/download/en/details.aspx?displaylang=en&#38;id=17510 В статье про “управление кэшированием [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=217&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:small;">По умолчанию в Windows нет консольного приложения для управления ABE. Более подробно про ABE,можно узнать в <a href="http://agorbunov.blogspot.com/2010/11/access-based-enumeration-abe.html">блоге Алексея Горбунова</a> и <a href="http://download.microsoft.com/download/4/9/8/498eeeef-97b0-450e-8e56-26105d4b092e/accessbasedenum.doc">ABE Graphical User Interface</a> , во второй ссылке подробно рассказывается, какие API используются для управления ABE. </span></p>
<p><span style="font-size:small;">Утилита командной строки для управления ABE(более подробно смотри во второй ссылке):</span></p>
<p><span style="font-size:small;">ABECMD &#8211; </span><a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=17510"><span style="font-size:small;">http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=17510</span></a></p>
<p><span style="font-size:small;">В статье про “</span><a href="http://kazunposh.wordpress.com/2011/11/04/%d1%83%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%bc-%d0%ba%d1%8d%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%b4%d0%bb/"><span style="color:#0000ff;font-size:small;">управление кэшированием общих папок</span></a><span style="font-size:small;">”, весь функционал скрипта уже был реализован, поэтому достаточно было добавить только флаг </span><strong><a href="http://msdn.microsoft.com/en-us/library/bb525404(v=vs.85).aspx"><span style="color:#0000ff;font-family:Calibri;">FLAGS_ACCESS_BASED_DIRECTORY_ENUM</span></a><span style="font-family:Calibri;">, </span></strong><span style="font-size:small;"><span style="font-family:Calibri;">который равняется 0&#215;0800<strong>.</strong></span></span></p>
<p><pre class="brush: powershell;">
$code = @&quot;
public enum CacheType
{
	Manual    = 0x00,
	Documents = 0x10,
	Programs  = 0x20,
	None      = 0x30,
}

public const int FLAGS_ACCESS_BASED_DIRECTORY_ENUM = 0x0800;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SHARE_INFO_1005
{
    public uint shi1005_flags;
}

[DllImport(&quot;Netapi32&quot;, CharSet=CharSet.Auto)]
    public static extern int NetApiBufferFree(IntPtr Buffer);

[DllImport(&quot;Netapi32.dll&quot;, SetLastError=true)]
public static extern int NetShareGetInfo(
    [MarshalAs(UnmanagedType.LPWStr)] string serverName,
    [MarshalAs(UnmanagedType.LPWStr)] string netName,
    Int32 level,
    out IntPtr bufPtr );

[DllImport(&quot;Netapi32.dll&quot;, CharSet = CharSet.Unicode)]
public static extern uint NetShareSetInfo(string servername, string netname,
    uint level, ref SHARE_INFO_1005 buf, out uint paramerror);
&quot;@

Add-Type -MemberDefinition $code -name Share -namespace System

function Get-ShareABE
{
	param(
			[parameter(Mandatory=$true,ValueFromPipeline=$true,
			ValueFromPipelineByPropertyName=$true)]
			[Alias(&quot;Name&quot;)]
			[string]$ShareName
		)

	process {
		$bufptr = [IntPtr]::Zero
		$return = [Share]::NetShareGetInfo($null,$ShareName,1005,[ref]$bufptr)
		if($return -eq 0)
		{
			$Enable = &quot;Disabled&quot;
			$str1005 = [System.Runtime.InteropServices.Marshal]::PtrToStructure($bufptr,[Share+SHARE_INFO_1005])
			$value = $str1005.shi1005_flags
			if ($value -band [Share]::FLAGS_ACCESS_BASED_DIRECTORY_ENUM)
			{
				$Enable = &quot;Enabled&quot;
			}
			Get-WmiObject Win32_Share -Filter &quot;Name='$ShareName'&quot; | Select-Object Name,`
				Path,Description,@{n=&quot;ABE&quot;;e={$Enable}},@{n=&quot;Flag&quot;;e={$value}}
		}
		else
		{
			Write-Host (net helpmsg $return)
		}
		[Share]::NetApiBufferFree($bufptr) | Out-Null
	}
}

function Set-ShareABE
{
	param(
		[parameter(Mandatory=$true,Position=0)]
		[string]$ShareName,
		[parameter(Mandatory=$true,Position=1)]
		[ValidateSet(&quot;Enable&quot;, &quot;Disable&quot;)]
		[string]$Type
	)

	$paramerror = 0

	if ($Type -eq &quot;Disable&quot;)
	{
		$flag = (Get-ShareABE -ShareName $ShareName).Flag -bxor [Share]::FLAGS_ACCESS_BASED_DIRECTORY_ENUM
	}
	else
	{
		$flag = [Share]::FLAGS_ACCESS_BASED_DIRECTORY_ENUM
	}
	$buf = New-Object Share+SHARE_INFO_1005 -Property @{shi1005_flags = $flag}
	$return = [Share]::NetShareSetInfo($null,$ShareName,1005,[ref]$buf,[ref]$paramerror)
	if ($return)
	{
		Write-Host (net helpmsg $return)
	}
}
</pre></p>
<p>Применение функции Get-ShareABE:</p>
<p><pre class="brush: powershell;">
PS &gt; Get-ShareABE doesnotexists
 This shared resource does not exist.
PS &gt; Get-ShareABE Test

Name        : TEST
Path        : C:\TEST
Description :
ABE         : Disabled
Flag        : 0

PS &gt; Get-WmiObject Win32_Share | Get-ShareABE

Name        : ADMIN$
Path        : C:\Windows
Description : Remote Admin
ABE         : Disabled
Flag        : 0

Name        : C$
Path        : C:\
Description : Default share
ABE         : Disabled
Flag        : 0

Name        : IPC$
Path        :
Description : Remote IPC
ABE         : Disabled
Flag        : 0

Name        : TEST
Path        : C:\TEST
Description :
ABE         : Disabled
Flag        : 0

</pre></p>
<p>Применение функции Set-ShareABE:</p>
<p><pre class="brush: powershell;">
PS &gt; Get-ShareABE Test

Name        : TEST
Path        : C:\TEST
Description :
ABE         : Disabled
Flag        : 0

PS &gt; Set-ShareABE Test -Type Enable
PS &gt; Get-ShareABE Test

Name        : TEST
Path        : C:\TEST
Description :
ABE         : Enabled
Flag        : 2048

PS &gt; Set-ShareABE Test -Type Disable
PS &gt; Get-ShareABE Test

Name        : TEST
Path        : C:\TEST
Description :
ABE         : Disabled
Flag        : 0
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kazunposh.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kazunposh.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kazunposh.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kazunposh.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kazunposh.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kazunposh.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kazunposh.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kazunposh.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kazunposh.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kazunposh.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kazunposh.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kazunposh.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kazunposh.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kazunposh.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=217&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kazunposh.wordpress.com/2011/12/11/%d1%83%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-access-based-enumeration-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-powershell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc601b5bec21303a9f9505d8735d07f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kazunposh</media:title>
		</media:content>
	</item>
		<item>
		<title>Q&amp;A</title>
		<link>http://kazunposh.wordpress.com/2011/12/09/qa/</link>
		<comments>http://kazunposh.wordpress.com/2011/12/09/qa/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 21:58:53 +0000</pubDate>
		<dc:creator>Kazun</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Q&A]]></category>

		<guid isPermaLink="false">http://kazunposh.wordpress.com/?p=211</guid>
		<description><![CDATA[1) Как получить номер недели в месяце (1-5)? Function Get-WeekOfMonth { param ([datetime]$date = (Get-Date)) $beginningOfMonth = New-Object DateTime($date.Year,$date.Month,1) while ($date.Date.AddDays(1).DayOfWeek -ne (Get-Culture).DateTimeFormat.FirstDayOfWeek) { $date = $date.AddDays(1) } [int]([Math]::Truncate($date.Subtract($beginningOfMonth).TotalDays / 7) + 1) } 2) Как отключить &#8220;X&#8221; в консоли PowerShell? $code = @" [DllImport("user32.dll")] public static extern int DeleteMenu(IntPtr hMenu, int nPosition, int wFlags); [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=211&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>1) Как получить номер недели в месяце (1-5)?</p>
<pre><span style="color:#0000FF;">Function</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;">Get-WeekOfMonth</span><span style="color:#000000;">
{
    </span><span style="color:#0000FF;">param</span><span style="color:#000000;"> ([</span><span style="color:#008080;">datetime</span><span style="color:#000000;">]</span><span style="color:#800080;">$date</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> (</span><span style="color:#5F9EA0;font-weight:bold;">Get-Date</span><span style="color:#000000;">)) 

    </span><span style="color:#800080;">$beginningOfMonth</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> DateTime(</span><span style="color:#800080;">$date</span><span style="color:#000000;">.</span><span style="color:#8B4513;">Year</span><span style="color:#000000;">,</span><span style="color:#800080;">$date</span><span style="color:#000000;">.</span><span style="color:#8B4513;">Month</span><span style="color:#000000;">,</span><span style="color:#000000;">1</span><span style="color:#000000;">)  

    </span><span style="color:#0000FF;">while</span><span style="color:#000000;"> (</span><span style="color:#800080;">$date</span><span style="color:#000000;">.</span><span style="color:#8B4513;">Date</span><span style="color:#000000;">.</span><span style="color:#8B4513;">AddDays</span><span style="color:#000000;">(</span><span style="color:#000000;">1</span><span style="color:#000000;">).</span><span style="color:#8B4513;">DayOfWeek</span><span style="color:#000000;"> </span><span style="color:#FF0000;">-ne</span><span style="color:#000000;"> (</span><span style="color:#5F9EA0;font-weight:bold;">Get-Culture</span><span style="color:#000000;">).DateTimeFormat.FirstDayOfWeek)
    {
        </span><span style="color:#800080;">$date</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$date</span><span style="color:#000000;">.</span><span style="color:#8B4513;">AddDays</span><span style="color:#000000;">(</span><span style="color:#000000;">1</span><span style="color:#000000;">)
    } 

    [</span><span style="color:#008080;">int</span><span style="color:#000000;">]([</span><span style="color:#008080;">Math</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Truncate</span><span style="color:#000000;">(</span><span style="color:#800080;">$date</span><span style="color:#000000;">.</span><span style="color:#8B4513;">Subtract</span><span style="color:#000000;">(</span><span style="color:#800080;">$beginningOfMonth</span><span style="color:#000000;">).</span><span style="color:#8B4513;">TotalDays</span><span style="color:#000000;">  </span><span style="color:#FF0000;">/</span><span style="color:#000000;"> </span><span style="color:#000000;">7</span><span style="color:#000000;">) </span><span style="color:#FF0000;">+</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">)
}  </span></pre>
<p>2) Как отключить &#8220;X&#8221; в консоли PowerShell?</p>
<pre><span style="color:#800080;">$code</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">@"
</span><span style="color:#800000;">[DllImport("user32.dll")]
public static extern int DeleteMenu(IntPtr hMenu, int nPosition, int wFlags);

[DllImport("User32")]
public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
</span><span style="color:#800000;">"@</span><span style="color:#000000;">

</span><span style="color:#5F9EA0;font-weight:bold;">Add-Type</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-MemberDefinition</span><span style="color:#000000;"> </span><span style="color:#800080;">$code</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-Name</span><span style="color:#000000;"> </span><span style="color:#800000;">HideClose</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-Namespace</span><span style="color:#000000;"> </span><span style="color:#800000;">System</span><span style="color:#000000;">

</span><span style="color:#800080;">$hMenu</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [HideClose]::GetSystemMenu((</span><span style="color:#5F9EA0;font-weight:bold;">gps</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-style:italic;">-id</span><span style="color:#000000;"> </span><span style="color:#800080;">$pid</span><span style="color:#000000;">).MainWindowHandle, </span><span style="color:#800080;">$false</span><span style="color:#000000;">)
[HideClose]::DeleteMenu(</span><span style="color:#800080;">$hMenu</span><span style="color:#000000;">,</span><span style="color:#000000;">0xF060</span><span style="color:#000000;">, </span><span style="color:#000000;">0</span><span style="color:#000000;">)</span></pre>
<p>3) Как используя метод XMLDocument.Save() сохранить данные в переменную?</p>
<pre><span style="color:#800080;">$mem</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">IO.MemoryStream</span><span style="color:#000000;">
</span><span style="color:#800080;">$writer</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> </span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">IO.StreamWriter</span><span style="color:#000000;">(</span><span style="color:#800080;">$mem</span><span style="color:#000000;">)
</span><span style="color:#800080;">$xml</span><span style="color:#000000;">.Save(</span><span style="color:#800080;">$writer</span><span style="color:#000000;">)
</span><span style="color:#800080;">$var</span><span style="color:#000000;"> </span><span style="color:#FF0000;">=</span><span style="color:#000000;"> [</span><span style="color:#008080;">System.Text.Encoding</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Default</span><span style="color:#000000;">.</span><span style="color:#8B4513;">GetString</span><span style="color:#000000;">(</span><span style="color:#800080;">$mem</span><span style="color:#000000;">.toarray())
</span><span style="color:#800080;">$var</span><span style="color:#000000;">

Или

</span><span style="color:#800080;">$xml</span><span style="color:#000000;">.Save((</span><span style="color:#800080;">$mem</span><span style="color:#000000;">=</span><span style="color:#5F9EA0;font-weight:bold;">New-Object</span><span style="color:#000000;"> </span><span style="color:#800000;">IO.MemoryStream</span><span style="color:#000000;">))
</span><span style="color:#800080;">$var</span><span style="color:#000000;">=[</span><span style="color:#008080;">System.Text.Encoding</span><span style="color:#000000;">]::</span><span style="color:#8B4513;">Default</span><span style="color:#000000;">.</span><span style="color:#8B4513;">GetString</span><span style="color:#000000;">(</span><span style="color:#800080;">$mem</span><span style="color:#000000;">.toarray())</span></pre>
<p>4) Какой метод класса System.Net.DNS лучше использовать?</p>
<p>Для разрешение имен в прямом и обратном направлении,лучше всего использовать статический метод GetHostEntry(IPAddress) и GetHostEntry(String).</p>
<p>5) Как отключить positional parameters?</p>
<p>V2:<br />
param ($badparam,$i1,$i2)<br />
if ($badparam) {&#8220;Вы не ввели обязательные параметры&#8221;}</p>
<p>V3: [CmdletBinding(PositionalBinding=$false)] </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kazunposh.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kazunposh.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kazunposh.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kazunposh.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kazunposh.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kazunposh.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kazunposh.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kazunposh.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kazunposh.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kazunposh.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kazunposh.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kazunposh.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kazunposh.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kazunposh.wordpress.com/211/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=211&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kazunposh.wordpress.com/2011/12/09/qa/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc601b5bec21303a9f9505d8735d07f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kazunposh</media:title>
		</media:content>
	</item>
		<item>
		<title>Как прочитать последние “N” строк из большого файла</title>
		<link>http://kazunposh.wordpress.com/2011/12/09/%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%be%d1%87%d0%b8%d1%82%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d0%bd%d0%b8%d0%b5-n-%d1%81%d1%82%d1%80%d0%be%d0%ba-%d0%b8%d0%b7-%d0%b1/</link>
		<comments>http://kazunposh.wordpress.com/2011/12/09/%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%be%d1%87%d0%b8%d1%82%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d0%bd%d0%b8%d0%b5-n-%d1%81%d1%82%d1%80%d0%be%d0%ba-%d0%b8%d0%b7-%d0%b1/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 21:38:53 +0000</pubDate>
		<dc:creator>Kazun</dc:creator>
				<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://kazunposh.wordpress.com/?p=202</guid>
		<description><![CDATA[Текущие командлеты, не очень хорошо справляются с данной задачей, поэтому эффективным решением – использовать .Net. На одном из форумов, был найден скрипт на C#, который полностью решал эту задачу. Переводить скрипт полностью на PowerShell, я не вижу смысла, хотя код транслируется очень легко. Оригинал скрипта, можно посмотреть  &#8211; http://bit.ly/uR1bUL . Я сделал лишь небольшую обвязку [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=202&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Текущие командлеты, не очень хорошо справляются с данной задачей, поэтому эффективным решением – использовать .Net. На одном из форумов, был найден скрипт на C#, который полностью решал эту задачу. Переводить скрипт полностью на PowerShell, я не вижу смысла, хотя код транслируется очень легко. Оригинал скрипта, можно посмотреть  &#8211; <a href="http://bit.ly/uR1bUL">http://bit.ly/uR1bUL</a> . Я сделал лишь небольшую обвязку в виде функции.</p>
<p><pre class="brush: powershell;">

Function Get-EndTokenFile
{
	&lt;#
	    .SYNOPSIS 
	    Читает последние N строк из файла.

	    .DESCRIPTION
	    Читаем последние N строк из файла с заданной кодировкой(по умолчанию ASCII)
		по заданному пути,который является обязательным параметром.
		
		.PARAMETER Path
		Путь к файлу(полное имя файла).Подстановочные знаки не разрешены.
		
		.PARAMETER Encoding
		Задает тип кодировки, используемой в файле. Пример: &quot;Unicode&quot;, &quot;UTF7&quot;, &quot;UTF8&quot;, 
		&quot;UTF32&quot;, &quot;ASCII&quot;, &quot;BigEndianUnicode&quot;, &quot;Default&quot;,&quot;OEM&quot;,&quot;Windows-1251&quot;. 
		По умолчанию используется кодировка &quot;ASCII&quot;.
		
		.PARAMETER ReadCount
		Количество выводимых строк.По умолчанию используется 1.
		
		.PARAMETER Separator
		Указывает разделитель для строк. По умолчанию используется разделитель `r`n.
		
		.PARAMETER Verbose
		Отображает подробные сведения о действиях, выполняемых командой.
		
		.PARAMETER WhatIf
		Описывает, что произойдет при выполнении команды, без ее фактического выполнения.

	     .EXAMPLE
	     C:\PS&gt; Get-EndTokenFile -Path C:\file.txt
		 
		 .EXAMPLE
	     C:\PS&gt; Get-EndTokenFile -Path C:\file.txt -WhatIf
		 
		 .EXAMPLE
	     C:\PS&gt; Get-EndTokenFile -Path C:\file.txt -ReadCount 2
		 
		 .EXAMPLE
	     C:\PS&gt; Get-EndTokenFile -Path C:\file.txt -Encoding Unicode
		 
		 .EXAMPLE
	     C:\PS&gt; Get-ChildItem C:\Files\*.txt | Get-EndTokenFile 
	#&gt;


	[CmdletBinding(SupportsShouldProcess=$true)]
	param (
			[Parameter(
					Mandatory=$true,
            		ValueFromPipeline=$true,
					ValueFromPipelineByPropertyName=$true
					)]
			[Alias(&quot;FullName&quot;)]
			[string]
			$Path,
			[string]$Encoding = &quot;ASCII&quot;,
			[Int64]$ReadCount = 1,
			[string]$Separator = &quot;`r`n&quot;
		)
			
begin {
$code = @&quot;
public static string ReadEndTokens(string path, Int64 numberOfTokens, Encoding encoding, string tokenSeparator) { 
 
    int sizeOfChar = encoding.GetByteCount(&quot;\n&quot;); 
    byte[] buffer = encoding.GetBytes(tokenSeparator); 
 
 
    using (FileStream fs = new FileStream(path, FileMode.Open)) { 
        Int64 tokenCount = 0; 
        Int64 endPosition = fs.Length / sizeOfChar; 
 
        for (Int64 position = sizeOfChar; position &lt; endPosition; position += sizeOfChar) { 
            fs.Seek(-position, SeekOrigin.End); 
            fs.Read(buffer, 0, buffer.Length); 
 
            if (encoding.GetString(buffer) == tokenSeparator) { 
                tokenCount++; 
                if (tokenCount == numberOfTokens) { 
                    byte[] returnBuffer = new byte[fs.Length - fs.Position]; 
                    fs.Read(returnBuffer, 0, returnBuffer.Length); 
                    return encoding.GetString(returnBuffer); 
                } 
            } 
        } 
 
        // handle case where number of tokens in file is less than numberOfTokens 
        fs.Seek(0, SeekOrigin.Begin); 
        buffer = new byte[fs.Length]; 
        fs.Read(buffer, 0, buffer.Length); 
        return encoding.GetString(buffer); 
    } 
} 
&quot;@

	Add-Type -MemberDefinition $code -Name ReadLong -Namespace System -UsingNamespace System.Text,System.IO
}
process {
	if ($pscmdlet.ShouldProcess(&quot;Производим операцию чтения файла '$Path'.&quot;))
	{
		if (Test-Path $path)
		{
			[ReadLong]::ReadEndTokens($Path,$ReadCount,[System.Text.Encoding]::GetEncoding($Encoding),$Separator)
		}
		else
		{
			Write-Error &quot;Файл $Path не найден.&quot;
		}
	}
	}
}


</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kazunposh.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kazunposh.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kazunposh.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kazunposh.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kazunposh.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kazunposh.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kazunposh.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kazunposh.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kazunposh.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kazunposh.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kazunposh.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kazunposh.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kazunposh.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kazunposh.wordpress.com/202/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=202&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kazunposh.wordpress.com/2011/12/09/%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%be%d1%87%d0%b8%d1%82%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d0%bd%d0%b8%d0%b5-n-%d1%81%d1%82%d1%80%d0%be%d0%ba-%d0%b8%d0%b7-%d0%b1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc601b5bec21303a9f9505d8735d07f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kazunposh</media:title>
		</media:content>
	</item>
		<item>
		<title>Управление процессом кэширования для общих папок с помощью PowerShell</title>
		<link>http://kazunposh.wordpress.com/2011/11/04/%d1%83%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%bc-%d0%ba%d1%8d%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%b4%d0%bb/</link>
		<comments>http://kazunposh.wordpress.com/2011/11/04/%d1%83%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%bc-%d0%ba%d1%8d%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%b4%d0%bb/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 16:34:02 +0000</pubDate>
		<dc:creator>Kazun</dc:creator>
				<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://kazunposh.wordpress.com/?p=198</guid>
		<description><![CDATA[Управление процессом кэширования для общих папок с помощью PowerShell Был задан вопрос: ”Как управлять процессом кэширования с помощью PowerShell?”. Для управления кэшированием в Windows, существует встроенная утилита net,у которой есть ключ /cache. Данный ключ принимает следующие параметры: Для просмотра состояния кэширования для общей папки, можно воспользоваться, следующим синтаксисом: На мой взгляд, утилита net,предоставляет простой и [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=198&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Управление процессом кэширования для общих папок с помощью PowerShell</p>
<p>Был задан вопрос: ”Как управлять процессом кэширования с помощью PowerShell?”. Для управления кэшированием в Windows, существует встроенная утилита net,у которой есть ключ /cache. Данный ключ принимает следующие параметры:</p>
<p><pre class="brush: powershell;">
PS &gt;  net share /?
	[/CACHE:Manual | Documents | Programs | BranchCache | None]
</pre></p>
<p>Для просмотра состояния кэширования для общей папки, можно воспользоваться, следующим синтаксисом:</p>
<p><pre class="brush: powershell;">
Syntax: net share sharename

PS &gt;  net share C$
Share name        C$
Path              C:\
Remark            Стандартный общий ресурс
Maximum users     No limit
Users
Caching           Manual caching of documents
Permission        Все, FULL

The command completed successfully.
</pre></p>
<p>На мой взгляд, утилита net,предоставляет простой и удобный способ управления – параметром кэширования. И именно его предпочтительней использовать в своих скриптах.</p>
<p>Попробуем реализовать данный функционал, используя стандартные WinApi функции. Для этого нам потребуется две функции и одна структура:</p>
<p>1)      <a href="http://msdn.microsoft.com/en-us/library/bb525388(VS.85).aspx">NetShareGetInfo</a>  – для получения состояние кэширования;</p>
<p>2)      <a href="http://msdn.microsoft.com/en-us/library/bb525389(v=VS.85).aspx">NetShareSetInfo</a>  – для установки параметра кэширования;<br />
3)      <a href="http://msdn.microsoft.com/en-us/library/bb525404(v=VS.85).aspx">_SHARE_INFO_1005</a>– содержит информацию о кэшировании;</p>
<p>Структура _<a href="http://msdn.microsoft.com/en-us/library/bb525404(v=VS.85).aspx">SHARE_INFO_1005</a> , поддерживает большое количество битовых флагов, но нам потребуется только флаг CSC_MASK, более подробно смотрите по ссылке выше. Определение данных функций для C#,можно посмотреть на сайте<strong> – </strong><strong><a href="http://pinvoke.net/">Pinvoke</a></strong><strong>.</strong><br />
<strong> </strong></p>
<p><pre class="brush: powershell;">
$code = @&quot;
public enum CacheType
{
	Manual    = 0x00,
	Documents = 0x10,
	Programs  = 0x20,
	None      = 0x30,
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SHARE_INFO_1005
{
    public uint shi1005_flags;
}

[DllImport(&quot;Netapi32&quot;, CharSet=CharSet.Auto)]
    public static extern int NetApiBufferFree(IntPtr Buffer);

[DllImport(&quot;Netapi32.dll&quot;, SetLastError=true)]
public static extern int NetShareGetInfo(
    [MarshalAs(UnmanagedType.LPWStr)] string serverName,
    [MarshalAs(UnmanagedType.LPWStr)] string netName,
    Int32 level,
    out IntPtr bufPtr );

[DllImport(&quot;Netapi32.dll&quot;, CharSet = CharSet.Unicode)]
public static extern uint NetShareSetInfo(string servername, string netname,
    uint level, ref SHARE_INFO_1005 buf, out uint paramerror);
&quot;@

Add-Type -MemberDefinition $code -name Share -namespace System

function Get-ShareCache
{
	param(
			[parameter(Mandatory=$true,ValueFromPipeline=$true,
			ValueFromPipelineByPropertyName=$true)]
			[Alias(&quot;Name&quot;)]
			[string]$ShareName
		)

	process {
		$bufptr = [IntPtr]::Zero
		$return = [Share]::NetShareGetInfo($null,$ShareName,1005,[ref]$bufptr)
		if($return -eq 0)
		{
			$str1005 = [System.Runtime.InteropServices.Marshal]::PtrToStructure($bufptr,[Share+SHARE_INFO_1005])
			$value = $str1005.shi1005_flags
			Get-WmiObject Win32_Share -Filter &quot;Name='$ShareName'&quot; | Select-Object Name,`
				Path,Description,@{n=&quot;Caching&quot;;e={
				1,2,256,512,1024,2048,4096 | Foreach {
					if ($value -band $_)
					{
						$value -= $_
					}
				}
				$value -as [Share+CacheType]}}
		}
		else
		{
			Write-Host (net helpmsg $return)
		}
		[Share]::NetApiBufferFree($bufptr) | Out-Null
	}
}

function Set-ShareCache
{
	param(
		[parameter(Mandatory=$true,Position=0)]
		[string]$ShareName,
		[parameter(Mandatory=$true,Position=1)]
		[ValidateSet(&quot;Manual&quot;, &quot;Documents&quot;, &quot;Programs&quot;,&quot;None&quot;)]
		[string]$CacheType
	)

	$paramerror = 0
	$buf = New-Object Share+SHARE_INFO_1005 -Property @{shi1005_flags = [Share+CacheType]::$CacheType}
	$return = [Share]::NetShareSetInfo($null,$ShareName,1005,[ref]$buf,[ref]$paramerror)
	if ($return)
	{
		Write-Host (net helpmsg $return)
	}
}
</pre></p>
<p>Использование.</p>
<p>Применение функции Get-ShareCache:</p>
<p><pre class="brush: powershell;">
PS &gt;  Get-ShareCache doesnotexists
 This shared resource does not exist.

PS &gt;  Get-ShareCache C$ | Format-Table -Auto

Name Path Description              Caching
---- ---- -----------              -------
C$   C:\  Стандартный общий ресурс  Manual

PS &gt;  Get-WmiObject Win32_Share | Get-ShareCache | Format-Table -Auto

Name   Path                              Description               Caching
----   ----                              -----------               -------
ADMIN$ C:\Windows                        Удаленный Admin            Manual
C$     C:\                               Стандартный общий ресурс   Manual
IPC$                                     Удаленный IPC              Manual
print$ C:\Windows\system32\spool\drivers Драйверы принтеров         Manual
</pre></p>
<p>Применение функции Set-ShareCache:</p>
<p><pre class="brush: powershell;">
PS &gt;  Get-ShareCache test | Format-Table -Auto

Name Path    Description Caching
---- ----    ----------- -------
Test C:\Test              Manual

PS &gt;  Set-ShareCache -ShareName Test -CacheType Documents
PS &gt;  Get-ShareCache test | Format-Table -Auto

Name Path    Description   Caching
---- ----    -----------   -------
Test C:\Test             Documents

PS &gt;  Set-ShareCache -ShareName Test -CacheType Programs
PS &gt;  &quot;Test&quot; | Get-ShareCache | Format-Table -Auto

Name Path    Description  Caching
---- ----    -----------  -------
Test C:\Test             Programs
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kazunposh.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kazunposh.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kazunposh.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kazunposh.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kazunposh.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kazunposh.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kazunposh.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kazunposh.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kazunposh.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kazunposh.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kazunposh.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kazunposh.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kazunposh.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kazunposh.wordpress.com/198/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=198&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kazunposh.wordpress.com/2011/11/04/%d1%83%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%bc-%d0%ba%d1%8d%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%b4%d0%bb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc601b5bec21303a9f9505d8735d07f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kazunposh</media:title>
		</media:content>
	</item>
		<item>
		<title>Новинки PowerShell V3 часть 6</title>
		<link>http://kazunposh.wordpress.com/2011/10/10/%d0%bd%d0%be%d0%b2%d0%b8%d0%bd%d0%ba%d0%b8-powershell-v3-%d1%87%d0%b0%d1%81%d1%82%d1%8c-6/</link>
		<comments>http://kazunposh.wordpress.com/2011/10/10/%d0%bd%d0%be%d0%b2%d0%b8%d0%bd%d0%ba%d0%b8-powershell-v3-%d1%87%d0%b0%d1%81%d1%82%d1%8c-6/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 22:47:53 +0000</pubDate>
		<dc:creator>Kazun</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[PowerShell V3]]></category>

		<guid isPermaLink="false">http://kazunposh.wordpress.com/?p=192</guid>
		<description><![CDATA[Поговорим еще немного о новых возможностях: 1)      Возможность установки и обновления файлов помощи, используя  командлет Update-Help До выпуска PowerShell V3 CTP1,для получения помощи, вы использовали командлет Get-Help. Когда в документации находили ошибки или прочие неточности, нельзя было обновить справку для получения последних изменений. Для этого, приходилось использовать Get-Help command -Online и возможно данный недочет будет [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=192&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Поговорим еще немного о новых возможностях:</p>
<p>1)      Возможность установки и обновления файлов помощи, используя  командлет Update-Help</p>
<p>До выпуска PowerShell V3 CTP1,для получения помощи, вы использовали командлет Get-Help. Когда в документации находили ошибки или прочие неточности, нельзя было обновить справку для получения последних изменений. Для этого, приходилось использовать Get-Help command -Online и возможно данный недочет будет исправлен. В версии V3,данную проблему решает командлет Update-Help.</p>
<p>В PowerShell V3 CTP1,по умолчанию отсутствует стандартная справка, но она есть в cab файле.</p>
<p>Требуемые операции для обновления:</p>
<ol>
<li>Скачать cab файл &#8211;  <a href="http://www.microsoft.com/download/en/details.aspx?id=27548&amp;utm_source=feedburner&amp;utm_medium=twitter&amp;utm_campaign=Feed:+MicrosoftDownloadCenter+$Microsoft+Download+Center$">PowerShell V3 CTP1</a></li>
<li>Распаковываем(expand,7-Zip,Winrar,etc)</li>
<li>Update-Help –SourcePath C:\folderexpand\HelpContent -UICulture en-Us,ru-RU –Force</li>
</ol>
<p>Более подробно, можно прочитать в блоге &#8211; <a href="http://tfl09.blogspot.com/2011/09/powershell-v3-and-updateable-help.html">http://tfl09.blogspot.com/2011/09/powershell-v3-and-updateable-help.html</a></p>
<p>2)      Появилась новая встроенная переменная &#8211; $PSDefaultParameterValues</p>
<p>Определяет значения по умолчанию для параметров и  расширенных функций. $PSDefaultParameterValues  -  это hash table, где ключ содержит  cmdlet:param и в поле value находится стандартное значение.</p>
<p><pre class="brush: powershell;">
PS &gt; $PSDefaultParameterValues | gm
   TypeName: System.Management.Automation.DefaultParameterDictionary

Name                 MemberType            Definition
----                 ----------            ----------
Add                  Method                System.Void Add(System.Object key, System.Object value)
ChangeSinceLastCheck Method                bool ChangeSinceLastCheck()
Clear                Method                System.Void Clear()
Clone                Method                System.Object Clone()
Contains             Method                bool Contains(System.Object key)
ContainsKey          Method                bool ContainsKey(System.Object key)
ContainsValue        Method                bool ContainsValue(System.Object value)
CopyTo               Method                System.Void CopyTo(array array, int arrayIndex), System.Void CopyTo(array...
Equals               Method                bool Equals(System.Object obj)
GetEnumerator        Method                System.Collections.IDictionaryEnumerator GetEnumerator(), System.Collecti...
GetHashCode          Method                int GetHashCode()
GetObjectData        Method                System.Void GetObjectData(System.Runtime.Serialization.SerializationInfo ...
GetType              Method                type GetType()
OnDeserialization    Method                System.Void OnDeserialization(System.Object sender)
Remove               Method                System.Void Remove(System.Object key)
ToString             Method                string ToString()
Item                 ParameterizedProperty System.Object Item(System.Object key) {get;set;}
Count                Property              System.Int32 Count {get;}
IsFixedSize          Property              System.Boolean IsFixedSize {get;}
IsReadOnly           Property              System.Boolean IsReadOnly {get;}
IsSynchronized       Property              System.Boolean IsSynchronized {get;}
Keys                 Property              System.Collections.ICollection Keys {get;}
SyncRoot             Property              System.Object SyncRoot {get;}
Values               Property              System.Collections.ICollection Values {get;}
</pre></p>
<p>Синтаксис:</p>
<p><pre class="brush: powershell;">
$PSDefaultParameterValues[&quot;Disabled&quot;]=$true | $false
$PSDefaultParameterValues=@{&quot;&lt;CmdletName&gt;:&lt;ParameterName&gt;&quot;=&quot;&lt;Value&gt;&quot;}
$PSDefaultParameterValues=@{&quot;&lt;CmdletName&gt;:&lt;ParameterName&gt;&quot;={&lt;ScriptBlock&gt;}}
</pre></p>
<p>$PSDefaultParameterValues включена по умолчанию (Disabled=$false).</p>
<p>Подстановочные знаки разрешены в &lt;CmdletName&gt; и &lt;ParameterName&gt;.</p>
<p>Значение по умолчанию может быть объект или script block. В случае если передается script block:</p>
<ol>
<li>(script block) – сначала PowerShell вычисляет значение выражения и используется, как параметр.</li>
<li>{script block} – если требуется передать script block,напрямую, заключается в {}.</li>
</ol>
<p>Примеры использования:</p>
<p><pre class="brush: powershell;">
#Отключить использование $PSDefaultParameterValues
PS &gt; $PSDefaultParameterValues[&quot;Disabled&quot;]=$true

#Перезапишем стандартное значение -Path=&quot;.&quot; командлета Get-ChildItem

PS &gt; $PSDefaultParameterValues=@{&quot;Get-ChildItem:Path&quot;=&quot;C:\&quot;}
PS &gt; Get-ChildItem


    Directory: C:\


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         9/19/2011   8:16 PM            PerfLogs
d----         10/5/2011   2:19 AM            poshv3
d-r--         9/20/2011   9:48 PM            Program Files
d----         8/25/2011   1:00 PM            Program Files (x86)
d-r--         9/19/2011   8:14 PM            Users
d----         9/19/2011   8:16 PM            Windows

#Передадим script block,без вычисления выражения,используя двойные {}
PS &gt;  $PSDefaultParameterValues=@{ &quot;Invoke-Command:ScriptBlock&quot;={{Get-Service | Where Status -EQ Running}} }
PS &gt; Invoke-Command

Status   Name               DisplayName
------   ----               -----------
Running  BFE                Base Filtering Engine
Running  CryptSvc           Cryptographic Services
Running  DcomLaunch         DCOM Server Process Launcher
Running  DeviceAssociati... Device Association Service
Running  Dhcp               DHCP Client
Running  DPS                Diagnostic Policy Service
Running  EventLog           Windows Event Log
Running  EventSystem        COM+ Event System
Running  FontCache          Windows Font Cache Service
Running  gpsvc              Group Policy Client
Running  iphlpsvc           IP Helper
Running  LanmanServer       Server
Running  LanmanWorkstation  Workstation
Running  lmhosts            TCP/IP NetBIOS Helper
Running  LSM                Local Session Manager
Running  MpsSvc             Windows Firewall
Running  MSDTC              Distributed Transaction Coordinator
</pre></p>
<p>При обновлении справки, более подробно, можно узнать:</p>
<p>Get-Help about_preference_variables</p>
<p><a href="http://powertoe.wordpress.com/2011/09/15/powershell-default-parameters-in-v-3-0/">http://powertoe.wordpress.com/2011/09/15/powershell-default-parameters-in-v-3-0/</a></p>
<p>Так же для работы, можно воспользоваться парой функций &#8211; <a href="http://poshcode.org/2990">http://poshcode.org/2990</a></p>
<p>Введение подобного функционала, может создать проблемы в безопасности и осложнение в отладке скриптов. Так что, аккуратнее, используйте данный функционал.</p>
<p>3)      Использование атрибутов.</p>
<p>Я не буду переписывать материал книги, а приведу ссылку на книгу <a href="http://powershell.com/cs/blogs/ebook/default.aspx">Mastering PowerShell</a> под авторством Tobias Weltner  и конкретно раздел, где рассказывается про данный функционал &#8211; <a href="http://powershell.com/cs/blogs/ebook/archive/2008/10/22/chapter-3-variables.aspx#variable-management-behind-the-scenes">Variable Management: Behind the Scenes</a>. После прочтение, вам станет понятным, как использовать свойство Attributes – и как его применять для V1 и V2. Так же в разделе даны, какие  классы атрибутов бывают и , какие параметры они принимают.</p>
<p>Один из MVP по PowerShell Joel Bennett,написал функцию, где облегчается добавления данных атрибутов, к переменным. Приведу исходный код функции (<a href="http://poshcode.org/2991">http://poshcode.org/2991</a>) :</p>
<p><pre class="brush: powershell;">
function Protect-Variable {
param(
[Parameter(Mandatory=$true,Position=0)][String]$Name, [Int]$Scope = 1,
[Parameter(ParameterSetName=&quot;ValidateScriptBlock&quot;)][ScriptBlock]$ScriptBlock,
[Parameter(ParameterSetName=&quot;ValidateCount&quot;)][Int]$MinCount,
[Parameter(ParameterSetName=&quot;ValidateCount&quot;)][Int]$MaxCount,
[Parameter(ParameterSetName=&quot;ValidateLength&quot;)][Int]$MinLength,
[Parameter(ParameterSetName=&quot;ValidateLength&quot;)][Int]$MaxLength,
[Parameter(ParameterSetName=&quot;ValidatePattern&quot;)][Regex]$Pattern,
[Parameter(ParameterSetName=&quot;ValidateRange&quot;)][Int]$MinValue,
[Parameter(ParameterSetName=&quot;ValidateRange&quot;)][Int]$MaxValue,
[Parameter(ParameterSetName=&quot;ValidateSet&quot;)][String[]]$Set,
[Parameter(ParameterSetName=&quot;ValidateNotNull&quot;)][Switch]$NotNull,
[Parameter(ParameterSetName=&quot;ValidateNotNullOrEmpty&quot;)][Switch]$NotEmpty
)
   $Variable = Get-Variable $Name -Scope 1

   if($ScriptBlock) {
      $Attribute = new-object System.Management.Automation.ValidateScriptAttribute $ScriptBlock
      $Variable.Attributes.Add($Attribute)
   }
   if($MinCount -or $MaxCount) {
      if(!$MinCount) { $MinCount = [Int]::MinValue }
      if(!$MaxCount) { $MaxCount = [Int]::MaxValue }
      $Attribute = new-object System.Management.Automation.ValidateCountAttribute $MinCount, $MaxCount
      $Variable.Attributes.Add($Attribute)
   }
   if($MinLength -or $MaxLength) {
      $Attribute = new-object System.Management.Automation.ValidateLengthAttribute $MinLength, $MaxLength
      $Variable.Attributes.Add($Attribute)
   }
   if($Pattern) {
      $Attribute = new-object System.Management.Automation.ValidatePatternAttribute $Pattern
      $Variable.Attributes.Add($Attribute)
   }
   if($MinValue -or $MaxValue) {
      $Attribute = new-object System.Management.Automation.ValidateRangeAttribute $MinValue, $MaxValue
      $Variable.Attributes.Add($Attribute)
   }
   if($Set) {
      $Attribute = new-object System.Management.Automation.ValidateSetAttribute $Set
      $Variable.Attributes.Add($Attribute)
   }
   if($NotNull) {
      $Attribute = new-object System.Management.Automation.ValidateNotNullAttribute
      $Variable.Attributes.Add($Attribute)
   }
   if($NotEmpty) {
      $Attribute = new-object System.Management.Automation.ValidateNotNullOrEmptyAttribute
      $Variable.Attributes.Add($Attribute)
   }
}
</pre></p>
<p>Как использовать:</p>
<p><pre class="brush: powershell;">
#Добавим атрибут ValidateRange для переменной test,которая принимает значение в интервале 10-100.
PS &gt;  $test = 10
PS &gt;  Protect-Variable test -MinValue 10 -MaxValue 100
</pre></p>
<p>Остальные примеры, можно посмотреть в книге, а также описание и использование – этих атрибутов, можно посмотреть в справке по расширенным функциям.</p>
<p>Get-Help about_functions_advanced_parameters</p>
<p>Что изменилось в V3,теперь данные атрибуты можно добавить, указав впереди переменной (возможно при объявлении).</p>
<p><pre class="brush: powershell;">
#Добавим атрибут ValidateRange для переменной test,которая принимает значение в интервале 10-100.
PS &gt; [ValidateRange(10,100)]$test = 42
PS &gt; $test = 101
The variable cannot be validated because the value 101 is not a valid value for the test variable.
At line:1 char:1
+ $test = 101
+ ~~~~~~~~~~~
    + CategoryInfo          : MetadataError: (:) [], ValidationMetadataException
    + FullyQualifiedErrorId : ValidateSetFailure

#Добавим атрибут ValidateSet для переменной test,которая может принимать значение X,Y,Z.
PS &gt; [ValidateSet(&quot;X&quot;,&quot;Y&quot;,&quot;Z&quot;)]$test = &quot;X&quot;
PS &gt; $test = &quot;hello&quot;
The variable cannot be validated because the value hello is not a valid value for the test variable.
At line:1 char:1
+ $test = &quot;hello&quot;
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : MetadataError: (:) [], ValidationMetadataException
    + FullyQualifiedErrorId : ValidateSetFailure
</pre></p>
<p>Как мы видим, теперь работа с атрибутами упростилась.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kazunposh.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kazunposh.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kazunposh.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kazunposh.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kazunposh.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kazunposh.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kazunposh.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kazunposh.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kazunposh.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kazunposh.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kazunposh.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kazunposh.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kazunposh.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kazunposh.wordpress.com/192/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=192&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kazunposh.wordpress.com/2011/10/10/%d0%bd%d0%be%d0%b2%d0%b8%d0%bd%d0%ba%d0%b8-powershell-v3-%d1%87%d0%b0%d1%81%d1%82%d1%8c-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc601b5bec21303a9f9505d8735d07f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kazunposh</media:title>
		</media:content>
	</item>
		<item>
		<title>Новинки PowerShell V3 часть 5</title>
		<link>http://kazunposh.wordpress.com/2011/09/21/%d0%bd%d0%be%d0%b2%d0%b8%d0%bd%d0%ba%d0%b8-powershell-v3-%d1%87%d0%b0%d1%81%d1%82%d1%8c-5/</link>
		<comments>http://kazunposh.wordpress.com/2011/09/21/%d0%bd%d0%be%d0%b2%d0%b8%d0%bd%d0%ba%d0%b8-powershell-v3-%d1%87%d0%b0%d1%81%d1%82%d1%8c-5/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 22:16:10 +0000</pubDate>
		<dc:creator>Kazun</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[PowerShell V3]]></category>

		<guid isPermaLink="false">http://kazunposh.wordpress.com/?p=184</guid>
		<description><![CDATA[Радостные новости, теперь  PowerShell V3 CTP1,  доступен для Windows 7 Service Pack 1 и Windows Server 2008 R2 SP1. Так что у кого нет возможности скачать Windows 8 Developer Preview, можете скачать по ссылке &#8211; http://www.microsoft.com/download/en/details.aspx?id=27548 . Перечислять возможности не буду, их можно будет посмотреть по ссылке выше. Поговорим немного теперь про нововведения: 1)      Доступен [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=184&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Радостные новости, теперь  <a href="http://www.microsoft.com/download/en/details.aspx?id=27548&amp;utm_source=feedburner&amp;utm_medium=twitter&amp;utm_campaign=Feed%3A+MicrosoftDownloadCenter+%28Microsoft+Download+Center%29#tm">PowerShell V3 CTP1</a>,  доступен для Windows 7 Service Pack 1 и Windows Server 2008 R2 SP1. Так что у кого нет возможности скачать <a href="http://msdn.microsoft.com/en-us/windows/apps/br229516">Windows 8 Developer Preview</a>, можете скачать по ссылке &#8211; <a href="http://www.microsoft.com/download/en/details.aspx?id=27548">http://www.microsoft.com/download/en/details.aspx?id=27548</a> . Перечислять возможности не буду, их можно будет посмотреть по ссылке выше.</p>
<p>Поговорим немного теперь про нововведения:</p>
<p>1)      Доступен параметр  -Stream у следующих командлетов:</p>
<ul>
<li>Add-Content</li>
<li>Clear-Content</li>
<li>Get-Content</li>
<li>Get-Item</li>
<li>Out-String</li>
<li>Remove-Item</li>
<li>Set-Content</li>
</ul>
<p>Когда скрипты скачиваются через Internet Explorer, Outlook и т.д, создается альтернативный поток данных NTFS,которые добавляют Zone Identifier. Поток Zone.Identifier это поток, содержащий текстовые данные. Он содержит внутри себя следующие строчки:</p>
<p>[ZoneTransfer]</p>
<p>ZoneId=3</p>
<p>Параметр ZoneId с числом означает зону, откуда прибыл файл на компьютер. Допустимы следующие значения:</p>
<ul>
<li>0 — локальный компьютер</li>
<li>1 — интранет</li>
<li>2 — доверенный источник</li>
<li>3 — интернет</li>
<li>4 — недоверенный источник</li>
</ul>
<p>Более подробно можно узнать на сайте &#8211; <a href="http://hex.pp.ua/Zone.Identifier.php">http://hex.pp.ua/Zone.Identifier.php</a>.</p>
<p>Посмотреть stream Zone Identifier ,можно с помощью notepad:</p>
<p><pre class="brush: powershell;">

Notepad script.ps1:Zone.Identifier

</pre></p>
<p>Так же можно воспользоваться утилитой Stream от SysInternals &#8211; <a href="http://technet.microsoft.com/ru-RU/sysinternals/bb897440.aspx">http://technet.microsoft.com/ru-RU/sysinternals/bb897440.aspx</a></p>
<p><pre class="brush: powershell;">

C:\&gt;streams script.ps1

Streams v1.56 - Enumerate alternate NTFS data streams

Copyright (C) 1999-2007 Mark Russinovich

Sysinternals - www.sysinternals.com

C:\script.ps1::Zone.Identifier:$DATA 26

</pre></p>
<p>Как удалить этот stream,можно прочитать в блоге &#8211; <a href="http://www.hanselman.com/blog/RemovingSecurityFromDownloadedPowerShellScriptsWithAlternativeDataStreams.aspx">http://www.hanselman.com/blog/RemovingSecurityFromDownloadedPowerShellScriptsWithAlternativeDataStreams.aspx</a></p>
<p>Для PowerShell V3 :</p>
<p><pre class="brush: powershell;">

#Получить все потоки

Get-Item script.ps1 -Stream *

Stream         Length

------         ------

:$DATA           4

Zone.Identifier  3

#Удалим поток Zone.Identifier

Remove-Item script.ps1 -Stream Zone.Identifier

</pre></p>
<p>Для работы с потоками в версии V2,можно посмотреть статью &#8211; <a href="http://thepowershellguy.com/blogs/posh/archive/2007/01/27/powershell-accessing-alternative-data-streams-of-files-on-an-ntfs-volume.aspx">http://thepowershellguy.com/blogs/posh/archive/2007/01/27/powershell-accessing-alternative-data-streams-of-files-on-an-ntfs-volume.aspx</a></p>
<p>2)      У командлета Get-Content ,два новых параметра Raw и Tail.</p>
<p>3)      Посмотреть изменения, которые произошли с параметрами комадлетов версии V2 и V3, для основных модулей.Shay Levy написал скрипт и выложил в подробном ввиде &#8211; <a href="http://www.powershellmagazine.com/2011/09/15/how-to-find-out-whats-new-in-powershell-vnext/">http://www.powershellmagazine.com/2011/09/15/how-to-find-out-whats-new-in-powershell-vnext/</a></p>
<p>4)      Так же хорошей новостью, что у командлета  Out-GriedView, появился параметр Passthru.</p>
<p><pre class="brush: powershell;">

Get-ChildItem | Out-GridView -PassThru | Select Name

</pre></p>
<p>Теперь вы можете выбрать, кликнув по заданному полю и нажать OK.Вы отфильтруете требуевые вам поля от остальных полей и передать дальше по конвейеру, получив более наглядный вывод.</p>
<p>Подробнее можно посмотреть &#8211; <a href="http://powertoe.wordpress.com/2011/09/19/out-gridview-now-has-a-passthru-parameter/">http://powertoe.wordpress.com/2011/09/19/out-gridview-now-has-a-passthru-parameter/</a></p>
<p>5)      У комадлета Tee-Object, добавился параметр –Append.</p>
<p><pre class="brush: powershell;">

Get-ChildItem  | Tee-Object -FilePath result.txt | Select Name

Get-Process | Tee-Object -FilePath result.txt -Append | Select Name

</pre></p>
<p>6)      PowerShell Ise &#8211; доступен Add-On Команды и Help,которые реализуются с помощью командлета Show-Command. Подробнее &#8211; <a href="http://www.jonathanmedd.net/2011/09/powershell-v3-ise-commands-add-on.html">http://www.jonathanmedd.net/2011/09/powershell-v3-ise-commands-add-on.html</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kazunposh.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kazunposh.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kazunposh.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kazunposh.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kazunposh.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kazunposh.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kazunposh.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kazunposh.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kazunposh.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kazunposh.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kazunposh.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kazunposh.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kazunposh.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kazunposh.wordpress.com/184/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kazunposh.wordpress.com&amp;blog=18204566&amp;post=184&amp;subd=kazunposh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kazunposh.wordpress.com/2011/09/21/%d0%bd%d0%be%d0%b2%d0%b8%d0%bd%d0%ba%d0%b8-powershell-v3-%d1%87%d0%b0%d1%81%d1%82%d1%8c-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc601b5bec21303a9f9505d8735d07f2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kazunposh</media:title>
		</media:content>
	</item>
	</channel>
</rss>
