Book-review

Posted on

Real-ITSM. Роб Ингланд

Читали в детстве «Вредные советы» Остера? Если да, то эта маленькая книга весьма и весьма мне их напоминает. Много узнаваемых ситуаций и моделей поведения встречающихся в разных компаниях, но все же, по моему опыту, чаще в больших, монструозных корпорациях. Много здорового сарказма и просто юмора.
Вердикт — читать обязательно.

Переговоры о зарплате. Торг Уместен. Даниель Поро, Ф.Б. Хейнс

В отличии от большинства книг-тренингов\советов  — книга мне понравилась, возможно потому, что среди авторов европеец. Все же меньше воды и отсебятины в отличие от книг американских авторов по данной тематике. Советов конечно уйма, половину можно смело отбросить, еще половину так и не получится научится применять в суровой российской действительности, оставшийся десяток как раз подойдет для периодического использования. В любом случае, чтобы осознать что вы делаете не так потребуется не одно, и даже не два, проваленных собеседования:)

Dream Team. Как создать команду мечты. Олег Синякин.

Дочитал до конца в надежде что будут какие-то объяснения по теме книги. В результате оказалась полубиографией, полупиаром, без конкретики и без каких либо ограничений. В основном каждая часть книги выглядит примерно так: В компании было все не плохо, нам сказали сделать лучше, мы приняли и воплотили пару довольно очевидных решений , профинансировали их, в итоге получили хороший результат.  Методов мотивации, принятия командных решений, делегирования задач в команде я в книге не нашел. Но может быть я ошибаюсь и искал не в той книге.

Rework. Бизнес без предрассудков. Джейсон Фрайд, Д.Х. Хенссон

Хорошее, оптимистичное чтение от основателей 37Signals.  В книге на мой взгляд нашли отражение все современные тенденции и методы развития IT компаний. А также методы управления разработкой ПО и управления собственным временем:  Agile, Scrum, Kanban,  прототипирование,  возможность удаленной работы, GTD & Time-management, использование современных средств коммуникации, Freemium и trialware модели распространения. Много и по делу. Знать об этом полезно, но использовать лучше исходя из условий, выбирая наиболее подходящие методы.

Следующая книга этих ребят — Remote, про плюсы и минусы удаленной работы, давно лежит в закладках на обязательное прочтение.

 Русская модель управления. Александр Прохоров

Много воды, много спорных выводов, много притянутых объяснений по поводу особенностей русского менталитета и того почему них получается, а у нас нет. Конечно больше всего понравился вывод об умении создавать себе трудности и затем героически их преодолевать, что встречается в жизни и работе намного чаще чем нужно.

Вердикт — если есть время и вы сторонник «особого русского пути» — вполне подойдет, иначе — ко всему написанному я отношусь  изрядной долей скептицизма.

 

P.S Ссылки на книги — первые попавшиеся в Google. Все что написано, мое личное мнение:)

SCCM2012 software installation Error Codes

Posted on Updated on

При распространении приложений появляются иногда интересные коды ошибок.

The software change returned error code 0x87D00325   (-2016410843) — Эта ошибка появляется в случае если файл инсталлятора запускает дочерний процесс, а сам закрывается. Дело в том что SCCM следит за запущенными им процессами и начинает проверку успешности установки сразу по завершению процесса инсталлятора. Таким образом в некоторых случаях установка даже может пройти корректно, однако SCCM все же отчитается об ошибке и будет считать что ПО не установлено. WOrkaround — самый простой: Запускать инсталлятор скриптом в который встроить паузу, достаточную для установки ПО, например

Set InstallShell = WScript.CreateObject("WScript.Shell")
InstallShell.Run ("install.exe")
WScript.Sleep 12000
Wscript.QUit

Другой вариант, если это возможно, распаковать исходный инсталлятор и запускать непосредственно исполняемый файл.

The software change returned error code 0x87D00324  (-2016410844) —  Если неверно сконфигурирован Detection Method.  Т.е при проверке успешности установки параметры не соответсвуют указанным. Например, указан неправильный ключ реестра.

The software change returned error code 0x87D00607.

Причин может быть несколько. Физический смысл ошибки — на Distribution Point отсутствуют файлы пакета.  С одной стороны это может быть связано с настройками Boundaries и настройками пакета — подробней об этом написано тут http://sccm.com.ua/?p=1361

С другой стороны такая ситуация может возникнуть после восстановления Distribution Point (содержимое пакетов не синхронизируется заново). В папке SMSPKGSIG отсутсвуют папки и архивы с нужным контентом. Для этого неохбодимо заново послать отсутсвующий контент на Distribution Point

Powershell Hash table, csv and UTF. Добавление списка пользователей в список групп.

Posted on Updated on

Немного нюансов пакетной обработки csv файлов.

1. Зачастую CSV файлы выгружены не в UTF. А PoSh этого не любит.

Вот так можно переконвертировать csv в UTF

$File = "d:\Scripts\22.csv"
#Change encoding from ANSI to UTF-8 by reading and saving
#-Encoding:String # = ANSI = Windows-1252 = iso-8859-1

#convert to UTF-8.
Get-Content $personsFilename -Encoding:String | Out-File d:\Scripts\22.csv -Encoding:UTF8

2.  Hash tables из csv получаются вот так. Не забываем что ключ должен быть уникальным.

$t = Import-Csv -Path d:\Scripts\22.csv   -Delimiter ";" -Header "column1","column2" 

$HashTable = @{}
foreach($r in $t)
{
    $HashTable[$r.column1] = $r.column2
}
$HashTable 

3. Если в CSV в первом стобце есть повторяющиеся значения, то можно использовать просто массив. при этом в параметре Header будут указаны дополнительные свойства элемента, через которые их можно сортировать
Например — чтобы добавить или удалить пачку пользователей в разные группы.

$t = Import-Csv -Path d:\Scripts\22.csv   -Delimiter ";" -Header "Group","User" 

foreach ($Element in $t)
{
#Get-QADUser $Element.User
#Get-QADGroup $Element.Group
Remove-QADGroupMember -Identity $Element.Group -Member $Element.User

}

 

File check remediation in configuration baseline(SCCM 2012)

Posted on

При деплойменте Configuration Baseline в SCCM мы можем увидеть надпись «Remediate noncopliant rules when supported». Так вот, это «when supported» — относится только к Configuration Item трех типов — скрипт, значение реестра и WMI. Таким образом если Configuration Item не является ничем из вышеперечисленного  — мы можем только мониторить его соответствие нужным параметрам, а исправлять или руками или GPO или чем угодно.

Но такой подход не годится. Если и использовать Configuration Manager, то на полную. Как же заставить его исправлять конфигурации, а не только мониторить их? Да, можно везде использовать скрипты, один скрипт для обнаружения, второй для исправления, но их отладка, то еще удовольствие. Поэтому, предлагаю, на примере проверки файлов вот такой вариант.

1. Создаем нужный нам Configuration Item, с проверкой файлов

2. Добавляем  Script

3. Discovery Script

$Baseline = Get-WmiObject SMS_DesiredConfiguration -Namespace 'Root\ccm\dcm'   `
| ? {$_.DisplayName -eq '%Our Configuration Baseline%'}

$Baseline.LastComplianceStatus

Этот скрипт запрашивает у класса WMI статус соответствия конфигурационной линии (Compliance\Non Compliance)возвращает состояние Compliance на клиенте. LastComplianceStatus может возвращать 5 значений

0 = «NonCompliant»;

1 = «Compliant»;

2 = «NotApplicable»;

3 = «Unknown»;

4 = «Error»;

5 = «NotEvaluated»;

4. Remediation Script — будет зависит от того как и что необходимо исправить. Для случая с файлами, их надо всего лишь скопировать с общего ресурса, если LastComplianceStatus != 1

Copy-Item \\Fileserver\share\test.dll C:\temp

У шары должен быть доступ для компьютеров домена, так как SCCM запускает скрипты из под учетной записи System.

Скринов не будет:)

Записки автоматизатора. Андрей Орлов

Заметка Posted on

Прочитал. Хорошая книга. Рекомендую. И пара цитат:

К сожалению (или к счастью — как для кого), чтобы разработать хорошую систему, вам следует быть не только прекрасным знатоком всех областей ИТ — вы еще должны разбираться в работе каждого подразделения своей фирмы не хуже, а лучше руководителя этого подразделения. Только тогда предлагаемые вами решения будут если не оптимальными, но хотя бы работоспособными

Критерий, отличающий опытную эксплуатацию от рабочей, все-таки есть. Если ответом на вопрос обеспечения непрерывности работы системы является регулярное резервное копирование, то система в рабочей эксплуатации. Если ответ сложнее (параллельная эксплуатация, ручная работа и т.п), то система еще в опытной. Главное, не забыть о том что ответ на такой вопрос должен быть всегда.

И капелька сарказма:

Тоже стиль руководства: всегда принимать меры и никогда не принимать решений. И ведь он хорошо держится на своей должности

Powershell. Get-PCInfo. Информация о ПК Part 2.

Posted on

Честно признаюсь — забрал себе на память у коллеги пару функций. Надеюсь он не обидится.

1. Выводит информацию о свобоном месте на всех логических разделах ПК

Function Get-DiskFreeSpace {

[CmdletBinding()]

Param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True)]
[String[]]$CompNames
)

BEGIN {
$Res = @();
}

PROCESS {
foreach($CompName in $CompNames) {
$Res += Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3" -Computer $CompName | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}}, @{Name="% free";Expression={"{0:N1}" -f($_.freespace/$_.size*100)}}
}
}

END {
$Res | ft -AutoSize
}
}

2. Информация о настройках сетевых адаптеров

Function Get-CompNetworkInfo {

[cmdletbinding()]
param (
[parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
[string[]]$ComputerName = $env:computername
)

begin {}
process {
foreach ($Computer in $ComputerName) {
if(Test-Connection -ComputerName $Computer -Count 1 -ea 0) {
$Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $Computer | ? {$_.IPEnabled}
foreach ($Network in $Networks) {
$IPAddress  = $Network.IpAddress[0]
$SubnetMask  = $Network.IPSubnet[0]
$DefaultGateway = $Network.DefaultIPGateway
$DNSServers  = $Network.DNSServerSearchOrder
$IsDHCPEnabled = $false
If($network.DHCPEnabled) {
$IsDHCPEnabled = $true
}
$MACAddress  = $Network.MACAddress
$OutputObj  = New-Object -Type PSObject
$OutputObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Computer.ToUpper()
$OutputObj | Add-Member -MemberType NoteProperty -Name IPAddress -Value $IPAddress
$OutputObj | Add-Member -MemberType NoteProperty -Name SubnetMask -Value $SubnetMask
$OutputObj | Add-Member -MemberType NoteProperty -Name Gateway -Value $DefaultGateway
$OutputObj | Add-Member -MemberType NoteProperty -Name IsDHCPEnabled -Value $IsDHCPEnabled
$OutputObj | Add-Member -MemberType NoteProperty -Name DNSServers -Value $DNSServers
$OutputObj | Add-Member -MemberType NoteProperty -Name MACAddress -Value $MACAddress
$OutputObj
}
}
}
}

end {}
}

tmux

Posted on

Менеджер терминалов. Жаль что раньше, когда больше работал с RHEL и  Ubuntu Server не использовал. Разбивает одно окно  терминала на несколько. Например вот так:

Установка стандартная.

sudo apt-get install tmux

Запуск сессии командой tmux.

Конфиг  профиля создаем в /home/%user%

touch .tmux.conf

Конфиг прицеплю позже, когда подгоню под себя

Git and Github

Ссылка Posted on Updated on

http://githowto.com  — хорошая пошаговая инструкция.

http://gitref.org/index.html — список команд.

Configuration Baseline and Registry DWORD

Заметка Posted on Updated on

Обнаружился интересный баг

Вкратце — в случае если надо по итогам срабатывания правил Configuration Baseline создать ключ реестра на x64 ОС — по умолчанию создается ключ вида QWORD. Что не слишком хорошо, если нам нужен DWORD.  Решение для этого бага — использовать скриптовые методы в Configuration Item. Более подробно — в обсуждении на technet.

В случае если ключ надо просто исправить — то все ок. Главное, при деплойменте Baseline не забывать указывать параметр Remediate non-complied rules when supported

SCCM2012 client install issues.

Posted on Updated on

Общая информация:

При push-установке  клиента отследить происходящее можно по следующим логам: ccm.log на сервере с которого будет начинаться установка, ccmsetup.log в папке C:\Windows\ccmsetup\Logs  конечного клиента. В логе ccm на сервере процесс будет выглядеть так

---> Attempting to connect to administrative share '\\TESTPCPC\admin$' using account 'MYDOMAIN\SCCM2012_push'    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:39    1584 (0x0630)
---> The 'best-shot' account has now succeeded 1565 times and failed 905 times.    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:39    1584 (0x0630)
---> Connected to administrative share on machine TESTPCPC using account 'MYDOMAIN\SCCM2012_push'    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:39    1584 (0x0630)
---> Attempting to make IPC connection to share <\\TESTPCPC\IPC$>    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:39    1584 (0x0630)
---> Searching for SMSClientInstall.* under '\\TESTPCPC\admin$\'    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:39    1584 (0x0630)
---> System OS version string "6.1.7601" converted to 6,10    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:39    1584 (0x0630)
---> Unable to connect to WMI (root\ccm) on remote machine "TESTPCPC", error = 0x8004100e.    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:39    1584 (0x0630)
---> Creating \ VerifyingCopying exsistance of destination directory \\TESTPCPC\admin$\ccmsetup.    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:39    1584 (0x0630)
---> Copying client files to \\TESTPCPC\admin$\ccmsetup.    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:39    1584 (0x0630)
---> Copying file "C:\Program Files\Microsoft Configuration Manager\bin\I386\MobileClient.tcf" to "MobileClient.tcf"    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:39    1584 (0x0630)
---> Copying file "C:\Program Files\Microsoft Configuration Manager\bin\I386\ccmsetup.exe" to "ccmsetup.exe"    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:40    1584 (0x0630)
---> Created service "ccmsetup" on machine "TESTPCPC".    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:40    1584 (0x0630)
---> Started service "ccmsetup" on machine "TESTPCPC".    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:40    1584 (0x0630)
---> Deleting SMS Client Install Lock File '\\TESTPCPC\admin$\SMSClientInstall.MSC'    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:40    1584 (0x0630)
Execute query exec [sp_CP_SetLastErrorCode] 2097163290, 0    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:40    1584 (0x0630)
---> Completed request "2097163290", machine name "TESTPCPC".    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:40    1584 (0x0630)
Deleted request "2097163290", machine name "TESTPCPC"    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:40    1584 (0x0630)
Execute query exec [sp_CP_SetPushRequestMachineStatus] 2097163290, 4    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:40    1584 (0x0630)
Execute query exec [sp_CP_SetLatest] 2097163290, N'05/17/2013 18:36:40', 3    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:40    1584 (0x0630)
<======End request: "2097163290", machine name: "TESTPCPC".    SMS_CLIENT_CONFIG_MANAGER    17.05.2013 22:36:40    1584 (0x0630)

После чего основные события будут разворачиваться уже в логах на клиенте.

Читать далее…