Человеку, хорошо знающему Bash или другой UNIX-shell, при работе с Windows не хватает привычных утилит. К счастью есть PowerShell. Это не Bash или csh, он не привычен и не столь удобен, но позволяет выполнить некоторые полезные операции. Этот пост будет моей памяткой по PowerShell, надеюсь он окажется полезен ещё кому-нибудь.
grep, что может быть лучше для поиска нужной строки в логах? А как же Windows? А в Windows есть Select-String:
select-string "TO: " C:\Windows\System32\LogFiles\SMTPSVC1\in120113.log
А теперь вариант похуже, скорее для расширения кругозора. Используем Where-Object (он же ? и where, об алиасах немного позже)
cat C:\Windows\System32\LogFiles\SMTPSVC1\in120113.log | ? {$_ -match "TO: "}
Переменная $_ тут является аналогом одноимённый переменной в Perl. cat это алиас для Get-Content (алиасы: cat, gc, type)
Замечательно, а как же grep -R? Тут всё немного сложнее, нам понадобится Get-ChildItem (он же ls, dir и gci)
ls -Recurse -Include *.config C:\inetpub\wwwroot | select-string SMTP
В PowerShell мы не найдём ключа -h и команд man и info. Найти выход поможет Get-Help (он же help)
help ls
Выше уже упоминались алиасы, получить их список в рамках текущей сессии поможет Get-Alias, можно выполнять и обратный поиск:
Get-Alias -Definition Get-Alias
это команда подскажет, что у Get-Alias есть более короткое написание - gal. Создать свои алиасы поможет Set-Alias.
sed, как же его не хватает. Как написать тетрис не знаю, приведу лишь вариант с заменой с помощью ForEach-object (он же % и foreach)
cat somefile.txt | % {$_ -replace "foo","bar"}
head, tail - нам поможет Select-Object (он же select):
cat somefile.txt | select -First 10
cat somefile.txt | select -Last 10
Далее сводная таблица:
Unix | PowerShell | примечание |
---|---|---|
grep -i pattern [file ...] | Select-String pattern [file,...] | Несколько файлов нужно указывать через запятую, а не через пробел, как в UNIX |
grep pattern [file] | Select-String -CaseSensitive pattern [file] | |
grep -iR --include=match pattern | ls -Recurse -Include match | Select-String patten | |
cat [file ...] | cat [file,...] | |
wc | measure -Line -Word -Character | |
alias | Get-Alias | |
passwd username | $user = [adsi]"WinNT://hostname/username,user" $user.SetPassword("password") | |
env | Get-Variable |
Пока всё...
Комментариев нет:
Отправить комментарий