Авторизация



Теги сайта



0х0000007b 1c access control list acl activation active directory ad roles add route adexplorer apache authentication to zabbix bare metal recovery bg zsh bicycle books bruteforce ccna centos centos packet certificate change net adapter name chap chkrootkit chmod cinnamon cisco class clipboard cmd configuring cpu cores cron crontab csc custom object cut cvsup cvsup-without-gui db dekorator dev null 2 1 dhcp dhcp reservation disable ipv6 diskpart dism django dns domain naming master domain roles download download powershell enable routing on windows enabled encapsulation english english language esx eventlog fail2ban fastest_cvsup fedora fg zsh field formatdatabase freebsd fsmo get-aduser hardware https hyper-v idioms iis inheritance iperf iptables iscsi jobs kernel panic ldap ldap аутентификация zabbix limit lingualeo linux mcitp mcsa memory check method microsoft mod_ssl mount mssql mysql mysql user password netcache network network config network load balance cluster network scripts nginx nlb num lock numlock oop openssl pap partition pdc permissions pfx php pipeline pkg_version polymorphism ports upgrade portupgrade posix powershell ppp puppet pwdlastset python rdp regedit registry remote enable restrictions reverse proxy rhel rid rope jumping bridge мост прыжок высота route add route freebsd routing protocol rpm sc sc sdset sc sdshow schema scope script output secure web security service permissions services session set dns servers set ip address sftp shell script show variables snmp sound scheme sounds speed ssh ssl standard-supfile subinacl supfile switch switchport sync syncronization task sсheduler tempdb tripplite monitoring tweaks unix user must change password at next logon utf8 vim vlan vmware w32tm web windows windows 2003 r2 windows 2008 r2 windows firewall windows server windows server 2012 windows server backup windows service permissions windows пингалка winre wsus xargs xrdp yum zabbix zabbix external check zabbix ldap authentication zsh автоматическое обновление портов freebsd автономные файлы активация английский язык база данных безопасность active directory буфер вело велосипед видео включение роутинга в windows внешняя проверка zabbix вредоносное программное обеспечение posix задание двумерного массива звуки звуковая схема идиомы иероглифы киев кодировка командная строка конфигурация сети маршрутизация маршруты в freebsd маршруты в redhat linux область обновление портов ограничения windows основные команды пакеты centos перевод перенос планировщик задач покатушки полет над днепром проблемы кодировки протокол путь развития в it разрешения служб windows регистрируем cmd скриптом недоступность хоста реестр резервирование ip скриптом роли домена русские символы синхронизация скачать скачать powershell скачать книгу скорость сети списки контроля доступа тарзанка твики фоновые процессы цикл mssql

Главная страница Microsoft POWERSHELL
Разбор строки, выборка по условию. PowerShell Печать

В этом примере PowerShell я покажу как можно произвести парсинг строки string, не прибегая к регулярным выражениям regex в первом примере и используя их - во втором.

Определим условия задачи

Есть некоторая строка "Something([FindThis(SomethingElse[FindThisToo([]Something)", в которой необходимо найти любые данные, находящиеся между скобками " [ " и " ( ", стоящими в указанной последовательности и исключая сами скобки:

Something([FindThis(SomethingElse[FindThisToo([]Something)

т.е. по сути, нам нужно найти подчеркнутые слова.

Решение без использования регулярных выражений

Я написал вот такой вот скрипт, который полностью решает поставленную задачу. К тому же, решение легко масштабируемо

 # Объявили строковую переменную и загнали в нее текст для последующего разбора
[string]$var = 'Something([FindThis(SomethingElse[FindThisToo([]Something)'

Write-Host  
Write-Host 'Original and comments: http://vam.in.ua/index.php/it/25-ms-powershell/152-powershell-parse-string.html'  
Write-Host 'Feedback: http://vam.in.ua/index.php/contacts/2-admins/1-aleksey.html'
Write-Host  

# Удалим используемые переменные для чистоты работы
Remove-Variable first,second -ErrorAction SilentlyContinue

# Устанавливаем переменную для перебора в значение, соответствующее началу строки
$plunk = 0  
# Объявляем переменную конечного результата, пока ничего не содержащую
$result = ''

# Цикл: пока переменная перебора меньше чем длина строки, выполнять блок кода
while ($plunk -lt $var.length) {    
    # Если символ с индексом, равным переменной перебора, соответствует "["
    if ($var[$plunk] -eq '[') {
        # Занесем в переменную first индекс символа "[" для последующей работы
        $first = $plunk
    }
    # Если переменная first определена и символ с индексом, равным переменной перебора, соответствует "("
    if ($first -and ($var[$plunk] -eq '(')) {
        # Занесем в переменную second индекс символа "(" для последующей работы
        $second = $plunk
    }
    # Если определены обе переменные first и second, начинаем выборку нужных нам фрагментов между скобками "[" и "("
    if ($first -and $second) {
        # Увеличим числовую переменную на единицу, т.к. нам нужно исключить скобку "[" из результата
        $first++
        # Выдернем из строковой переменной var все что начинается с индекса first и составляет длину (second минус first). Добавим итог к результирующей переменной
        $result = $result + $var.Substring($first,($second - $first)) + '; '
        # Удалим вспомогательные переменные для того чтобы не выполнялось условие в строке кода под номером 30 до тех пор, пока не будут обнаружены две новые скобки "[" и "("
        Remove-Variable first,second
    }
    # Увеличим числовую переменную на единицу для перебора
    $plunk++    
}

Write-Host ------
# Выводим результат на экран
Write-Host $result

Что в итоге

PS D:\> .\Script.Ps1

------
FindThis; FindThisToo; 

Решение с использованием регулярных выражений

$var = 'Something([FindThis(SomethingElse[FindThisToo([]Something)'
[Regex]::Matches($var,'(?<=\[).*?(?=\()')-join';'

где:

?<=\[ - позитивный просмотр назад

?=\( - позитивный просмотр вперед

).*?( - не жадная или non-greedy выборка (до первого попавшегося условного символа; иначе выберет всё между первым и самым последним условным символом в тексте)

Что в итоге

PS D:\> .\RegEx.Ps1

FindThis;FindThisToo
 
Установка PowerShell на Server Core Печать

Установка проходит в два этапа:

  • для начала нам нужно поставить dotNET
  • затем установить сам PowerShell
oclist # посмотрим на установленные компоненты и найдем нужные нам. Вывод показан на рисунке ниже
ocsetup NetFx2-ServerCore # регистр важен. Устанавливаем .NET
ocsetup MicrosoftWindowsPowerShell # Устанавливаем PowerShell
powershell.exe # так как в переменной "path" нет пути к родительскому каталогу PS, такой запрос приведет к ошибке
	'powershell' is not recognized as an internal or external command,
	operable program or batch file.
cd c:\Windows\system32\WindowsPowerShell\v1.0\ # переходим в родительский каталог PS
powershell.exe # запускаем PS
Windows PowerShell
Copyright (C) 2012 Microsoft Corporation. All rights reserved.

PS C:\> $Host.Version # узнаем установленную версию PowerShell

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      0      0

 

image_install_netfx2-servercore

 
Вывод PowerShell это всегда объект .NET Печать

Любой вывод, который возвращает командлет PowerShell априори является объектом .NET , а не просто текстом, который мы видим на экране:

PS C:\> Get-Process powershell # на экране текст, но на самом деле это объект dotNet, что можно проверить, поместив вывод в переменную..

Handles	NPM(K)	PM(K)	WS(K)		VM(M)		CPU(s)	Id		ProcessName
-------	------	-----	-----		-----		------	--		-----------
    355		5	29020	13768		135			1,30	2248	powershell


PS C:\> $obj = Get-Process powershell # ..поместили вывод в переменную
PS C:\> $obj.GetType().Fullname # узнать тип переменной
System.Diagnostics.Process

PS C:\> $obj = Get-Process powershell | Out-String # если нам таки нужен строковый вывод
PS C:\> $obj.GetType().Fullname # снова определяем тип переменной
System.String
 
<< Первая < Предыдущая 11 12 13 14 15 16 17 18 19 20 Следующая > Последняя >>

Страница 12 из 20
Главная страница Microsoft POWERSHELL