sticky
FAQ по PowerShell

    General discussion

  • Как запустить .exe .com .cmd или .bat файл из PowerShell?

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

     

    Как выводить на экран возможные значения автодополнения в окошке ?

    Андрей Бешков: Для этого используется PowerTab. Взять PowerTab можно тут http://thepowershellguy.com/blogs/posh/pages/powertab.aspx

     

    Как вызвать скрипт из текущей папки если папка не содержится в path?

    Василий Гусев: Указать полный путь к файлу, либо использовать .\ для обозначения текущего каталога:

    .\Test.Ps1

     

    Как вызвать встроенную команду cmd, например assoc?

    Василий Гусев:

    Code Snippet

    cmd /c assoc | Select-String "ps1"

     

     

    Как использовать переменные окружения?

    Василий Гусев: В PowerShell переменные окружения вынесены в специальный диск: Env:\

    Можно сделать cd env: и посмотреть переменные окружения командой dir.

    Чтобы получить содержимое переменной окружения используется следующая конструкция:

    Code Snippet

    $env:computername

    cd $env:windir

    Write-Host "Welcome to $($env:computername)!"

     

     

    Как выполнить VB Script код в PowerShell (например если вы знаете как что то сделать в VBS, но не знаете как в PowerShell)?

    Василий Гусев:

    Code Snippet

    $vbs = New-Object -com MSScriptControl.ScriptControl

    $vbs.Language = "VBScript"

    $vbs.Eval('msgbox("hi")')

    $code = 'InputBox("Enter your name","Test")'

    $vbs.Eval($code)

     

     

    Как из результатов выполнения командлета выбрать строчки с определенным текстом?

    Василий Гусев: В большинстве случаев вам не нужны строчки с определенным текстом. Вам нужны объекты с определенными свойствами.

    Выбрать их можно так:

    Все файлы с размером более 1mb:

    Code Snippet

    dir | where {$_.length -ge 1mb}

     

    Все процессы запущенные из папки Windows:

    Code Snippet

    Get-Process | where {$_.path -like "c:\windows*"} | Stop-Process -whatif

     

    Расшаренные диски:

    Code Snippet

    Get-WmiObject win32_share | where {$_.path -like "?:\"}

     

     

    Как посмотреть какие свойства есть у объекта?

    Василий Гусев:1. С помощью команды Get-Member:

    Code Snippet

    Get-Process | Get-Member -type property

     

    2. С помощью команды Format-List *

    Code Snippet

    Get-Process explorer | Format-List *

     

    3. С помощью PowerTab:

    Code Snippet

    (Get-Process explorer)

     

     

    Мне действительно нужно выбрать только некоторые строки, например я хочу обработать текстовый файл.

    Василий Гусев:Используйте Select-String:

    Code Snippet

    Get-Content C:\Windows\WindowsUpdate.log | Select-String "error|warning"

    Get-Content C:\Windows\WindowsUpdate.log | where {$_ -match "error 0x(\d+)"} | foreach {$_.matches[1]}

     

     

    Как работать с регулярными выражениями?

    Василий Гусев:

    Code Snippet

    "Е-mail: xaegr@yandex.ru" -match "(?<Имя>\S+)@(?<Домен>\S+)"

    $matches

    $matches[0]

     

    А еще регулярные выражения можно использовать в Select-String или например switch -regex

     

    Операторы -eq -like -match и т.п. не чувствительны к регистру символов. Что делать?

    Василий Гусев: Приписать к оператору букву "c" (от Case):

    Code Snippet

    "Test" -eq "test"

    "Test" -ceq "test"

     

     

    Как посмотреть что это за команды - "%", "?", "gps" или "fl"?

    Василий Гусев:

    Code Snippet

    Get-Command % | fl

    Get-Command `? | fl

    Get-Command gps, fl | ft -AutoSize

    Get-Command ping

     

     

    Как изменить приглашение (prompt)? Хочу например пользователь@компьютер:каталог>

    Василий Гусев: Надо переопределить функцию prompt. Всё что вернёт эта функция будет приглашением. А можно в ней же выполнить и другие команды:

    Code Snippet

    function prompt {

    $host.UI.RawUI.WindowTitle = Get-Location ;

    $env:username + "@" +

    $env:computername + ":" +

    (get-location | split-path -leaf) + "> "}

     

     

    В cmd.exe есть переменная %cd% возвращающая текущий каталог, а в PowerShell?

    Василий Гусев: $pwd. Кроме того можно получить текущий каталог с помощью команды Get-Location.

     

    Как вывести сообщение другим цветом?

    Василий Гусев: Везде где возможно, надо стараться использовать командлеты Write-Error, Write-Verbose и Write-Warning.

    Но если очень хочется, то ключи -ForegroundColor и -BackgroundColor командлета Write-Host:

    Code Snippet

    Write-Host "HELLO!" -ForegroundColor "Red"

     

     

    Как вывести текст, и не переводить курсор на другую строку?

    Василий Гусев:

    Code Snippet
    Write-Host "Начало строки." -noNewLine; Write-Host " Конец строки." 

     

    Thursday, July 10, 2008 1:24 PM

All replies

  • Как изменить фон и цвет шрифта?

    Василий Гусев: Задать соответствующие свойства объекта $host:

    Code Snippet

    $host.UI.RawUI.BackgroundColor = "Black"

    $host.UI.RawUI.ForegroundColor = "Green"

     

     

    Посмотреть доступные цвета можно так:

    Code Snippet

    0..15 | %{Write-Host " " -back $_ -n;[System.ConsoleColor]$_}

     

     

    Как изменить цвета других сообщений, например ошибок или warning'ов?

    Василий Гусев: Задать соответствующие свойства:

    Code Snippet

    $host.PrivateData.ErrorForegroundColor

    $host.PrivateData.WarningForegroundColor

    $host.PrivateData.VerboseForegroundColor

     

     

    Как создать алиас (псевдоним)?

    Василий Гусев

    Code Snippet

    Set-Alias ss Select-String

     

    Если необходимо задать параметры для команды, то можно просто создать функцию:

    Code Snippet

    function fh ($Topic) {Get-Help $Topic -full | more}

     

    А если вы хотите чтобы эти алиасы/функциии сохранились - надо поместить их в свой профиль.

     

    Как создать/изменить профиль?

    Василий Гусев: Если он уже существует (Test-Path $Profile) то можно открыть его например так:

    Code Snippet
    notepad $profile

     

    Если же он еще не создан (при установке PowerShell не создает профиль) то можно создать его вот так:

    Code Snippet

    New-Item -Type file -Path $profile -Force

     

     

    Как вставить в строку значение свойства объекта или результат выражения?

    Василий Гусев:

    Code Snippet

    $e = Get-Process explorer

    Write-Host "Путь к проводнику: $e.Path" # не получится

    Write-Host "Путь к проводнику: $($e.Path)"

    Write-Host "Путь к проводнику: $((Get-Process explorer).Path)"

    Write-Host "Дважды два равно $(2 * 2)!"

     

     

    Как посчитать количество объектов в конвейере?

    Василий Гусев: Использовать командлет

    Measure-Object или свойство массивов .Count

    Code Snippet

    Get-Process | where {$_.ws -gt 50mb} | Measure-Object

    (Get-Process | where {$_.ws -gt 50mb}).count

     

     

    Как запустить скрипт из планировщика?

    Василий Гусев: Следует запустить C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe с ключем -Command Скрипт

    Еще полезные ключи powershell.exe:

    -NoLogo

    -NonInteractive

    -NoProfile

     

    У командлетов зачастую весьма длинные названия аргументов. Можно не писать их полностью?

    Василий Гусев: 1. У большинства команд задан порядок следования аргументов. Если известен этот порядок, то можно вообще не писать названия аргументов:

    Code Snippet

    Set-Content -Path test.txt -Value "Text"

    Set-Content test.txt "Text"

     

    2. Можно дополнять имена аргументов с помощью клавиши табуляции.

    3. Можно просто писать только первые несколько букв аргумента, и если у данного командлета нет других аргументов, начинающихся на эти буквы - то сработает:

    Code Snippet

    Write-Host test -f red -b blue

    Get-Command -n process # Не сработает, потому что есть еще аргумент -Name

    Get-Command -no process # Сработает, потому что это уже точно не -Name

     

     

    Как при написании скрипта или команды перейти на следующую строчку?

    Василий Гусев: использовать символ апострофа:

    Code Snippet

    Get-Command `

    -Name Explorer

     

     

    Как использовать в строке символы перевода строки, табуляции, и т.п.?

    Василий Гусев:"С новой строки`n`tтабуляция, символ кавычек `" и апострофа ``"

    В качестве маскирующего символа в PowerShell используется апостроф. Не из вредности, а потому что если бы, как обычно, использовался обратный слеш - из PowerShell получился бы ужасный шелл Smile

     

    Как посмотреть справку по команде?

    Василий Гусев

    Code Snippet

    Get-Help

    Get-Help Get-Process

    Get-Help Get-Process -Full

    Get-Help Get-Process -Parameter Name

    Get-Help Get-Process -Examples

     

     

    Как посмотреть справку по конструкции языка или другой теме?

    Василий Гусев:

    Code Snippet

    Get-Help about_* | Format-List Name, Synopsis

    Get-Help About_if | more

     

     

    Как подключать расширения PowerShell , например расширение для работы с Exchange 2007

    Василий Гусев:

    Code Snippet

    Get-pssnapin -registered | add-pssnapin

     

     

    Каким образом в теле функции определяется результат, который должна вернуть функция?

    Василий Гусев: Всё, что не присваивается переменной - возвращается. В общих чертах так. Т.е. function test {"text"} вернёт строку "text"

    Thursday, July 10, 2008 1:37 PM
  • Microsoft Script Explorer for Windows PowerShell

    MCITP. Знание - не уменьшает нашей глупости.

    Thursday, March 15, 2012 6:45 AM
  • Microsoft Script Explorer for Windows PowerShell

    MCITP. Знание - не уменьшает нашей глупости.


    We are sorry, the page you requested cannot be found.
    Friday, February 07, 2014 10:49 AM

  • We are sorry, the page you requested cannot be found.

    Update

    Microsoft Script Explorer: Next Steps

    Microsoft Script Explorer for Windows PowerShell


    MCITP, PSLP, MCSE. Знание - не уменьшает нашей глупости. Все данные приведены в виде примера и не адаптированы для вашей системы. Выполнения командлетов и внесения изменений в систему, делаете ВЫ. Все вопросы по привязке примера к вашей ситуации или адаптации решения, рассматриваются, только через заявку или кейс в техническую поддержку.

    Friday, February 07, 2014 1:04 PM