Q: Как запустить .exe .com .cmd или .bat файл из PowerShell? A: Точно также как и в cmd. Просто набрать его название если путь к нему содержится в переменной Path, или полный путь. Q: Как вызвать скрипт из текущей папки если папка не содержится в path? A: Указать полный путь к файлу, либо использовать .\ для обозначения текущего каталога: .\Test.Ps1 Q: Как вызвать встроенную команду cmd, например assoc? A: cmd /c assoc | Select-String "ps1" Q: Как использовать переменные окружения? A: В PowerShell переменные окружения вынесены в специальный диск: Env:\ Можно сделать cd env: и посмотреть переменные окружения командой dir. Чтобы получить содержимое переменной окружения используется следующая конструкция: $env:computername cd $env:windir Write-Host "Welcome to $($env:computername)!" Q: Как выполнить VB Script код в PowerShell (например если вы знаете как что то сделать в VBS, но не знаете как в PowerShell)? A: $vbs = New-Object -com MSScriptControl.ScriptControl $vbs.Language = "VBScript" $vbs.Eval('msgbox("hi")') $code = 'InputBox("Enter your name","Test")' $vbs.Eval($code) Q: Как из результатов выполнения командлета выбрать строчки с определенным текстом? A: В большинстве случаев вам не нужны строчки с определенным текстом. Вам нужны объекты с определенными свойствами. Выбрать их можно так: Все файлы с размером более 1mb: dir | where {$_.length -ge 1mb} Все процессы запущенные из папки Windows: Get-Process | where {$_.path -like "c:\windows*"} | Stop-Process -whatif Расшаренные диски: Get-WmiObject win32_share | where {$_.path -like "?:\"} Q: Как посмотреть какие свойства есть у объекта? A: 1. С помощью команды Get-Member: Get-Process | Get-Member -type property 2. С помощью команды Format-List * Get-Process explorer | Format-List * 3. С помощью PowerTab: (Get-Process explorer). Q: Мне действительно нужно выбрать только некоторые строки, например я хочу обработать текстовый файл. A: Используйте Select-String: Get-Content C:\Windows\WindowsUpdate.log | Select-String "error|warning" Get-Content C:\Windows\WindowsUpdate.log | where {$_ -match "error 0x(\d+)"} | foreach {$_.matches[1]} Q: Как работать с регулярными выражениями? A: "Е-mail: xaegr@yandex.ru" -match "(?<Имя>\S+)@(?<Домен>\S+)" $matches $matches[0] А еще регулярные выражения можно использовать в Select-String или например switch -regex Q: Операторы -eq -like -match и т.п. не чувствительны к регистру символов. Что делать? A: Приписать к оператору букву "c" (от Case): "Test" -eq "test" "Test" -ceq "test" Q: Как посмотреть что это за команды - "%", "?", "gps" или "fl"? A: Get-Command % | fl Get-Command `? | fl Get-Command gps, fl | ft -AutoSize Get-Command ping Q: Как изменить приглашение (prompt)? Хочу например пользователь@компьютер:каталог> A: Надо переопределить функцию prompt. Всё что вернёт эта функция будет приглашением. А можно в ней же выполнить и другие команды: function prompt { $host.UI.RawUI.WindowTitle = Get-Location ; $env:username + "@" + $env:computername + ":" + (get-location | split-path -leaf) + "> "} Q: В cmd.exe есть переменная %cd% возвращающая текущий каталог, а в PowerShell? A: $pwd. Кроме того можно получить текущий каталог с помощью команды Get-Location. Q: Как вывести сообщение другим цветом? A: Везде где возможно, надо стараться использовать командлеты Write-Error, Write-Verbose и Write-Warning. Но если очень хочется, то ключи -ForegroundColor и -BackgroundColor командлета Write-Host: Write-Host "HELLO!" -ForegroundColor "Red" Q: Как вывести текст, и не переводить курсор на другую строку? A: Write-Host "Начало строки." -noNewLine; Write-Host " Конец строки." Q: Как изменить фон и цвет шрифта? A: Задать соответствующие свойства объекта $host: $host.UI.RawUI.BackgroundColor = "Black" $host.UI.RawUI.ForegroundColor = "Green" Посмотреть доступные цвета можно так: 0..15 | %{Write-Host " " -back $_ -n;[System.ConsoleColor]$_} Q: Как изменить цвета других сообщений, например ошибок или warning'ов? A: Задать соответствующие свойства: $host.PrivateData.ErrorForegroundColor $host.PrivateData.WarningForegroundColor $host.PrivateData.VerboseForegroundColor Q: Как создать алиас (псевдоним)? A: Set-Alias ss Select-String Если необходимо задать параметры для команды, то можно просто создать функцию: function fh ($Topic) {Get-Help $Topic -full | more} А если вы хотите чтобы эти алиасы/функциии сохранились - надо поместить их в свой профиль. Q: Как создать/изменить профиль? A: Если он уже существует (Test-Path $Profile) то можно открыть его например так: notepad $profile Если же он еще не создан (при установке PowerShell не создает профиль) то можно создать его вот так: New-Item -Type file -Path $profile -Force Q: Как вставить в строку значение свойства объекта или результат выражения? A: $e = Get-Process explorer Write-Host "Путь к проводнику: $e.Path" # не получится Write-Host "Путь к проводнику: $($e.Path)" Write-Host "Путь к проводнику: $((Get-Process explorer).Path)" Write-Host "Дважды два равно $(2 * 2)!" Q: Как посчитать количество объектов в конвейере? A: Использовать командлет Measure-Object или свойство массивов .Count Get-Process | where {$_.ws -gt 50mb} | Measure-Object (Get-Process | where {$_.ws -gt 50mb}).count Q: Как запустить скрипт из планировщика? A: Следует запустить C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe с ключем -Command Скрипт Еще полезные ключи powershell.exe: -NoLogo -NonInteractive -NoProfile Q: У командлетов зачастую весьма длинные названия аргументов. Можно не писать их полностью? A: 1. У большинства команд задан порядок следования аргументов. Если известен этот порядок, то можно вообще не писать названия аргументов: Set-Content -Path test.txt -Value "Text" Set-Content test.txt "Text" 2. Можно дополнять имена аргументов с помощью клавиши табуляции. 3. Можно просто писать только первые несколько букв аргумента, и если у данного командлета нет других аргументов начинающихся на эти буквы - то сработает: Write-Host test -f red -b blue Get-Command -n process # Не сработает, потому что есть еще аргумент -Name Get-Command -no process # Сработает, потому что это уже точно не -Name Q: как при написании скрипта или команды перейти на следующую строчку? A: использовать символ апострофа: Get-Command ` -Name Explorer Q: Как использовать в строке символы перевода строки, табуляции, и т.п.? A: "С новой строки`n`tтабуляция, символ кавычек `" и апострофа ``" В качестве маскирующего символа в PowerShell используется апостроф. Не из вредности, а потому что если бы, как обычно, использовался обратный слеш - из PowerShell получился бы ужасный шелл :) Q: Как посмотреть справку по команде? A: Get-Help Get-Help Get-Process Get-Help Get-Process -Full Get-Help Get-Process -Parameter Name Get-Help Get-Process -Examples Q: Как посмотреть справку по конструкции языка или другой теме? A: Get-Help about_* | Format-List Name, Synopsis Get-Help About_if | more