Tag Archives: windows

Windows performance counters

Публікується в рамках розгрібання чернеток. Тим хто не займається адмініструванням Windows буде зовсім не цікаво, проходьте далі…

Одного разу переді мною поставили задачу перевірити можливість отримання певних метрик загальною кількістю біля 200 штук для двох видів користувачів для трьох версій операційної системи. Я сміливо взявся за роботу, розваживши що якщо написати скрипт який в одному циклі проходиться по метриках, а в іншому – по хостах та користувачах, то це все можна зробити швидко. Але є одне але. :) Точність оцінювання необхідного часу сильно падає якщо ти чогось не знаєш, і ще більше падає якщо ти не знаєш що ти чогось не знаєш.

Наприклад я довго не міг зрозуміти чому не працює:

PS C:\Users\Administrator\Documents> Get-Counter '\Disk Read Bytes/sec'
Get-Counter : The specified counter path could not be interpreted.
    + CategoryInfo          : InvalidResult: (:) [Get-Counter], Exception
    + FullyQualifiedErrorId : CounterApiError,Microsoft.PowerShell.Commands.GetCounterCommand

А виявилось що performance counter повинен мати формат:

[\\<ComputerName>]\<CounterSet>[(<Instance>)]\<CounterName>

, де необов’язковим є лише ComputerName та іноді Instance, і в мене воно просить уточнити якого диска читання я хочу отримати. Наприклад:

PS C:\Users\Administrator\Documents> Get-Counter '\LogicalDisk(*)\Disk Read Bytes/sec'

Timestamp                 CounterSamples                                                                                      
---------                 --------------                                                                                      
29.04.2014 20:01:15       \\win-dl46o26fd8h\logicaldisk(harddiskvolume1)\disk read bytes/sec :                                
                          0                                                                                                   
                                                                                                                              
                          \\win-dl46o26fd8h\logicaldisk(c:)\disk read bytes/sec :                                             
                          8209,39607393418                                                                                    
                                                                                                                              
                          \\win-dl46o26fd8h\logicaldisk(_total)\disk read bytes/sec :                                         
                          8209,39607393418     

І кількість таких проблем виправляється лише постійною освітою, тому нею й займемось.

Get-Counter

Основне варте уваги джерело інформації яке я зміг викопати – Microsoft Technet на жаль. Ну але там теж щось пишуть, хоча й занудно.
Read more »

Вступ до PowerShell

Зробив на роботі доповідь по PowerShell:

І не переживайте, там з восьмої хвилини в конференції нарешті настає тиша. :)

Презентація зроблена на основі вікіпідручника з PowerShell, який порізано на слайди і показано за допомогою deck.js (хоча про технологію якось іншим разом).

Це приклад того як доповіді робити не варто. Не варто змішувати підручник і презентацію, на презентації повинен бути лише код, картинки і максимум одне-два слова тексту. І якщо все таки якийсь текст вже є – не можна його читати. Ваші слухачі грамотні все таки.

З іншого боку – краще зробити щось неідеально, ніж не зробити ідеально. :)

Є інший приклад: Александр Соловьев — Functional Reactive Programming & ClojureScript. Чувак не париться, лише 16 слайдів, видно що тема його вставила, але пояснити він її може заледве на пальцях. Проте я таки зрозумів що FRP – це як в Excel, і при цьому не заснув.

P.S. Наступна доповідь буде кращою. :)


Filed under: Кодерство, Конспекти Tagged: освіта, робота, windows

Віддалене керування Windows з Python

А хтось за допомогою пітона навчився керувати мікрохвильовкою.

А хтось за допомогою пітона навчився керувати мікрохвильовкою.

Зараз я знаю два способи робити це за допомогою WinRM – реалізації компанією Microsoft відкритого протоколу WS-Management (Якщо точніше то не WS-Management, а MS-WSMV але то надто тонкі деталі).

Перший спосіб – синхронна бібліотека нашого співвітчизника Алексея Діяна pywinrm. Другий – асинхронна бібліотека американського виробництва яка називається txwinrm, де tx означає Twisted. Плюс першої в тому, що з її коду я зліпив приклад виклику команди на віддаленому хості менш ніж за 300 рядків коду, замінивши urllib2 на requests. Думаю якщо ще трохи розберусь на дозвіллі – зліплю ще менший приклад і продокументую його маючи нормальний компактний опис нутрощів протоколу MS-WSMV.

А на роботі я маю проблеми з конфігурацією користувача для отакого віддаленого керування, але з адміністратором все працює після виконання на сервері звичайного winrm quickconfig.


Filed under: Кодерство Tagged: Python, windows

Робота з чергами повідомлень MSMQ в PowerShell

Інсталяція сервісу MSMQ

(1) Зайти в панель керування, (2) Programs and features, (3) натиснути Turn windows features on and off, (4) розкрити дерево до Microsoft Queue Message Server Core і увімкнути пункти “MSMQ HTTP Support” та “MSMQ Active Directory Domain Services Integration”, якщо ви в домені. (5) – Натиснути OK.

MSMQInstall

Операції

Перелічити черги:

Get-MsmqQueue | Select QueueName, MessageCount # дає деякі черги і кількість повідомлень
Get-WmiObject Win32_PerfFormattedData_msmq_MSMQQueue | Select Name, MessagesinQueue # дає трохи більше черг

Створити чергу:

$queue = New-MsmqQueue queue_name

Отримати існуючу чергу за іменем:

$queue = Get-MsmqQueue queue_name

Послати повідомлення в чергу $queue:

$msg = New-MsmqMessage "Hello world!"
Send-MsmqQueue -Name $queue.Path -MessageObject $msg

Послати тисячу повідомлень в чергу за 10000 секунд, при цьому відображаючи їх кількість в реальному часі:

function send_message($msg_text, $queue_name)
{
	$msg = New-MsmqMessage $msg_text
	$queue = Get-MsmqQueue $queue_name
	Send-MsmqQueue -Name $queue.Path -MessageObject $msg | Out-Null
	
	Clear-Host
	Get-MsmqQueue -Name $queue_name | Format-Table QueueName, MessageCount
	Start-Sleep -s 10
}
for($i=0; $i -le 1000; $i++) { send_message $i $queue_name }

Очистити чергу $queue від повідомлень:

Clear-MSMQQueue -InputObject $queue

Видалити чергу повідомлень $queue:

Remove-MSMQQueue -InputObject $queue

Посилання


Filed under: Кодерство Tagged: windows

PowerShell

PowerShell – оригінальна штука. В bash все – текст, тут все – об’єкти, навіть якщо виводиться як текст. Мені, як пітонщику подобається. :)

Але синтаксис – просто жах. Ось наприклад набір команд що дозволить показати на екрані IE, і ганяти його колами по екрану:

 function x_rot($t) { return [Math]::Round(([Math]::Cos($t / 1000.0) + 1) * 300) }
 function y_rot($t) { return [Math]::Round(([Math]::Sin($t / 1000.0) + 1) * 300) }

 $ie = New-Object -ComObject InternetExplorer.Application
 $ie.visible = $true
 for($i = 0; $i -lt 100000; $i++) { $ie.left = x_rot($i); $ie.top = y_rot($i) }

$i -lt 10000 розшифровується як i < 10000.


Filed under: Кодерство Tagged: windows

Python на Windows 7 (і можливо інших версіях)

Тут трішки розповім про установку і налаштування Python під цю досить поширену систему, може аудиторія мого блогу і користувачів моїх скриптів трішки розшириться. Ну й аби запам’ятати до наступного разу, хто зна, може ще колись знадобиться. Про cygwin не розповідатиму, там все занадто просто для мене, і напевне надто складно для тих хто ще не пройшов курс “Shell-fu” на Memrise.

Перше що потрібно знати – на системі якої розрядності ми сидимо. Для цього натискаємо меню пуск, знаходимо пункт “Computer”, правий клік в контекстне меню, вибираємо пункт “Properties”. Або контекстне меню каталогу “Computer” де б ви його не знайшли. Відкривається вікно з адресою "Control Panel\All Control Panel Items\System". Також можна цю адресу в провіднику ввести. Якщо в цьому вікні написано:

System type: 64 bit Operating System

Значить ми 64 розрядні. В 32-розрядних певне буде написано про те що вона 32 розрядна.

Далі на офіційному сайті знаходимо файлик “Python 3.3.2 Windows X86-64 MSI Installer” (чи яка там версія для вас більше підходить), качаємо, запускаємо. З цього місця можете перервати читання цієї інструкції і поринути в Python 3 на один розділ. Після того повертайтесь сюди, то ще не все.

Далі нам потрібно перейти в командну оболонку. Натискаємо Win+R, в вікні що виринає набираємо cmd і натискаємо Enter. Запуститься огидний термінал який використовує кодову сторінку 866. І це на хваленому Windows 7! Але ми цю проблему відкладемо на потім, спершу перевіримо чи python запускається. Пишемо команду “python”, і якщо все ок, то ми повинні побачити таке привітання:

python_in_windows

Якщо ні – доведеться редагувати $PATH. Та навіть якщо й все ок, його все одно доведеться редагувати. Тому знову переходимо в провіднику за адресою "Control Panel\All Control Panel Items\System". Там десь зліва натискаємо “Advanced system settings”. Вискочить вікно:

advanced_system_settings

В вікні натискаємо кнопку “Environment Variables”, в таблиці “System variables” знаходимо змінну Path, та переконуємось в тому що десь в ній є підрядок “C:\Python33\;C:\Python33\Scripts;“. Не обов’язково буквально такий, але він повинен містити шлях до каталогу в якому міститься файл python.exe тої версії яку ви встановили. Якщо в тому каталозі нема підкаталогу Scripts – не переживаємо, скоро буде.

Далі скачуємо скрипт для встановлення distribute. Запускаємо його:

python distribute_setup.py

Якщо все ок, то коли ми наберемо easy_install, то побачимо таке:

C:\Users\tbunyk>easy_install
error: No urls, filenames, or requirements specified (see --help)

Якщо каже що не знає easy_install, хоча запуск distribute_setup.py був успішнм, і C:\Python33\Scripts\pip.exe присутній – значить ви забули додати каталог Scripts в змінну середовища Path.

Тільки от використання easy_install вже давно не схвалюється, тому його використовують як і IE – лише один раз:

easy_install pip

Далі нарешті ви можете встановити мою улюблену програмку:

pip install bwikibot

В мене при інсталяції виникали страшнющі помилки:

 Downloading from URL https://pypi.python.org/packages/source/m/mwparserfromhell/mwparserfromhell-0.1.1.tar.gz#md5=5fb2c8b992bce12c6a1c31e5158b6662 (from https://pypi.python.org/simple/mwparserfromhell/)
Exception:
Traceback (most recent call last):
  File "C:\Python33\lib\site-packages\pip\basecommand.py", line 139, in main
    status = self.run(options, args)
...... трішки пропущено ......
  File "C:\Python33\lib\ssl.py", line 327, in read
    v = self._sslobj.read(len, buffer)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

Я спочатку гуглив що це означає, нічого не знайшов, але при другій спробі запуску все встановилось до кінця.

bwikibot.exe (ого, його скомпілювали!) з’являється в C:\Python33\Scripts\ і повинен запускатись простою командою bwikibot.

Правда звісно ця версія має купу проблем:

C:\Users\tbunyk>bwikibot read book
Exception No module named 'bulk_actions' in extension bulk_actions.py
Exception No module named 'check_uploads' in extension check_uploads.py
Exception No module named 'films' in extension films.py
Exception No module named 'translator' in extension translator.py
Traceback (most recent call last):
  File "C:\Python33\Scripts\bwikibot-script.py", line 9, in <module>
    load_entry_point('bwikibot==0.4.13', 'console_scripts', 'bwikibot')()
  File "C:\Python33\lib\site-packages\bwikibot\cli.py", line 12, in main
    run(*sys.argv)
  File "C:\Python33\lib\site-packages\bwikibot\cli.py", line 22, in run
    action(*argv[2:])
  File "C:\Python33\lib\site-packages\bwikibot\cli.py", line 94, in read_page1
    read_page(SESSION_FILE, *args)
  File "C:\Python33\lib\site-packages\bwikibot\cli.py", line 89, in read_page
    print(wiki.page(name).read())
  File "C:\Python33\lib\encodings\cp866.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u014d' in position
1846: character maps to <undefined>

І знаєте, я тут подумав що писати консольні програми для Windows – невдячна справа. Напевне доведеться дописати ще якусь гуйовину. Тому скоро очікуйте bwikibot 0.5.0!

Ах, і ще одна проблема Python на Windows – тут не все так просто з пакетами що містять бінарники. Наприклад при встановленні lxml я отримав:

error: Unable to find vcvarsall.bat

З PySide – йому бракувало програми nmake. PyQt теж чогось бракувало. Я погуглив і з’ясував що що vcvarsall.bat, що nmake не знайдеш без Visual Studio. Ну, Visual Studio я люблю і напевне поставлю, але що робити потенційним користувачам моїх програм, які і так вже повинні були витерпіти довгий процес інсталяції який включав редагування змінної Path я не знаю…

Ви лише погляньте який модний інтерфейс встановника Visual Studio і яка там досі огидна консоль.

Ви лише погляньте який модний інтерфейс встановника Visual Studio і яка там досі огидна консоль.


Filed under: Інструменти, Кодерство, Конспекти Tagged: Python, windows