<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Русский блог команды разработки Powershell</title><subtitle type="html" /><id>http://blogs.technet.com/powershell_ru/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.technet.com/powershell_ru/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-01-27T09:31:00Z</updated><entry><title>Управление службами Remote Desktop (так же известны как службы терминалов) с помощью Windows PowerShell</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/23/remote-desktop-windows-powershell.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/23/remote-desktop-windows-powershell.aspx</id><published>2009-03-23T13:52:00Z</published><updated>2009-03-23T13:52:00Z</updated><content type="html">&lt;P&gt;Всем привет, 
&lt;P&gt;Мы рады сообщить, что бета-версия Windows server 2008 R2 поддерживает использование PowerShell в &lt;A href="http://blogs.msdn.com/ts/archive/2008/11/03/terminal-services-renamed-remote-desktop-services-at-teched-emea.aspx" mce_href="http://blogs.msdn.com/ts/archive/2008/11/03/terminal-services-renamed-remote-desktop-services-at-teched-emea.aspx"&gt;службах Remote Desktop&lt;/A&gt;. Теперь вы можете настраивать и управлять всеми службами и компонентами ролей RDS с помощью PowerShell. Например, ниже приведены несколько задач управления, которые теперь можно выполнять с помощью PowerShell 
&lt;OL&gt;
&lt;LI&gt;Просмотр и редактирование настроек конфигурации сервера удаленного рабочего стола 
&lt;LI&gt;Публикация приложений RemoteApp 
&lt;LI&gt;Настройка сервера лицензий 
&lt;LI&gt;Создание и настройка фермы сервера удаленного рабочего стола 
&lt;LI&gt;Настройка и назначение виртуальных IP-адресов для сеансов и приложений 
&lt;LI&gt;Создание и управление RDV (VDI пулами) 
&lt;LI&gt;Создание и управление политиками Gateway Resource Access и Client Access&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Разумеется, с помощью Windows PowerShell можно сделать еще многое и многое другое. Установите бета-версию Windows Server 2008 R2 и давайте попробуем. Как всегда, мы очень хотим услышать, что вы думаете, и важно, чтобы вы как можно скорее дали нам знать, что вам понравилось, и что не понравилось. 
&lt;P&gt;Читайте дальше, чтобы подробно разобраться в PowerShell RDS. 
&lt;P&gt;&lt;B&gt;PowerShell&lt;/B&gt;&lt;B&gt; в службах удаленного рабочего стола&lt;/B&gt; 
&lt;P&gt;После установки роли служб Remote Desktop устанавливается провайдер PowerShell. Этот провайдер (в дальнейшем мы будем называть его провайдером RDS) позволит вам просматривать и управлять конфигурацией всех служб роли и компонентов служб Remote Desktop. 
&lt;P&gt;Думайте о провайдере RDS как о чем-то вроде провайдера файловой системы и провайдера реестра, &lt;A href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;i=1664&amp;amp;g=6" mce_href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;i=1664&amp;amp;g=6"&gt;провайдера IIS&lt;/A&gt;. Вы можете просматривать, обозревать свойства и работать с провайдером RDS так же, как и с любым другим провайдером. 
&lt;P&gt;&lt;A title=_Toc207704242 name=_Toc207704242&gt;&lt;/A&gt;&lt;B&gt;Работа с &lt;/B&gt;&lt;B&gt;RDS&lt;/B&gt;&lt;B&gt; &lt;/B&gt;&lt;B&gt;из &lt;/B&gt;&lt;B&gt;PowerShell&lt;/B&gt;&lt;B&gt;&lt;/B&gt; 
&lt;P&gt;Чтобы начать работу, сперва установите роль служб Remote Desktop и запустите RDS PowerShell. 
&lt;P&gt;Шаг 1: Установите роль служб Remote Desktop 
&lt;P&gt;RDS PowerShell устанавливается при установке роли служб Remote Desktop. Роль служб Remote Desktop можно установить с помощью Server Manager. 
&lt;P&gt;Шаг 2: Запустите RDS PowerShell 
&lt;P&gt;Щелкните левой кнопкой мыши на Start Menu -&amp;gt; All Programs -&amp;gt; Administrative Tools -&amp;gt; Remote desktop services -&amp;gt; «Remote Desktop Services PowerShell» и выберите «Run as Administrator». 
&lt;P&gt;После щелчка по этой ссылке вы увидите окно PowerShell, подсказка будет указывать на устройство RDS. Это он – ваш провайдер RDS. 
&lt;P&gt;&lt;A title=_Toc207704244 name=_Toc207704244&gt;&lt;/A&gt;Отметим, что когда вы используете команду dir, вы увидите представление со следующими шестью столбцами. 
&lt;P&gt;&lt;B&gt;Name (Имя)&lt;/B&gt;: Имя контейнера/параметра 
&lt;P&gt;&lt;B&gt;Type (Тип)&lt;/B&gt;: Тип элемента. Существует три возможных значения типа – Container (Контейнер), Integer (Целое число) и String (Строка). Контейнер (Узел) определяет элемент контейнера, а Целое и Строка обозначают настройки. Входить командой CD можно только в элементы контейнеров. Контейнеры соответствуют группам настроек или логической сущности, тогда как настройки соответствуют параметрам конфигурации. Например, роли, такие как RDS и Connection Broker, и сущности, такие как объекты соединений и RemoteApps, представляются в форме контейнеров, а режим стока сервера (drain mode) представлен как параметр. 
&lt;P&gt;&lt;B&gt;CurrentValue (Текущее значение)&lt;/B&gt;: Значение, назначенное элементу (применимо только для элементов типа «Integer» или «String») 
&lt;P&gt;&lt;B&gt;GP&lt;/B&gt;: Указывает, управляется ли элемент с помощью групповых политик 
&lt;P&gt;&lt;B&gt;PermissibleValues (Разрешенные значения)&lt;/B&gt;: Возможные значения, которые может иметь элемент настроек 
&lt;P&gt;&lt;B&gt;PermissibleOperations (Разрешенные операции)&lt;/B&gt;: Операции (коммандлеты), которые могут применяться к элементу 
&lt;P&gt;Пользователи могут выбирать, какие столбцы должны выводиться при использовании коммандлета Format-table. Например, команда &lt;B&gt;Get&lt;/B&gt;&lt;B&gt;-&lt;/B&gt;&lt;B&gt;Item&lt;/B&gt;&lt;B&gt; * | &lt;/B&gt;&lt;B&gt;format&lt;/B&gt;&lt;B&gt;-&lt;/B&gt;&lt;B&gt;table&lt;/B&gt;&lt;B&gt; -&lt;/B&gt;&lt;B&gt;Property&lt;/B&gt;&lt;B&gt; &lt;/B&gt;&lt;B&gt;Name&lt;/B&gt;&lt;B&gt;, &lt;/B&gt;&lt;B&gt;CurrentValue&lt;/B&gt; выводит только столбцы Name и CurrentValue. Можно использовать также &lt;B&gt;dir&lt;/B&gt;&lt;B&gt; * | &lt;/B&gt;&lt;B&gt;ft&lt;/B&gt;&lt;B&gt; -&lt;/B&gt;&lt;B&gt;Property&lt;/B&gt;&lt;B&gt; &lt;/B&gt;&lt;B&gt;N&lt;/B&gt;&lt;B&gt;*,&lt;/B&gt;&lt;B&gt;C&lt;/B&gt;&lt;B&gt;* , , &lt;/B&gt;вы получите&lt;B&gt; &lt;/B&gt;тот же результат. 
&lt;P&gt;Можно также изменить вид по умолчанию. Дополнительные сведения об этом см. в следующем сообщении. 
&lt;P&gt;&lt;B&gt;Как прочитать справочное руководство&lt;/B&gt;&lt;B&gt;?&lt;/B&gt; 
&lt;P&gt;Одна из выдающихся возможностей PowerShell состоит в том, что он упрощает получение информации и справки по различным вопросам. Это преимущество сохраняется и для поставщика RDS. Существует свойство с именем Description (Описание), ассоциированное с каждым элементом, которое успешно описывает отдельные параметры. 
&lt;P&gt;Например&lt;A title=_Toc207704243 name=_Toc207704243&gt;&lt;/A&gt;, &lt;B&gt;PS&lt;/B&gt;&lt;B&gt; &lt;/B&gt;&lt;B&gt;RDS&lt;/B&gt;&lt;B&gt;:\&lt;/B&gt;&lt;B&gt;RDSConfiguration&lt;/B&gt;&lt;B&gt;&amp;gt; &lt;/B&gt;&lt;B&gt;get&lt;/B&gt;&lt;B&gt;-&lt;/B&gt;&lt;B&gt;item&lt;/B&gt;&lt;B&gt; .\&lt;/B&gt;&lt;B&gt;DrainMode&lt;/B&gt;&lt;B&gt;| &lt;/B&gt;&lt;B&gt;fl&lt;/B&gt; выводит информацию об элементе DrainMode. Также можно изменить представление по умолчанию так, чтобы в нем всегда показывалось содержимое столбца Description. 
&lt;P&gt;Теперь давайте рассмотрим примеры. 
&lt;P&gt;&lt;A title=_Toc207704247 name=_Toc207704247&gt;&lt;/A&gt;&lt;B&gt;Пример&lt;/B&gt;&lt;B&gt; &lt;A title=_Toc207704248 name=_Toc207704248&gt;&lt;/A&gt;1: Установка уровня шифрования &lt;/B&gt;&lt;B&gt;RDP&lt;/B&gt; 
&lt;P&gt;Шаг 1: Просмотр текущего уровня шифрования 
&lt;P&gt;&lt;B&gt;PS&lt;/B&gt;&lt;B&gt; &lt;/B&gt;&lt;B&gt;RDS&lt;/B&gt;&lt;B&gt;:\&lt;/B&gt;&lt;B&gt;RDSConfiguration&lt;/B&gt;&lt;B&gt;\&lt;/B&gt;&lt;B&gt;Connections&lt;/B&gt;&lt;B&gt;\&lt;/B&gt;&lt;B&gt;RDP&lt;/B&gt;&lt;B&gt;-&lt;/B&gt;&lt;B&gt;Tcp&lt;/B&gt;&lt;B&gt;\&lt;/B&gt;&lt;B&gt;SecuritySettings&lt;/B&gt;&lt;B&gt;&amp;gt; &lt;/B&gt;&lt;B&gt;dir&lt;/B&gt;&lt;B&gt; .\&lt;/B&gt;&lt;B&gt;EncryptionLevel&lt;/B&gt;&lt;B&gt; | &lt;/B&gt;&lt;B&gt;fl&lt;/B&gt;&lt;B&gt;&lt;/B&gt; 
&lt;P&gt;Шаг 2: Установка требуемого значения элемента EncryptionLevel 
&lt;P&gt;&lt;B&gt;PS RDS:\RDSConfiguration\Connections\RDP-Tcp\SecuritySettings&amp;gt; Set-Item .\EncryptionLevel 2&lt;/B&gt; 
&lt;P&gt;&lt;A title=_Toc207704249 name=_Toc207704249&gt;&lt;/A&gt;&lt;B&gt;Пример&lt;/B&gt;&lt;B&gt; 2: Определение серверов лицензий, которые будут использоваться сервером &lt;/B&gt;&lt;B&gt;Remote&lt;/B&gt;&lt;B&gt; &lt;/B&gt;&lt;B&gt;Desktop&lt;/B&gt;&lt;B&gt;&lt;/B&gt; 
&lt;P&gt;Шаг 1: Просмотр текущего списка используемых серверов лицензий 
&lt;P&gt;&lt;B&gt;PS RDS:\RDSConfiguration\LicensingSettings\SpecifiedLicenseServers&amp;gt; dir&lt;/B&gt; 
&lt;P&gt;Шаг 2: Просмотр списка серверов лицензий, зарегистрированных на контроллере домена. 
&lt;P&gt;&lt;B&gt;PS RDS:\RDSConfiguration\LicensingSettings\RegisteredLicenseServers&amp;gt; dir&lt;/B&gt; 
&lt;P&gt;Шаг 3: добавление сервера лицензий к списку SpecifiedLicenseServers 
&lt;P&gt;Простейший способ добавления сервера лицензий состоит в том, чтобы использовать коммандлет new-item и указать имя добавляемого сервера лицензий. 
&lt;P&gt;&lt;B&gt;PS RDS:\RDSConfiguration\LicensingSettings\SpecifiedLicenseServers&amp;gt; New-Item -name ls.contoso.com&lt;/B&gt; 
&lt;P&gt;Вы можете использовать приведенную ниже команду для добавления всех серверов лицензий из списка зарегистрированных серверов лицензий к указанному списку серверов лицензий. 
&lt;P&gt;&lt;B&gt;PS RDS:\RDSConfiguration\LicensingSettings\SpecifiedLicenseServers&amp;gt; dir ..\RegisteredLicenseServers | new-item –force&lt;/B&gt; 
&lt;P&gt;&lt;B&gt;Пример&lt;/B&gt;&lt;B&gt; 3: &lt;A title=_Toc207704250 name=_Toc207704250&gt;&lt;/A&gt;Подключение сервера &lt;/B&gt;&lt;B&gt;Remote&lt;/B&gt;&lt;B&gt; &lt;/B&gt;&lt;B&gt;Desktop&lt;/B&gt;&lt;B&gt; к ферме &lt;/B&gt;&lt;B&gt;Session&lt;/B&gt;&lt;B&gt; &lt;/B&gt;&lt;B&gt;Broker&lt;/B&gt;&lt;B&gt;&lt;/B&gt; 
&lt;P&gt;&lt;B&gt;PS RDS:\RDSConfiguration\ConnectionBrokerSettings&amp;gt; Set-Item MemberOfFarm 1 -FarmName testFarm -sessionbroker contoso-sb-test -CurrentRedirectableAddresses 65.52.65.53&lt;/B&gt; 
&lt;P&gt;&lt;A title=_Toc207704252 name=_Toc207704252&gt;&lt;/A&gt;&lt;B&gt;Пример&lt;/B&gt;&lt;B&gt; 4: Добавление&lt;/B&gt;&lt;B&gt; &lt;/B&gt;&lt;B&gt;RemoteApp&lt;/B&gt;&lt;B&gt;&lt;/B&gt; 
&lt;P&gt;&lt;B&gt;PS RDS:\RemoteApps\PublishedApplications&amp;gt; New-Item -Name "IExplore" -ApplicationPath "c:\Program Files\Internet Explorer\iexplore.exe" -ApplicationName "Internet Explorer" -ShowInPortal 1&lt;/B&gt;&lt;B&gt;&lt;/B&gt; 
&lt;P&gt;Эти примеры демонстрируют лишь некоторые из различных новых возможностей. Практически любые задачи настройки, относящиеся к конфигурации сервера RD, RemoteApp, Gateway, сервера лицензий и RDV (VDI пулами) теперь можно выполнять с использованием провайдера RDS. 
&lt;P&gt;Кроме того, истинный потенциал провайдера RDS реализуется при написании сценариев для 
&lt;P&gt;1. формирования последовательности из различных операций настройки 
&lt;P&gt;2. выполнения настройки нескольких серверов 
&lt;P&gt;Один из сценариев, наилучшим образом демонстрирующих указанное выше, это создание ферм серверов RD. Сценарий, приводимый в качестве примера в конце этой записи, принимает в качестве входных данных список серверов и приложений, создает ферму сервера RD и создает RemoteApp на всех этих серверах. Создайте два текстовых файла, один со списком серверов и другой со списком путей к приложениям (можно использовать пути с переменными среды, такими как %windir%), и передайте имена этих файлов сценарию в качестве входных параметров. 
&lt;P&gt;Поскольку эти сценарии используют удаленное исполнение PowerShell, перед выполнением сценария убедитесь, что вы включили удаленное исполнение PowerShell (для включения удаленного исполнения выполните коммандлет Enable-PSRemoting в окне PowerShell запущеном с повышеными привилегиями). 
&lt;P&gt;Разумеется, это очень простой сценарий – вы можете легко нарастить его дополнительными специальными функциями в соответствии с вашими потребностями. Кроме того, по нашему мнению, одно из важных преимуществ провайдера RDS состоит в том, что вам нет нужды быть программистом, чтобы написать такой сценарий, как CreateRDFarm. Все, что нужно знать – это основы языка сценариев PowerShell. 
&lt;P&gt;Я надеюсь, что вы, так же как мы, поражены открывающимися возможностями. Сообщите нам что вы думаете об этом. И оставайтесь с нами, чтобы увидеть другие сценарии, которые вы также сможете пустить в дело. 
&lt;P&gt;Приложение: Пример сценария 
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;P&gt;&lt;FONT color=#0000ff&gt;#Windows PowerShell script to create a RD Server farm.

if ($args[0] -eq $null -or $args[1] -eq $null -or $args[2] -eq $null ){
    Write-Host "Insuffecient parameters.`nUsage: CreateRDFarm.ps1 SessionBroker Farmname &lt;SPAN style="COLOR: #0000ff"&gt;&amp;lt;&lt;/SPAN&gt;File containing list of RDS servers &amp;gt; &amp;lt; File containing Applications to publish &amp;gt;
    exit
}else{
    $sb = $args[0]
    $farmname = $args[1]
}

$rdsarr = get-content $args[2]
if ($rdsarr -eq $null){
    Write-Host "$args[2] cannot be read or is empty.`nUsage: CreateRDFarm.ps1 SessionBroker Farmname &amp;lt; File containing TS servers &amp;gt; &amp;lt; File containing Applications to publish &amp;gt;
    exit
}

if ($args[3] -eq $null){
    Write-Host "No file containing Apps Servers specifed. TS Remote Apps will not be published.`nUsage: CreateFarm.ps1 SessionBroker Farmname &amp;lt; File containing TS servers &amp;gt; &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#0000ff&gt;&amp;lt; txt file containing Applications to publish &amp;gt; .`n Farm creation will continue" -ForegroundColor yellow
}else{
    $apparr = get-content $args[3]
    if ($apparr -eq $null){
    Write-Host "$args[3] cannot be read or is empty.`nUsage: CreateRDFarm.ps1 SessionBroker Farmname &amp;lt; File containing TS servers &amp;gt; &amp;lt; File containing Applications to publish &amp;gt;"
}
}

# Check whether session broker service is running on the remote machine

$sbservice = Get-Service -ComputerName $sb -Name Tssdis
if( $sbservice.status -ne "Running"){
Write-host "Session Broker service is not running on $sb. Exiting farm creation"
exit
}


if ($rdsarr[0] -eq $null){
    Write-Host "No TS Server specified. Atleast one TS Server need to be specified.`nUsage: CreateFarm.ps1 SessionBroker Farmname TS1 TS2 ..."
    exit
}

#create a run space to run remote commands on the Session Broker server
$sb_remotesession = New-PSSession -ComputerName $sb

foreach ($rds in $rdsarr){

    #add ts server to Session Broker Computers group on SB server
    $tst = $rds+"$"
    invoke-command $sb_remotesession -ScriptBlock {
    net localgroup 'Session Broker Computers'  /add $args[0] 2&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt;$null;`
    } -ArgumentList $tst
    
    #join each ts server to sb farm. 
        
        Write-Host "Joining RD server $rds to $farmname farm" -ForegroundColor magenta
        
        $rds_remotesession = New-PSSession -ComputerName $rds

        invoke-command $rds_remotesession -ScriptBlock { `
            import-module RemoteDesktopServices ;`
            $cipaddr = dir RDS:\RDSConfiguration\ConnectionBrokerSettings\RedirectableAddresses ;`
            Set-Item RDS:\RDSConfiguration\ConnectionBrokerSettings\MemberOfFarm 1 -FarmName $args[0] -sessionbroker $args[1] -IPAddressRedirection 0 -CurrentRedirectableAddresses $cipaddr[0].Name ;`
            }`
            -ArgumentList $farmname,$sb

    #create ts remote apps
        if ($args[3] -ne $null){

            foreach ($app in $apparr){
                
                Write-Host Publishing $app on $rds -ForegroundColor magenta
                
                $ind = $app.LastIndexof("\")
                $alias = $app.SubString($ind+1,$app.LastIndexOf(".")-$ind-1)
                
                invoke-command $rds_remotesession -ScriptBlock { `
                new-item -Path RDS:\RemoteApps\PublishedApplications -Name $args[0] -ApplicationPath $args[1]`
                }`
                -ArgumentList $alias,$app
            }
        }

    #close the remote session
    Remove-PSSession $rds_remotesession
}

#close the sb runspace
Remove-PSSession $sb_remotesession&lt;/FONT&gt;
&lt;/P&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Шанмугам Каландайвел (Shanmugam Kulandaivel)&lt;BR&gt;Remote Desktop Virtualization Services Team&lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3213589" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author></entry><entry><title>Использование PowerShell для защиты от Conficker (включение и отключение AutoRun.inf)</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213902.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213902.aspx</id><published>2009-03-17T15:29:00Z</published><updated>2009-03-17T15:29:00Z</updated><content type="html">&lt;P&gt;На главной странице MSN.com сегодня приведены сведения о новом черве, &lt;A href="http://tech.msn.com/news/articlepcw.aspx?cp-documentid=16883197&amp;amp;GT1=40000" mce_href="http://tech.msn.com/news/articlepcw.aspx?cp-documentid=16883197&amp;amp;GT1=40000"&gt;Conficker&lt;/A&gt;, который распространяется через старые добрые трюки с autorun.inf. Он инфицирует устройства USB так, что при подключении этих устройств в другой компьютер вредоносный код автоматически запускается и поражает машину. Статья ссылается на публикацию в &lt;A href="http://nick.brown.free.fr/blog/2007/10/memory-stick-worms.html" mce_href="http://nick.brown.free.fr/blog/2007/10/memory-stick-worms.html"&gt;блоге Ника Брауна (Nick Brown)&lt;/A&gt;, который описывает различные способы отключения файлов autorun.inf и дает файл .REG для отключения autorun.inf. 
&lt;P&gt;Вот этот файл .REG: 
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf]
@="@SYS:DoesNotExist"
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Недавно я полюбил превращать мелкие хаки реестра в функции. Вот вам пара функций, которые я написал для автоматического внесения этих изменений в реестр с помощью PowerShell. 
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;function Disable-AutoRun
{
    $item = Get-Item `
        "REGISTRY::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\AutoRun.inf" `
        -ErrorAction SilentlyContinue
    if (-not $item) {
        $item = New-Item "REGISTRY::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\AutoRun.inf"
    }
    Set-ItemProperty $item.PSPath "(default)" "@SYS:DoesNotExist"
}
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Вот пояснения Ника о том, как это работает: 
&lt;P&gt;Этот хак предлагает Windows очистить AUTORUN.INF так, как если бы он был файлом конфигурации старого приложения до времен Windows 95. IniFileMapping – это ключ, который сообщает Windows, как работать с файлами .INI, которые это приложение обычно использует для хранения данных о настройках (практиковалось до появления реестра). В этом случае он сообщает: «когда начнете работать с файлом AUTORUN.INF, не используйте значения из файла. Используйте альтернативные значения из HKEY_LOCAL_MACHINE\SOFTWARE\DoesNotExist». И поскольку этот ключ, точно, не создан, дело обстоит так, как если бы AUTORUN.INF был совершенно пуст, так что никакого автозапуска, и к двойному щелчку в Обозревателе ничего не добавляется. Результат: черви не запускаются – если только вы двойным щелчком не запустите исполняемые файлы, чтобы посмотреть, что они делают. В этом случае вы заслужили, чтобы ваш ПК был заражен. 
&lt;P&gt;Если вы захотите отменить изменения в реестре и снова включить автозапуск, можно использовать приведенную ниже функцию: 
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;function Enable-AutoRun
{
    Remove-Item "REGISTRY::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\AutoRun.inf" -Force
}
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Надеюсь, это вам поможет, 
&lt;P&gt;Джеймс Брандейдж (James Brundage) [MSFT]&lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3213902" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author></entry><entry><title>Коммандлеты групповых политик в Windows 7</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213908.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213908.aspx</id><published>2009-03-17T14:04:00Z</published><updated>2009-03-17T14:04:00Z</updated><content type="html">&lt;P&gt;Лилия Гутник (Lilia Gutnik) опубликовала &lt;A href="http://blogs.technet.com/grouppolicy/archive/2009/01/14/introduction-to-windows-powershell-cmdlets-in-windows-7.aspx" mce_href="http://blogs.technet.com/grouppolicy/archive/2009/01/14/introduction-to-windows-powershell-cmdlets-in-windows-7.aspx"&gt;ЗДЕСЬ&lt;/A&gt; запись с примером коммандлетов групповых политик Windows 7. Посмотрите. 
&lt;P&gt;Экспериментируйте, не скучайте, подключайтесь! 
&lt;P&gt;Джеффри Сновер (Jeffrey Snover) [MSFT] &lt;BR&gt;Windows Management Partner Architect &lt;BR&gt;Посетите английский блог команды&amp;nbsp; Windows PowerShell:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://blogs.msdn.com/PowerShell" mce_href="http://blogs.msdn.com/PowerShell"&gt;http://blogs.msdn.com/PowerShell&lt;/A&gt;&lt;BR&gt;Посетите Windows PowerShell ScriptCenter:&amp;nbsp; &lt;A href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx" mce_href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx"&gt;http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3213908" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author></entry><entry><title>Отладка сценария PowerShell с помощью редактора ISE</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213840.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213840.aspx</id><published>2009-03-17T13:56:00Z</published><updated>2009-03-17T13:56:00Z</updated><content type="html">&lt;p&gt;Привет, писатели и потребители сценариев с ошибками.&lt;br&gt;В этом сообщении описываются основы работы с графическим отладчиком в ISE. Здесь приведено множество отличных рекомендаций, а также несколько советов и трюков.&lt;br&gt;Отладчик поддерживает как коммандлеты, так и пользовательский интерфейс. Коммандлеты включают Enable/Disable/Get/Set/Remove-PsBreakpoint и Get-PsCallStack.&lt;br&gt;Основной способ работы – расставить в сценарии точки останова, продолжать работу (F5) для перехода от одной точки останова до другой и проходить функции, входить и выходить из них для перемещения по программе. Также можно использовать стек вызовов и указывать на переменные для получения их значений.&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;b&gt;Точки останова&lt;br&gt;&lt;/b&gt;&lt;br&gt;Добавить точку остановка в строку просто, в любом сценарии нужно нажать клавишу F9 или воспользоваться контекстным меню (Enable Breakpoint). Однако их можно добавлять только в сохраненные сценарии. Так что если у вас есть файл untitled.ps1, сначала сохраните его с именем «powershellmademesaveyou.ps1». Так же можно работать с файлами psm1. Точки останова можно ставить на самые разные строки, вы сможете увидеть как они работают в любых циклах, в блоках сценариев, в блоках if-else, в ловушках и т.д..&lt;br&gt;Специальные точки останова можно добавлять с помощью Set-PSBreakpoint (сокращение «sbp»). Например, «sbp -command write-error» перенесет вас к команде, когда она будет исполняться, а «sbp -variable servername» будет останавливать исполнение при изменении содержимого (или обращении) к переменной $servername. Эти точки останова не выводятся на экран и должны устанавливаться/удаляться через командную строку.&lt;br&gt;Чтобы просмотреть список таких точек, перейдите к Debug-&amp;gt;List Breakpoints.&lt;br&gt;Их можно также легко удалить через контекстное меню или клавишей F9 (или через меню Debug, а также коммандлетом remove-psbreakpoint)&lt;br&gt;Точки останова также можно добавлять при остановке отладчика, но не во время активного исполнения сценария.&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;b&gt;Навигация и исследование&lt;/b&gt;&lt;/p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;p&gt;&lt;br&gt;Навигация и исследование в ISE оформлены очень аккуратно. Для перехода от одной точки останова к другой воспользуйтесь командой Continue (F5). Чтобы перешагнуть функции нажмите F10, для входа в функцию - F11, а для выхода из функции - Shift-F11. Во время навигации легко добавить новые контрольные точки, которые можно использоваться для перешагивания через функции.&lt;br&gt;ISE автоматически откроет сценарий, в котором находится вызванная функция.&lt;br&gt;Оказавшись в интересующей вас точке, вы можете:&lt;br&gt;- Установить курсор на переменную, чтобы увидеть ее значение. Это очень быстрый способ узнать, что происходит&lt;br&gt;- Выполнить выделенный фрагмент с помощью клавиши F6. Вы можете выполнить условие блока if, чтобы узнать результат. Вы можете выполнить часть строки сценария, независимо от остального фрагмента.&lt;br&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Выполнить команду в панели команд. Вы можете проверить сложное выражение с полными настройками. Также здесь можно изменить значения переменных.&lt;br&gt;- Получить стек вызовов (Ctrl-Shift-D), чтобы узнать, как глубоко лежит ваша проблема&lt;br&gt;- Запросить справку по коммандлету, выбрав его с помощью мыши и нажав F1&lt;br&gt;Возможно это подходящий момент прекратить отладку (Shift-F5) и перезапуститься. Во время отладки сценарии блокируются, так что для продолжения редактирования вам следует прекратить отладку.&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;b&gt;Получайте удовольствие от отладки с &lt;/b&gt;&lt;b&gt;ISE Extensions&lt;/b&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;- Получить последнее исключение&lt;br&gt;o&amp;nbsp;&amp;nbsp; $psISE.CustomMenu.Submenus.Add('Show Exception', {$error[$Error.Count - 1].Exception | fl -f *}, "Ctrl+Shift+E")&lt;br&gt;- Информация о выборе дампа&lt;br&gt;o&amp;nbsp;&amp;nbsp; $psISE.CustomMenu.Submenus.Add('Get-Member', {iex $psISE.CurrentOpenedFile.Editor.SelectedText | gm | ft; iex $psISE.CurrentOpenedFile.Editor.SelectedText | fl -f *; }, "Ctrl+D")&lt;br&gt;- Переход к определению&lt;br&gt;o&amp;nbsp;&amp;nbsp; function GotoDefinition($commandName)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $command = gcm -CommandType Function $commandName&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $file = $command.ScriptBlock.File&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $position = $command.ScriptBlock.StartPosition&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $runspace = $psISE.CurrentOpenedRunspace&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $runspace.OpenedFiles.Add($file)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ($runspace.OpenedFiles | ?{$_.FullPath -eq $file}).Editor.SetCaretPosition($position.StartLine, $position.StartColumn)&lt;br&gt;}&lt;br&gt;$psISE.CustomMenu.Submenus.Add("GotoDefinition", {GotoDefinition $psISE.CurrentOpenedFile.Editor.SelectedText}, "Ctrl+Shift+G")&lt;br&gt;GotoDefinition не будет работать, пока функции не определены, но вы можете дополнить ее, чтобы она выполняла дополнительную работу.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/APIpsISE_9A0D/powershell_debugger_2.png" target="_blank" mce_href="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/APIpsISE_9A0D/powershell_debugger_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="powershell_debugger" border="0" alt="powershell_debugger" src="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/APIpsISE_9A0D/powershell_debugger_thumb.png" width="644" height="362" mce_src="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/APIpsISE_9A0D/powershell_debugger_thumb.png"&gt;&lt;/a&gt; &lt;a href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx" mce_href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Надеюсь, это вам поможет,  &lt;p&gt;Ибрагим Абдул Рахим (Ibrahim Abdul Rahim) [MSFT]&lt;/p&gt; &lt;p&gt;Перевод: &lt;a href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3213840" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author><category term="CTP3" scheme="http://blogs.technet.com/powershell_ru/archive/tags/CTP3/default.aspx" /><category term="PowerShell V2" scheme="http://blogs.technet.com/powershell_ru/archive/tags/PowerShell+V2/default.aspx" /><category term="PowerShell ISE" scheme="http://blogs.technet.com/powershell_ru/archive/tags/PowerShell+ISE/default.aspx" /></entry><entry><title>Управление Windows Update из PowerShell</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213794.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213794.aspx</id><published>2009-03-17T11:03:00Z</published><updated>2009-03-17T11:03:00Z</updated><content type="html">&lt;P&gt;Джеймс О’Нил (James O’Neil) написал, как &lt;A href="http://blogs.technet.com/jamesone/archive/2009/01/27/managing-windows-update-with-powershell.aspx" mce_href="http://blogs.technet.com/jamesone/archive/2009/01/27/managing-windows-update-with-powershell.aspx"&gt;управлять Windows Update с помощью Windows PowerShell&lt;/A&gt; 
&lt;P&gt;Вот краткий пример того, что он может делать: 
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Add&lt;/EM&gt;&lt;EM&gt;-&lt;/EM&gt;&lt;EM&gt;WindowsUpdate&lt;/EM&gt;&lt;EM&gt; –&lt;/EM&gt;&lt;EM&gt;Auto&lt;/EM&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; для загрузки обновлений и перезапуска системы, если это необходимо, &lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Set&lt;/EM&gt;&lt;EM&gt;-&lt;/EM&gt;&lt;EM&gt;WindowsUpdateConfig&lt;/EM&gt;&lt;EM&gt; &lt;/EM&gt;&lt;EM&gt;-&lt;/EM&gt;&lt;EM&gt;n&lt;/EM&gt;&lt;EM&gt; 4 –&lt;/EM&gt;&lt;EM&gt;i&lt;/EM&gt;&lt;/FONT&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;для установки времени проверки обновлений (включая рекомендованные) &lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;EM&gt;Get&lt;/EM&gt;&lt;EM&gt;-&lt;/EM&gt;&lt;/FONT&gt;&lt;EM&gt;&lt;FONT color=#0000ff&gt;WindowsUpdateConfig&lt;/FONT&gt;&amp;nbsp;&amp;nbsp; для проверки настроек Windows Update&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Посмотрите: 
&lt;P&gt;&lt;A href="http://blogs.technet.com/jamesone/archive/2009/01/27/managing-windows-update-with-powershell.aspx" mce_href="http://blogs.technet.com/jamesone/archive/2009/01/27/managing-windows-update-with-powershell.aspx"&gt;http://blogs.technet.com/jamesone/archive/2009/01/27/managing-windows-update-with-powershell.aspx&lt;/A&gt; 
&lt;P&gt;Надеюсь, это вам поможет, 
&lt;P&gt;Джеймс Брандейдж (James Brundage) [MSFT] &lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3213794" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author><category term="Windows Update" scheme="http://blogs.technet.com/powershell_ru/archive/tags/Windows+Update/default.aspx" /></entry><entry><title>Управление компонентами (Features) сервера Windows 2008 Server R2 Beta с помощью коммандлетов PowerShell</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213815.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213815.aspx</id><published>2009-03-17T10:00:00Z</published><updated>2009-03-17T10:00:00Z</updated><content type="html">&lt;P&gt;Если вы уже использовали Windows Server 2008, у вас, возможно, есть опыт в &lt;A href="http://technet.microsoft.com/en-us/library/cc732131.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc732131.aspx"&gt;управлении компонентами сервера.&lt;/A&gt; Server Manager – Это традиционный способ установки/удаления компонентов сервера. В &lt;A href="http://www.microsoft.com/windowsserver2008/en/us/R2-Beta.aspx" mce_href="http://www.microsoft.com/windowsserver2008/en/us/R2-Beta.aspx"&gt;Windows 2008 Server R2 Beta&lt;/A&gt; Windows PowerShell обеспечивает новый подход к управлению компонентами сервера с помощью коммандлетов PowerShell для Server Manager. В этой заметке мы поговорим о том как устанавливать компоненты сервера с помощью этих коммандлетов. 
&lt;P&gt;Для использования коммандлетов Server Manager нам требуется импортировать модуль servermanager, выполнив команду PowerShell «Import-Module servermanager». Это необходимо потому, что нужные нам коммандлеты находятся в модуле servermanager, а не являются частью встроенных коммандлетов PowerShell. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/FeaturesWindows2008ServerR2BetaPowerShel_8C6F/powershell_ws2008_2.png" target=_blank mce_href="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/FeaturesWindows2008ServerR2BetaPowerShel_8C6F/powershell_ws2008_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="powershell server manager windows server 2008 r2" border=0 alt="powershell server manager windows server 2008 r2" src="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/FeaturesWindows2008ServerR2BetaPowerShel_8C6F/powershell_ws2008_thumb.png" width=692 height=212 mce_src="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/FeaturesWindows2008ServerR2BetaPowerShel_8C6F/powershell_ws2008_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;На снимке консоли выше мы видим, что модуль servermanager содержит три коммандлета PowerShell. Запустим командлет «Get-WindowsFeature», который выдаст нам список имен компонентов Windows. У нас получится довольно длинный список, поэтому я не буду приводить здесь снимок экрана. Если взять в качестве примера .NET Framework 3.5.1, имя компонента будет «NET-Framework». Мы можем пойти дальше и установить эту функцию. Следует предупредить, что для того, чтобы «Add-WindowsFeature» сработала, следует запустить PowerShell с правами администратора. 
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/FeaturesWindows2008ServerR2BetaPowerShel_8C6F/powershell_ws2008_1_2.png" target=_blank mce_href="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/FeaturesWindows2008ServerR2BetaPowerShel_8C6F/powershell_ws2008_1_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="powershell add role windows server 2008 r2" border=0 alt="powershell add role windows server 2008 r2" src="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/FeaturesWindows2008ServerR2BetaPowerShel_8C6F/powershell_ws2008_1_thumb.png" width=699 height=349 mce_src="http://blogs.technet.com/blogfiles/powershell_ru/WindowsLiveWriter/FeaturesWindows2008ServerR2BetaPowerShel_8C6F/powershell_ws2008_1_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Обратите внимание что после выполнения коммандлета «Add-WindowsFeature» в столбце «Display Name» появился знак [X]. Он указывает на то, что компонент добавлен. Чтобы убедиться в этом, всегда можно сверить результаты с тем что показывает графический интерфейс Server Manager. Кстати, эти коммандлеты позволяют управлять не только компонентами, но и ролями сервера. Так, команда «Add-WindowsFeature Web-Server» устанавливает роль Web Server (IIS). 
&lt;P&gt;Все просто, верно? 
&lt;P&gt;Ксин Ли (Xin Li) 
&lt;P&gt;Windows PowerShell Team &lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3213815" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author></entry><entry><title>Остановка любого экземпляра PowerShell.exe (кроме текущего)</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213780.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/17/3213780.aspx</id><published>2009-03-17T07:18:00Z</published><updated>2009-03-17T07:18:00Z</updated><content type="html">&lt;P&gt;Наш архитектор тестирования недавно ввалился ко мне в офис и подбросил вопрос по PowerShell с очень, очень интересным ответом. 
&lt;P&gt;Он захотел остановить любой процесс с указанным именем, кроме экземпляра, в котором выполняется сценарий. 
&lt;P&gt;Это можно сделать одним хорошим конвейером: 
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;FONT color=#0000ff&gt;
Get-Process Powershell  | Where-Object { $_.ID -ne $pid } | Stop-Process
&lt;/FONT&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;Get-Process получает позиционный параметр (имя), которое является шаблоном, описывающим имя искомого процесса. Он возвращает кучу объектов ProcessInfo, которые имеют свойство, ID (ID процесса). $pid – это переменная, которая сообщает вам ID текущего процесса в PowerShell. Where-Object { $_.ID -ne $pid } просто возвращает каждый экземпляр, который не является текущим. Stop-Process извлекает нужные данные из каждого объекта ProcessInfo и останавливает переданный ему процесс (здесь это любой экземпляр PowerShell, кроме текущего). 
&lt;P&gt;Еще один день и еще один вопрос о PowerShell получил свой ответ. 
&lt;P&gt;Надеюсь, это вам поможет. 
&lt;P&gt;Джеймс Брандейдж (James Brundage) [MSFT] &lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3213780" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author></entry><entry><title>Бесплатная электронная книга по PowerShell</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/09/3214035.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/09/3214035.aspx</id><published>2009-03-09T06:00:00Z</published><updated>2009-03-09T06:00:00Z</updated><content type="html">&lt;P&gt;PowerShell MVP и замечательный блоггер специализирующийся на PowerShell &lt;A href="http://keithhill.spaces.live.com/default.aspx" mce_href="http://keithhill.spaces.live.com/default.aspx"&gt;Кит Хилл (Keith Hill)&lt;/A&gt; собрал заметки из своей популярнейшей серии Effective PowerShell в БЕСПЛАТНУЮ электронную книгу. Ее можно загрузить &lt;A href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!6930.entry" mce_href="http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!6930.entry"&gt;ЗДЕСЬ&lt;/A&gt;. 
&lt;P&gt;Смотрите, что вы получите: 
&lt;P&gt;&lt;B&gt;Содержание&lt;/B&gt;&lt;BR&gt;Введение ...................................................................................................................................................................1 &lt;BR&gt;Глава 1: Четыре коммандлета – ключ к информации в PowerShell ..................................................................1 &lt;BR&gt;Ключ №1: Get-Command ..........................................................................................................................................1 &lt;BR&gt;Ключ №2: Get-Help ...................................................................................................................................................2 &lt;BR&gt;Ключ №3: Get-Member ............................................................................................................................................5 &lt;BR&gt;Ключ №4: Get-PSDrive ..............................................................................................................................................6 &lt;BR&gt;Обновления в PowerShell 2.0.....................................................................................................................................7 &lt;BR&gt;Глава 2: Разбираемся с выводом................................................................................................................................8 &lt;BR&gt;Вывод – всегда объект .NET....................................................................................................................................8 &lt;BR&gt;Вывод функции содержит все, что не перехвачено.................................................................................................9 &lt;BR&gt;Другие типы вывода, которые не перехватываются.............................................................................................. 11 &lt;BR&gt;Глава 3: Узнайте, какие объекты идут по конвейеру........................................................................................... 12 &lt;BR&gt;Глава 4: Вывод множеств - скаляры, коллекции и пустые наборы – о боже! ................................................. 15 &lt;BR&gt;Работа со скалярами.............................................................................................................................................. 15 &lt;BR&gt;Работа с коллекциями........................................................................................................................................... 16 &lt;BR&gt;Работа с пустыми наборами................................................................................................................................. 17 &lt;BR&gt;Глава 5: Используй объекты, Люк. Используй объекты! ................................................................................. 19 &lt;BR&gt;Глава 6: Узнайте форматирование вывода.......................................................................................................... 22 &lt;BR&gt;Глава 7: Режимы разбора PowerShell ................................................................................................................ 31 &lt;BR&gt;Глава 8: Параметры связывания конвейера ByPropertyName .......................................................................... 35 &lt;BR&gt;Глава 9: Параметры связывания конвейера ByValue ......................................................................................... 38 &lt;BR&gt;Глава 10: Регулярные выражения – один из мощных инструментов PowerShell ............................................. 42 &lt;BR&gt;Обновления в PowerShell 2.0 ................................................................................................................................. 43 &lt;BR&gt;Глава 11: Сравнение массивов................................................................................................................................ 43 &lt;BR&gt;Глава 12: Используйте в сценариях Set-PSDebug -Strict - добросовестно.......................................................... 45 &lt;BR&gt;Обновления в PowerShell 2.0 .................................................................................................................................. 47 &lt;BR&gt;Глава 13: Комментирование строк в файле сценария.......................................................................................... 47 &lt;BR&gt;Обновления в PowerShell 2.0 .................................................................................................................................. 48 
&lt;P&gt;Экспериментируйте, не скучайте, подключайтесь! 
&lt;P&gt;Джеффри Сновер (Jeffrey Snover) [MSFT] &lt;BR&gt;Windows Management Partner Architect &lt;BR&gt;Посетите английский блог команды&amp;nbsp; Windows PowerShell:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://blogs.msdn.com/PowerShell" mce_href="http://blogs.msdn.com/PowerShell"&gt;http://blogs.msdn.com/PowerShell&lt;/A&gt;&lt;BR&gt;Посетите Windows PowerShell ScriptCenter:&amp;nbsp; &lt;A href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx" mce_href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx"&gt;http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3214035" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author></entry><entry><title>Саммит MVP 2009</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/02/3214042.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/02/3214042.aspx</id><published>2009-03-02T04:28:00Z</published><updated>2009-03-02T04:28:00Z</updated><content type="html">&lt;P&gt;Вчера начался саммит MVP, а сегодня мы встретились с нашими MVP. Это одно из самых любимых событий года. MVP – это люди сообщества, которые очень активны (и полезны [да – и то, и другое :-)] ). Каждый из них занимается в сообществе определенной технологией. Мы каждый год собираем их вместе и получаем отличный обмен идеями. Мы говорим им, что мы делаем и чего хотим добиться, а они дают нам свои комментарии и отзывы. MVP – это неоценимый источник связи с реальным миром по нашей технологии. 
&lt;P&gt;В этом году я действительно поражен, потому что я участвовал организации и выступал во время дискуссии «Состояние PowerShell» вместе с Кеннетом Хансеном (Kenneth Hansen). Кен был председателем, и я был действительно поражен его подходом. Мы с Кеном пришли к выводу, что не знаем, видят ли люди все аспекты «большой картины», и мы пытались понять, как о них говорить. Мы с Кеном в пятницу просматривали слайды презентации, и я подумал, что он сделал отличное дело, представив эти идеи. Это был один из тех разговоров «за сценой», в которых мы обсуждали, что представляет собой проблема, как мы будем подходить к ней, где мы находимся и куда направляемся. К счастью, это было общение после которого люди расходятся, говоря «ТЕПЕРЬ я понимаю, зачем ты это делал». 
&lt;P&gt;MVP великолепны, поскольку они всегда скажут вам, если вы делаете что то непонятное или очевидное. &lt;B&gt;&lt;I&gt;Честное зеркало&lt;/I&gt;&lt;/B&gt; трудно найти, и оно исключительно ценно. Мы сегодня обнаружили, что проговорили до 9. 
&lt;P&gt;Экспериментируйте, не скучайте, подключайтесь!&lt;/P&gt;
&lt;P&gt;Джеффри Сновер (Jeffrey Snover) [MSFT] &lt;BR&gt;Windows Management Partner Architect &lt;BR&gt;Посетите английский блог команды&amp;nbsp; Windows PowerShell:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://blogs.msdn.com/PowerShell" mce_href="http://blogs.msdn.com/PowerShell"&gt;http://blogs.msdn.com/PowerShell&lt;/A&gt;&lt;BR&gt;Посетите Windows PowerShell ScriptCenter:&amp;nbsp; &lt;A href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx" mce_href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx"&gt;http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3214042" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author></entry><entry><title>Фолксономия PowerShell – вы в теме?</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/01/3214116.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/01/3214116.aspx</id><published>2009-03-01T09:14:00Z</published><updated>2009-03-01T09:14:00Z</updated><content type="html">&lt;P&gt;Недавно я провел несколько экспериментов с &lt;A href="http://en.wikipedia.org/wiki/Folksonomy" mce_href="http://en.wikipedia.org/wiki/Folksonomy"&gt;фолксономией&lt;/A&gt; PowerShell. Идея состояла в том, чтобы пометить содержимое Интернета (блоги, комментарии, ответы в группах новостей и т.д.) уникальными тегами, которые могли бы воспринимать поисковые машины, чтобы облегчить извлечение необходимой информации. 
&lt;P&gt;Эти усилия были результатом битвы связанной с созданием документации. Особенно ожесточенно мы вели борьбу за использование термина &lt;B&gt;коммандлет&lt;/B&gt;. Коммандлет - это слово, который я создал, чтобы описывать команды PowerShell. Я хотел показать, что это такие маленькие штучки, которые соединяются с другими маленькими штучками для решения больших проблем. Одной из причин, по которым я был предан идее «маленьких» коммандлетов, было то, что я знал, что группа разработки сопротивлялась «налогу» на написание слова «комманды». Я хотел быть в состоянии начать целую дискуссию с исходным условием, что мы просим их проделать совсем немного добавочной работы. 
&lt;P&gt;&lt;I&gt;Позвольте, я поправлю запись об этом.&lt;/I&gt;&lt;I&gt; &lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;Джим Трухер (&lt;/I&gt;&lt;I&gt;Jim&lt;/I&gt;&lt;I&gt; &lt;/I&gt;&lt;I&gt;Truher&lt;/I&gt;&lt;I&gt;)напомнил мне, чтов начале я пытался протоклнуть термин «Функциональный элемент» (&lt;/I&gt;&lt;I&gt;Functional&lt;/I&gt;&lt;I&gt; &lt;/I&gt;&lt;I&gt;Unit&lt;/I&gt;&lt;I&gt;, &lt;/I&gt;&lt;I&gt;FU&lt;/I&gt;&lt;I&gt;) [надеюсь вы поняли мою хитрость?] и что на самом деле термин «коммандлет» придумал он, а не я.&lt;/I&gt;&lt;I&gt; &lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;Попытка внедрить «&lt;/I&gt;&lt;I&gt;FU&lt;/I&gt;&lt;I&gt;» напомнила мне о замечательной истории Дейва Катлера (&lt;/I&gt;&lt;I&gt;Dave&lt;/I&gt;&lt;I&gt; &lt;/I&gt;&lt;I&gt;Cutler&lt;/I&gt;&lt;I&gt;), которую я как-то слышал.&lt;/I&gt;&lt;I&gt; &lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;Не ждите – я не расскажу ТУ историю в блоге – никогда, просто не обращайте на нее внимания. &lt;/I&gt;
&lt;P&gt;Перспектива документирования была такой, что мы не должны изобретать новые слова, ведь имеется отличный устоявшийся термин («команда»). Мы рассмотрели ситуацию с разных сторон, решающим аргументом стало то, что происходит после ввода предполагаемых ключевых слов в поисковые машины. 
&lt;TABLE border=1 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=163&gt;
&lt;P&gt;Слово для поиска&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=165&gt;
&lt;P&gt;Live Search&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=165&gt;
&lt;P&gt;Google&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=163&gt;
&lt;P&gt;Команда&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=165&gt;
&lt;P&gt;102,000,000&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=165&gt;
&lt;P&gt;200,000,000&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=163&gt;
&lt;P&gt;Коммандлет&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=166&gt;
&lt;P&gt;29,600&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=166&gt;
&lt;P&gt;107,000&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=163&gt;
&lt;P&gt;Соотношение&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=166&gt;
&lt;P&gt;3446x&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=166&gt;
&lt;P&gt;1869x&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Используя термин «коммандлет», мы повышаем соотношение сигнал-шум для поисковых машин и обеспечиваем нашим потребителям гораздо более полезный результат. 
&lt;P&gt;Я начал думать об этом и мне стало любопытно, нельзя ли еще более улучшить ситуацию, введя уникальный тег PSMDTAG&amp;nbsp; (PowerShell MetaData TAG) и соглашение по его использованию так, чтобы люди могли использовать этот тег, чтобы более точно находить требуемое. 
&lt;P&gt;Я приправлял все создаваемое мной содержимое этим тегом, экспериментировал с различными тегами-расширениями и смотрел, как на них реагируют поисковые машины. В некоторых случаях я отвлекался и прекращал это делать, но кто-то каждый раз снова об этом упоминал, и я возвращался к экспериментам. &lt;B&gt;Для достижения успеха нужно участие всего сообщества, поэтому я хотел бы узнать действительно ли то в чем все заинтересованы поучаствовать&lt;/B&gt;. 
&lt;P&gt;Давайте начнем с простого – зайдите в свой любимый поисковик, наберите PSMDTAG:FAQ&amp;nbsp; и посмотрите на результаты поиска. Вы найдете не слишком много, поскольку я занимаюсь этим не так давно. Заметьте, что результаты поиска выдают вам большинство типичных часто встречающихся вопросов FAQ. Затем попробуйте что-нибудь вроде: 
&lt;P&gt;psmdtag:faq prompt &lt;BR&gt;psmdtag:faq delegate &lt;BR&gt;psmdtag:faq wmi method &lt;BR&gt;psmdtag:faq base64 
&lt;P&gt;Скажу еще раз – вы не сойдете с ума от изобилия, поскольку я пока расставил не слишком много тегов. Вопросы, которые я хочу задать: 
&lt;OL&gt;
&lt;LI&gt;Полезно ли это? 
&lt;LI&gt;Достаточно или это полезно для вас, чтобы вы начали помечать тегом свои материалы или добавлять теги в комментарии к материалам других людей? 
&lt;OL&gt;
&lt;LI&gt;Посмотрите на &lt;A href="http://mshforfun.blogspot.com/2006/05/perfect-prompt-for-windows-powershell.html" mce_href="http://mshforfun.blogspot.com/2006/05/perfect-prompt-for-windows-powershell.html"&gt;ЭТО&lt;/A&gt;. Я использую комментарии для пометки тегами чужих материалов. &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;PSMDTAG:FAQ Что такое PSMDTAG? &lt;BR&gt;PSMDTAG:FAQ&amp;nbsp; Будет ли PowerShell иметь собственную фолксономию? 
&lt;P&gt;Экспериментируйте, не скучайте, подключайтесь! 
&lt;P&gt;Джеффри Сновер (Jeffrey Snover) [MSFT] &lt;BR&gt;Windows Management Partner Architect &lt;BR&gt;Посетите английский блог команды&amp;nbsp; Windows PowerShell:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://blogs.msdn.com/PowerShell" mce_href="http://blogs.msdn.com/PowerShell"&gt;http://blogs.msdn.com/PowerShell&lt;/A&gt;&lt;BR&gt;Посетите Windows PowerShell ScriptCenter:&amp;nbsp; &lt;A href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx" mce_href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx"&gt;http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3214116" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author></entry><entry><title>Откуда это взялось?</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/03/01/3214135.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/03/01/3214135.aspx</id><published>2009-03-01T08:37:00Z</published><updated>2009-03-01T08:37:00Z</updated><content type="html">&lt;P&gt;Доводилось ли вам раньше задавать себе вопрос: «откуда ЭТО взялось?» 
&lt;P&gt;В PowerShell мы постарались дать вам механизм, который можно использовать для ответов на подобные вопросы. Мы потратили для этого дополнительные ресурсы (память, циклы ЦПУ и т.д.), для нас важнее производительность ЛЮДЕЙ, использующих наши программы, а не на производительность кода. Когда что-то принимает неправильную форму, важно, как быстро человек может понять, что происходит и исправить положение. 
&lt;P&gt;Раньше мы немного говорили об этом, но лишь в контексте обширной информации об ошибках, которую мы собираем. Но в этом блоге я хочу обсудить другую функцию V1, а затем рассказать вам о ДРУГОМ любимом мною V2-изме. 
&lt;P&gt;Вы знаете, что переменные выступают в качестве устройства и с ними можно делать такие вещи:&lt;/P&gt;
&lt;DIV&gt;&lt;PRE class=csharpcode&gt;&lt;FONT color=#8000ff&gt;PS&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt; dir Variable:s* 
Name                           Value 
----                           ----- 
ShellId                        Microsoft.PowerShell&lt;/FONT&gt;
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;А так вы пробовали? 
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;FONT color=#8000ff&gt;PS&lt;SPAN style="COLOR: #0000ff"&gt;&amp;gt;&lt;/SPAN&gt; dir Variable:s* |ft Name,&lt;FONT color=#ff0000&gt;Description&lt;/FONT&gt; -auto 
Name       Description 
----       ----------- 
ShellId    The ShellID identifies the current shell.  This is used by #Requires. 
StackTrace&lt;/FONT&gt;
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Вы об этом знали? Переменные содержат гораздо больше сведений, чем может увидеть невооруженный глаз! Вы можете задать описание переменной, используя команду Set-Variable&amp;nbsp; 
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;FONT color=#0000ff&gt;
PS&amp;gt; Set-Variable X 15 -Description "This is a test" 
PS&amp;gt; Get-Variable x |fl * 
Name        : x 
Description : This is a test 
Value       : 15 
Visibility  : Public 
Module      : 
ModuleName  : 
Options     : None 
Attributes  : {}

&lt;/FONT&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Это работало, начиная с PowerShell V1, но тогда мы были не в состоянии ответить на вопрос – откуда взялась эта &lt;B&gt;функция&lt;/B&gt;? 
&lt;P&gt;Каждый раз когда я начинаю работать с PowerShell, первым делом с поvощью механизма dotsourcing я подключаю множество сценариев, которые определяют функции. Иногда я решал, что одна из постоянно используемых функций, нуждается в улучшении и должна работать иначе. Возникал вопрос, в каком файле была описана эта функция? Нормального способа ответить на этот вопрос не было. В PowerShell V2 все изменилось. 
&lt;P&gt;В V2 мы расширили объект SCRIPTBLOCK добавив в него параметр FILE, благодаря которому можно посмотреть в каком файле была объявлена функция.&amp;nbsp; Для получения всей информации о Scriptblock, необходимо использовать флаг -FORCE в командах форматирования. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;FONT color=#0000ff&gt;
[4376:0]PS&amp;gt; (dir function:prompt ).scriptblock |fl * 
    if ($PSDebugContext) 
    { "DBG&amp;gt;" 
    } 
    else 
    { 
        "[{0}:{1}]PS&amp;gt; " -f $PID, $NestedPromptLevel 
    } 
[4376:0]PS&amp;gt; (dir function:prompt ).scriptblock |fl * &lt;FONT color=#ff0000&gt;-force&lt;/FONT&gt; 
IsFilter      : False 
StartPosition : System.Management.Automation.PSToken 
&lt;FONT color=#ff0000&gt;File          : D:\ps\profile.ps1&lt;/FONT&gt; 
Attributes    : {} 
Module        :
&lt;/FONT&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Теперь мы получили все что нам нужно, и можем обращаться к этим сведениям напрямую: 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;FONT color=#0000ff&gt;
[4376:0]PS&amp;gt; (dir function:prompt ).scriptblock.file 
D:\ps\profile.ps1

&lt;/FONT&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;PSMDTAG:FAQ: Как узнать, где определена функция? &lt;BR&gt;(dir function:X).ScriptBlock.File 
&lt;P&gt;Экспериментируйте, не скучайте, подключайтесь! 
&lt;P&gt;Джеффри Сновер (Jeffrey Snover) [MSFT] &lt;BR&gt;Windows Management Partner Architect &lt;BR&gt;Посетите английский блог команды&amp;nbsp; Windows PowerShell:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://blogs.msdn.com/PowerShell" mce_href="http://blogs.msdn.com/PowerShell"&gt;http://blogs.msdn.com/PowerShell&lt;/A&gt;&lt;BR&gt;Посетите Windows PowerShell ScriptCenter:&amp;nbsp; &lt;A href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx" mce_href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx"&gt;http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3214135" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author></entry><entry><title>Преобразование в массив</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/02/27/3214144.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/02/27/3214144.aspx</id><published>2009-02-27T12:27:00Z</published><updated>2009-02-27T12:27:00Z</updated><content type="html">&lt;P&gt;При запуске конвейера PowerShell этот конвейер может вернуть 0, 1 или несколько элементов. Если вы присваиваете результат конвейера переменной, вы получите $null, один элемент или массив элементов, соответственно. Часще всего вы не обращаете внимание на то какие типы возвращаются, но иногда вы предпочли бы принудительно приводить результат, чтобы он всегда представлял собой массив. В этих случаях вы можете использовать @( ... ). Например: 
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;FONT color=#0000ff&gt;$a = @(get-childitem)
&lt;/FONT&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;При этом выражение, заключенное в скобки, вычисляется и результаты помещаются в массив. Если результаты отсутствуют, вы получите массив нулевой длины. 
&lt;P&gt;Это обычно работает достаточно хорошо, но я обнаружил, что я обычно решаю, что мне нужен массив, уже глубоко закопавшись в написание конвейера. После этого мне приходится сдвигать курсор к началу конвейера, чтобы вставить «@(». Несколько раз повторив эту операцию, я устал и решил, что лучше буду добавлять в конец конвейера что-нибудь, что преобразует результаты в массив. Так родилась моя функция ToArray. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;FONT color=#0000ff&gt;
function ToArray
{
  begin
  {
    $output = @(); 
  }
  process
  {
    $output += $_; 
  }
  end
  {
    return ,$output; 
  }
}

&lt;/FONT&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Достаточно просто, да? Начальный блок создает новый пустой массив. Блок обработки, который вызывается для каждого элемента конвейера, добавляет элемент к массиву, а конечный блок просто помещает этот массив в массив длиной 1 и записывает его в конвейер. Мне приходится помещать массив $output в массив из 1-го элемента, поскольку конвейер раскрывает все перечисления (ну ладно, почти все). Этот способ просто раскрывает массив из 1-го элемента и находит, что осталось в моем исходном массиве. 
&lt;P&gt;Вы должны знать, что это не самый производительный способ. Для каждого элемента я создаю новый массив. Если я помещаю в конвейер множество элементов, мне веросятно было бы лучше использовать ArrayList, в конце преобразуя его в массив. Я оставляю это вам в качестве упражнения. 
&lt;P&gt;Для меня это срабатывает. Это несложно и упрощает мне жизнь. Теперь если мне нужно создать массив результатов, я просто передаю их в ToArray. Мне больше не нужно возвращаться в начало конвейера. :-) 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;FONT color=#0000ff&gt;$a = get-childitem | ToArray
&lt;/FONT&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;- Марсель Ортиц Сото (Marcel Ortiz Soto) [MSFT] 
&lt;P&gt;P.S. Если вам кажется, что ToArray – это слишком длинно, создайте сокращение.&lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3214144" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author></entry><entry><title>Разговор на JAOO</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/02/10/3213782.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/02/10/3213782.aspx</id><published>2009-02-10T04:51:00Z</published><updated>2009-02-10T04:51:00Z</updated><content type="html">&lt;P&gt;В прошлом году я был рад выступить на конференции JAOO. Это отличная конференция по языкам программирования. Я был рад обнаружить, что хотя у меня был доклад по технологиям Microsoft (AndersH дал мне один из ключевых докладов), большинство людей и докладов не имели отношения к Microsoft. Это позволило мне побеседовать на самые разные темы. Дало возможность вернуться к основам и объяснить, что мы делаем и как мы это делаем, людям, которым не обязательно имели хотя бы базовую подготовку и которые потенциально не особенно дружественно настроены по отношению к Microsoft. (У меня есть веселая история по этому поводу – спросите меня как-нибудь лично и я расскажу.) 
&lt;P&gt;Надеюсь, вы получите удовольствие от &lt;A href="http://blog.jaoo.dk/2009/02/09/windows-powershell-a-command-line-shell-and-scripting-language/" mce_href="http://blog.jaoo.dk/2009/02/09/windows-powershell-a-command-line-shell-and-scripting-language/"&gt;ЭТОГО&lt;/A&gt; выступления. 
&lt;P&gt;Экспериментируйте, не скучайте, подключайтесь! 
&lt;P&gt;Джеффри Сновер (Jeffrey Snover) [MSFT] &lt;BR&gt;Windows Management Partner Architect &lt;BR&gt;Посетите английский блог команды&amp;nbsp; Windows PowerShell:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://blogs.msdn.com/PowerShell" mce_href="http://blogs.msdn.com/PowerShell"&gt;http://blogs.msdn.com/PowerShell&lt;/A&gt;&lt;BR&gt;Посетите Windows PowerShell ScriptCenter:&amp;nbsp; &lt;A href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx" mce_href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx"&gt;http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3213782" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author><category term="Video" scheme="http://blogs.technet.com/powershell_ru/archive/tags/Video/default.aspx" /></entry><entry><title>Разница между версиями Windows PowerShell</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/02/06/3213792.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/02/06/3213792.aspx</id><published>2009-02-06T10:36:00Z</published><updated>2009-02-06T10:36:00Z</updated><content type="html">&lt;P&gt;MVP по PowerShell Ойсин Грехан (Oisín Grehan) сделал действительно большую работу, описав то чем отличаются друг от друга разные выпуски PowerShell. 
&lt;P&gt;V1 и CTP3 &lt;A href="http://www.nivot.org/2009/02/04/DifferencesBetweenPowerShell10RTMAndPowershell20CTP3Win7Beta.aspx" mce_href="http://www.nivot.org/2009/02/04/DifferencesBetweenPowerShell10RTMAndPowershell20CTP3Win7Beta.aspx"&gt;http://www.nivot.org/2009/02/04/DifferencesBetweenPowerShell10RTMAndPowershell20CTP3Win7Beta.aspx&lt;/A&gt; 
&lt;P&gt;CTP2 и CTP3 &lt;A href="http://www.nivot.org/2008/12/23/PowerShell20CTP3HasArrived.aspx" mce_href="http://www.nivot.org/2008/12/23/PowerShell20CTP3HasArrived.aspx"&gt;http://www.nivot.org/2008/12/23/PowerShell20CTP3HasArrived.aspx&lt;/A&gt; 
&lt;P&gt;Ойсин, большое спасибо!. 
&lt;P&gt;Осама Саджид (Osama Sajid) [MSFT] &lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3213792" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author><category term="CTP3" scheme="http://blogs.technet.com/powershell_ru/archive/tags/CTP3/default.aspx" /></entry><entry><title>Rename-Drive : Переименование устройств с помощью PowerShell и WMI</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/powershell_ru/archive/2009/01/27/3213801.aspx" /><id>http://blogs.technet.com/powershell_ru/archive/2009/01/27/3213801.aspx</id><published>2009-01-27T12:31:00Z</published><updated>2009-01-27T12:31:00Z</updated><content type="html">&lt;P&gt;Шейн Бартон (Shane Burton) из &lt;A href="http://www.compellent.com/" mce_href="http://www.compellent.com/"&gt;Compellent&lt;/A&gt; попросил меня помочь ему с переименованием устройства в PowerShell. Для переименования устройства можно использовать разные классы WMI, &lt;A href="http://msdn.microsoft.com/en-us/library/aa394515.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa394515.aspx"&gt;Win32_Volume&lt;/A&gt;, и &lt;A href="http://msdn.microsoft.com/en-us/library/aa394173.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa394173.aspx"&gt;Win32_LogicalDisk&lt;/A&gt;. Устройство изменяется путем выбора имени свойства объекта WMI (Label в Win32_Volume и VolumeName в Win32_LogicalDisk) с последующим возвращением его в репозиторий WMI с помощью метода Put(). @", @" WMI и PowerShell вместе позволяют сделать множество отличных штук. Если вы хотите быстро найти, что можно сделать с помощью WMI в PowerShell, просмотрите мою раннюю заметку: &lt;A href="http://blogs.msdn.com/powershell/archive/2007/09/24/get-wmihelp-search-wmihelp.aspx" mce_href="http://blogs.msdn.com/powershell/archive/2007/09/24/get-wmihelp-search-wmihelp.aspx"&gt;Get-WmiHelp / Search-WMIHelp&lt;/A&gt;. 
&lt;P&gt;Вот моя функция Rename-Drive: 
&lt;P&gt;Rename-Drive 
&lt;P&gt;&lt;B&gt;Краткое описание:&lt;/B&gt; 
&lt;P&gt;Переименовывает устройство с помощью WMI 
&lt;P&gt;&lt;B&gt;Синтаксис:&lt;/B&gt; 
&lt;P&gt;Rename-Drive [[-deviceID] [&amp;lt;Object&amp;gt;]] [[-name] [&amp;lt;Object&amp;gt;]] [&amp;lt;CommonParameters&amp;gt;] 
&lt;P&gt;&lt;B&gt;Подробное&lt;/B&gt;&lt;B&gt; описание&lt;/B&gt;&lt;B&gt;:&lt;/B&gt; 
&lt;P&gt;Использует класс Win32_LogicalDisk для переименования устройства с помощью WMI. Должна запускаться с правами администратора 
&lt;P&gt;Примеры: 
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;FONT color=#8000ff&gt;-------------------------- Пример 1 --------------------------

# Sets the name of C: to FooBar
Rename-Drive C: FooBar

    
    -------------------------- Пример 2 --------------------------

# Resets the name of C:
Rename-Drive C:&lt;/FONT&gt;
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Текст функции Rename-Drive:&lt;/P&gt;
&lt;DIV&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;FONT color=#8000ff&gt;function Rename-Drive {
              
    #.Synopsis
    #    Renames a drive with WMI
    #.Description 
    #    Uses the Win32_LogicalDisk class to rename a drive using WMI.  Must be running as administrator to use    
    #.Example    
    #    # Sets the name of C: to FooBar
    #    Rename-Drive C: FooBar
    #.Example
    #    # Resets the name of C:
    #    Rename-Drive C:     
    param($deviceID = "C:", $name)
$drive = Get-WmiObject "Win32_LogicalDisk WHERE DeviceID='$deviceID'"
    if (-not $drive) { return }                      
    $drive.VolumeName = $name
    $null = $drive.Put()

}&lt;/FONT&gt;
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Надеюсь, это вам поможет, 
&lt;P&gt;Джеймс Брандейдж (James Brundage) [MSFT]&lt;/P&gt;
&lt;P&gt;Перевод: &lt;A href="http://pwrshell.blogspot.com/" mce_href="http://pwrshell.blogspot.com/  "&gt;Виктор Горбунков&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3213801" width="1" height="1"&gt;</content><author><name>abeshkov</name><uri>http://blogs.technet.com/members/abeshkov.aspx</uri></author><category term="WMI" scheme="http://blogs.technet.com/powershell_ru/archive/tags/WMI/default.aspx" /></entry></feed>