FAQ по PowerShell
Как запустить .exe .com .cmd или .bat файл из PowerShell?
Василий Гусев: Точно также как и в cmd. Просто набрать его название если путь к нему содержится в переменной Path, или полный путь.
Как выводить на экран возможные значения автодополнения в окошке ?
Андрей Бешков: Для этого используется PowerTab. Взять PowerTab можно тут http://thepowershellguy.com/blogs/posh/pages/powertab.aspx
Как вызвать скрипт из текущей папки если папка не содержится в path?
Василий Гусев: Указать полный путь к файлу, либо использовать .\ для обозначения текущего каталога:
.\Test.Ps1
Как вызвать встроенную команду cmd, например assoc?
Code Snippetcmd /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:
Все процессы запущенные из папки Windows:Code Snippetdir | where {$_.length -ge 1mb}
Расшаренные диски:Code SnippetGet-Process | where {$_.path -like "c:\windows*"} | Stop-Process -whatif
Code SnippetGet-WmiObject win32_share | where {$_.path -like "?:\"}
Как посмотреть какие свойства есть у объекта?
Василий Гусев:1. С помощью команды Get-Member:
2. С помощью команды Format-List *Code SnippetGet-Process | Get-Member -type property
3. С помощью PowerTab:Code SnippetGet-Process explorer | Format-List *
Code Snippet(Get-Process explorer)
Мне действительно нужно выбрать только некоторые строки, например я хочу обработать текстовый файл.
Василий Гусев:Используйте Select-String:
Code SnippetGet-Content C:\Windows\WindowsUpdate.log | Select-String "error|warning"
Get-Content C:\Windows\WindowsUpdate.log | where {$_ -match "error 0x(\d+)"} | foreach {$_.matches[1]}
Как работать с регулярными выражениями?
А еще регулярные выражения можно использовать в Select-String или например switch -regexCode Snippet"Е-mail: xaegr@yandex.ru" -match "(?<Имя>\S+)@(?<Домен>\S+)"
$matches
$matches[0]
Операторы -eq -like -match и т.п. не чувствительны к регистру символов. Что делать?
Василий Гусев: Приписать к оператору букву "c" (от Case):
Code Snippet"Test" -eq "test"
"Test" -ceq "test"
Как посмотреть что это за команды - "%", "?", "gps" или "fl"?
Code SnippetGet-Command % | fl
Get-Command `? | fl
Get-Command gps, fl | ft -AutoSize
Get-Command ping
Как изменить приглашение (prompt)? Хочу например пользователь@компьютер:каталог>
Василий Гусев: Надо переопределить функцию prompt. Всё что вернёт эта функция будет приглашением. А можно в ней же выполнить и другие команды:
Code Snippetfunction 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 SnippetWrite-Host "HELLO!" -ForegroundColor "Red"
Как вывести текст, и не переводить курсор на другую строку?
Василий Гусев:
Code SnippetWrite-Host "Начало строки." -noNewLine; Write-Host " Конец строки."
Все ответы
Как изменить фон и цвет шрифта?
Василий Гусев: Задать соответствующие свойства объекта $host:
Code Snippet$host.UI.RawUI.BackgroundColor = "Black"
$host.UI.RawUI.ForegroundColor = "Green"
Посмотреть доступные цвета можно так:
Code Snippet0..15 | %{Write-Host " " -back $_ -n;[System.ConsoleColor]$_}
Как изменить цвета других сообщений, например ошибок или warning'ов?
Василий Гусев: Задать соответствующие свойства:
Code Snippet$host.PrivateData.ErrorForegroundColor
$host.PrivateData.WarningForegroundColor
$host.PrivateData.VerboseForegroundColor
Как создать алиас (псевдоним)?
Если необходимо задать параметры для команды, то можно просто создать функцию:Code SnippetSet-Alias ss Select-String
А если вы хотите чтобы эти алиасы/функциии сохранились - надо поместить их в свой профиль.Code Snippetfunction fh ($Topic) {Get-Help $Topic -full | more}
Как создать/изменить профиль?
Василий Гусев: Если он уже существует (Test-Path $Profile) то можно открыть его например так:
Если же он еще не создан (при установке PowerShell не создает профиль) то можно создать его вот так:Code Snippetnotepad $profileCode SnippetNew-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 SnippetGet-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. У большинства команд задан порядок следования аргументов. Если известен этот порядок, то можно вообще не писать названия аргументов:
2. Можно дополнять имена аргументов с помощью клавиши табуляции.Code SnippetSet-Content -Path test.txt -Value "Text"
Set-Content test.txt "Text"
3. Можно просто писать только первые несколько букв аргумента, и если у данного командлета нет других аргументов, начинающихся на эти буквы - то сработает:
Code SnippetWrite-Host test -f red -b blue
Get-Command -n process # Не сработает, потому что есть еще аргумент -Name
Get-Command -no process # Сработает, потому что это уже точно не -Name
Как при написании скрипта или команды перейти на следующую строчку?
Василий Гусев: использовать символ апострофа:
Code SnippetGet-Command `
-Name Explorer
Как использовать в строке символы перевода строки, табуляции, и т.п.?
Василий Гусев:"С новой строки`n`tтабуляция, символ кавычек `" и апострофа ``"
В качестве маскирующего символа в PowerShell используется апостроф. Не из вредности, а потому что если бы, как обычно, использовался обратный слеш - из PowerShell получился бы ужасный шелл

Как посмотреть справку по команде?
Code SnippetGet-Help
Get-Help Get-Process
Get-Help Get-Process -Full
Get-Help Get-Process -Parameter Name
Get-Help Get-Process -Examples
Как посмотреть справку по конструкции языка или другой теме?
Code SnippetGet-Help about_* | Format-List Name, Synopsis
Get-Help About_if | more
Как подключать расширения PowerShell , например расширение для работы с Exchange 2007
Code SnippetGet-pssnapin -registered | add-pssnapin
Каким образом в теле функции определяется результат, который должна вернуть функция?
Василий Гусев: Всё, что не присваивается переменной - возвращается. В общих чертах так. Т.е. function test {"text"} вернёт строку "text"

