Архив автора: admin

Продукты для красоты

Что есть для шелковистой кожи, великолепных густых волос и молодого лица без мешков под глазами?

Следует ли спешить в аптеку за «чудодейственными» биологически активными добавками? Нет! За красотой идите не в аптеку, а в сад. Читать

Полезные скрипты для Sharepoint на Powershell

Для тех кто хочет почувствовать настоящим админом, в  SharePoint есть интеграция с Powershell.  
Всегда полезно иметь под рукой набор скриптов, которые решил собрать в одном месте..
Для изучения команд SharePoint  на первом этапе будем пользоваться  средой  PowerShell ISE,  нереально полезная оболочка для начинающих!!
Эта среда позволяет в наглядном виде получать описания команд ,а также при необходимости сохранять целые сценарии.
Запускаем  PowerShell ISE и добавляем  командлет SharePoint в консоли.
Add-PSSnapin Microsoft.Sharepoint.Powershell
Можно также встретить в скриптах более продвинутый вариант
If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null
{ Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell
Веб приложения и список сайтов
$webApp = Get-SPWebapplication 'http://london'

foreach($spSite in $webApp.Sites)
{
if ($spSite.HostHeaderIsSiteName)
{ Write-Host $spSite.Url 'is host-named' }
else
{ Write-Host $spSite.Url 'is path based' }
}

Результат
Коллекции сайтов могут быть 2х типов, сайт на основе пути (http://london/sites/demosite  по пути веб приложения создаются под сайты), и сайт на основе имени узла ( http://portal.contoso.com любое красивое имя для сайта )
Подробно на сайте Майкрософт
Сайты на основе имени узла создаются  только через Powershell, пример создания

New-SPSite 'http://portal.contoso.com' -HostHeaderWebApplication (Get-SPWebApplication 'http://london') -Name 'Portal' -Description 'Portal site' -OwnerAlias 'contosoadministrator' -language 1033 -Template 'STS#0'

New-SPSite 'http://bi.contoso.com' -HostHeaderWebApplication (Get-SPWebApplication 'http://london') -Name 'BI' -Description 'BI site' -OwnerAlias 'contosoadministrator' -language 1033 -Template 'BICenterSite#0'
Доступные шаблоны можно посмотреть командой

Get-SPWebTemplate

Небольшое видео  по настройке сайтов на основе имени

Список установленных компонентов
Get-SPFeature -Limit ALL | Where-Object {$_.Scope -eq «SITE»}
#Поиск по названию
Get-SPFeature -Limit ALL | Where-Object {$_.DisplayName -like «*Access*»}
Список доступных шаблонов сайтов
Get-SPWebTemplate | where {$_.Title -match «business»}
Список запущенных служб
Get-Service | Where-Object {$_.DisplayName -like «Sharep*»}
Теущая версия фермы с
(get-spfarm).buildversion
Конвертация сайтов на основе пути в сайты на основе имени
Backup-SPSite http://server_name/sites/site_name -Path C:Backupsite_name.bak
Remove-SPSite –Identity http://server_name/sites/site_name –Confirm:$False 
Restore-SPSite http://www.example.com -Path C:Backupsite_name.bak -HostHeaderWebApplication http://server_name
Создать новый сайт
New-SPWeb -Url http://portal.contoso.com/TestSite -AddToQuickLaunch -AddToTopNav -Name TestSite -Template STS#0 -UseParentTopNav
Создать список на сайте
$w= Get-SPWeb  -Identity http://portal.contoso.com/TestSite  
$w.Lists.Add(«Project Tasks»,«» , «Tasks»)
Экспорт сайтов, библиотек, списков
Export-SPWeb -identity «http://dev.contoso.com» –path «C:Export_dev_contoso.cmp» -includeUserSecurity –Force
Export-SPWeb -identity «http://dev.contoso.com» -ItemUrl «/Contracts» -path «C:Export_Contracts.cmp» -includeUserSecurity –Force
Импорт сайтов, библиотек, списков из cmp файла  (Content migration package)
Import-SPWeb -identity «http://dev.contoso.com» -path «c:Export_contracts.cmp»
Сделать Бэкап фермы, сайта
Backup-SPFarm -BackupMethod Full -Directory E:FarmBackup2016_09_01 –Force
Backup-SPSite http://london/sites/demosite -Path C:Backupsite_name.bak
Восстановить удаленный сайт
Get-SPDeletedSite | select Path , siteid
Restore-SpDeletedSite –Identity 4bff0c0e-4d56-4fec-8174-a60a16daeaac)
Включить расширенное логирование
Set-SPLogLevel -TraceSeverity VerboseEx -EventSeverity Verbose
Merge-SPLogFile -Path «C:FarmMergedLog.log» -Overwrite -StartTime (Get-Date).AddMinutes(-15)
#детальное описание ошибки по correlation ID
Merge-SPlogfile –Path c:log.log –Correlation ba05e237-0680-403a-b9f6-e49f96ac55d4
Отключаем расширенное логирование
Clear-SPLogLevel
Список баз контента 
GetSPDatabase | ?{$_.typelike«*business*»}

Подготовить базу для обновления 
(Get-SPDatabase | ?{$_.type -like «*business*»}).Provision()

Проверить базу данных контента на ошибки
Test-SPContentDatabase -name WSS_Content –webapplication http://london
Обновление конфигурации  исправление ошибок обновления
1. Запускать в командной строке под администратором
2. Меняем путь на  C:Program FilesCommon Filesmicrosoft sharedWeb Server Extensions15BIN
3. Для исправления ошибок  патчей  PSConfig.exe -cmd upgrade -inplace b2b -force -cmd applicationcontent -install -cmd installfeatures
Создать список и элемент списка
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$w.ListTemplates | Select name , type , type_client, Description
$l = $w.Lists.Add(«Project A Tasks» , «» , «Tasks»)
$l = $w.Lists.Add(«Test Survey» , «» , «Survey»)
$list = $w.Lists[«Project A Tasks»]
$newItem = $list.AddItem()
$newItem[«Title»] = «Task 4»
$newItem[«Due Date»] = «6/20/2015 11:27 AM»
$newItem[«% Complete»] = 500
$newItem.Update()
Подробно как изменять столбцы любого типа на сайте МС
#список столбцов
$l.Fields | select Title , Type , StaticName
Создать библиотеку и загрузить файл
$DocLibName = «Files 2016»
$lib = $w.Lists.Add(
$DocLibName,«», $w.ListTemplates[«Document Library»])
$file = Get-ChildItem «C:Sharedday2.docx»
$folder = $w.GetFolder($DocLibName )
$files = $folder.Files
$timestamp = Get-Date -UFormat «%Y%m%d_%H%M%S»
$fileName = [io.path]::GetFileNameWithoutExtension($file)
$ext = [io.path]::GetExtension($file)
#имя файла должно быть уникальным
$f =$files.Add($DocLibName+ «/» + $fileName+ «_»+$timestamp+$ext,$file.OpenRead(),$false)
#обновить значение поля
$f.Properties[«TestColumn»] = «ABC»
$f.Update()
Update()
#Обновялет элемент в базе данных
#Обновляет поля «Modified» и «Modified by» .
#Создает новую версию
Systemupdate()
#Обновялет элемент в базе данных
#НЕ обновляет поля «Modified» и «Modified by» .
#НЕ создает новую версию
#Запускает системные обработчики
UpdateOverwriteVersion()
#Обновляет элемент но не созлает новую версию.
#Обновялет поля  «Modified» и «Modified by» .
Загрузить файл с удаленной машины
Добавить столбец в список и  представление  
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$DocLibName = «Files 2016»
$lib = $w.Lists[$DocLibName]
$spFieldType = [Microsoft.SharePoint.SPFieldType]::Text
$lib.Fields.Add(«TestColumn»,$spFieldType,$false)
$lib.Update()
$v = $lib.Views[«All Documents»]
$spField = $lib.Fields[«TestColumn2»]
$v.ViewFields.Add($spField)
$v.Update()
Создать группу на сайте  
$groupName = «Files 2016 Visitors»
#создаем группу на сайте
$group  = $w.SiteGroups.Add($groupName, $w.EnsureUser(«contosoadministrator») , $w.EnsureUser(«contosoadministrator») , «Read Only Group»)
Выдать уникальные права на  сайт,  библиотеку или список  
#прекратить наследование прав
$w.BreakRoleInheritance($true)
$lib.BreakRoleInheritance($true)
$list.BreakRoleInheritance($true)
#создаем назначение ролей, связываем группу и роль
$roleAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($group
# $w.RoleDefinitions | select name, description,basepermissions
$roleDefinition = $w.RoleDefinitions[«Read»]
#добавляем роль к назначению
$roleAssignment.RoleDefinitionBindings.Add($roleDefinition)
#Выдаем права например на сайт или на библиотеку
$w.RoleAssignments.Add($roleAssignment)
$lib.RoleAssignments.Add($roleAssignment)
$list.RoleAssignments.Add($roleAssignment)
$lib.Update()
$list.Update()
Пример готовой функции
Добавить пользователя в группу   
$user=$w.EnsureUser(«contosochen»)
#Get group object
$group=$w.SiteGroups[$groupName]
#add user to group
$group.AddUser($user)
#Получить список пользователей из AD
Import-Module activedirectory
Get-ADUser -Filter {Enabled -eq «True»} | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table
Обновить поле списка
$w = Get-SPWeb «https://sp»
$l = $w.Lists[«План по оцифровке»]
foreach($item in $l.Items) { 
$item[«Дата выполнения»] = $item[«Дата выдачи»]  
$item.Update()}

Получить элементы списка
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$l = $w.Lists[«Project A Tasks»]
foreach($item in $l.Items) {«Title: {0}  Due date: {1} , Created: {2} «  -f $item[«Title»] , $item[«Due Date»] ,  $item[«Created By»] }

$L.Items  | select  Title, @{Label=”DueDate”;Expression={$_[“DueDate”]}} , @{Label=”PercentComplete”;Expression={$_[“PercentComplete”]}} |  Export-Csv -path $path

#Экспортировать  элементы списка в CSV
$path =»C:SharedTasks_export.csv»
$list = $w.Lists[«Project A Tasks»]
$list.Items | select Title , «Due Date» |  Export-Csv -path $path

Получить элементы списка используя CAML запрос
If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null
{ Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$l = $w.Lists[«Project A Tasks»]
$query = New-Object Microsoft.SharePoint.SPQuery
$query.Query  = «0.05«
$query.ViewFields = ««
$query.ViewAttributes = «Scope=»»Recursive»»»
$query.RowLimit = 0
$ListItems = $l.GetItems( $query)
foreach($item in $ListItems) {«Title: {0}  Due date: {1} , Priority: {2}  ,PercentComplete:{3} ,   Editor: {4}»  -f $item[«Title»] , $item[«Due Date»] ,  $item[«Priority»] ,   $item[«PercentComplete»] ,  $item[«Editor»]   }
Для подготовки CAML запроса можно использовать утилиту SP CAML Query Helper 2013
Загрузить список из  csv файла
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$list  = $w.Lists[«Project A Tasks»]
$tblData = Import-CSV «C:SharedTasks.csv»
foreach ($row in $tblData)
{
   «Adding entry for «+$row.«Title».ToString()
   $newItem = $list.AddItem()
   $newItem[«Title»] = $row.«Title».ToString()
   $newItem[«Due Date»] = $row.«Due Date».ToString()
   $newItem[«% Complete»] = $row.«PercentComplete».ToString()
   $newItem.Update()
}

#Получить таблицу из базы
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = «Server=$server;Database=$database;Integrated Security=True»
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = » sp_helpdb»
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandTimeout = 0
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$tblData = $DataSet.Tables[0]

Как сохранить элемент в таблицу

Удалить элементы списка
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$l = $w.Lists[«Project A Tasks»]
$query = New-Object Microsoft.SharePoint.SPQuery
$query.Query  = ««
$query.ViewFields = ««
$query.ViewAttributes = «Scope=»»Recursive»»»
$query.RowLimit = 0
$ListItems = $l.GetItems( $query)
for ($x=$ListItems.Count1;$x -ge 0; $x)
{
  Write-Host(«DELETED: « + $listItems[$x].Item(«ID»))
  $listItems[$x].Delete()
}
Реактивировать RBS 
$cdb = Get-SPContentDatabase –WebApplication http://sharepoint/
$rbss = $cdb[0].RemoteBlobStorageSettings
$rbss.Enable()

Управление оповещениями 
Подробно тут
Настройка собственных шаблонов оповещений

$SPweb = Get-SPWeb «https://sharepoint.com»

foreach($alert in $SPweb.Alerts) {if ($alert.Title -eq 'Документы оповещения') {write-host $alert.Title}}

$SPweb.Alerts | Export-Csv C:temp2alerts.csv -encoding utf8

    $SPlist = $SPweb.lists[«Документы»]
    $IDS = «»
    foreach($alert in $spweb.alerts)
    {
        if($alert.ListID -eq $SPlist.ID -and $alert.Title -eq 'Документы')
        {
        $IDS += $alert.ID.tostring() + «|»
        }
        write-host -nonewline «*»
    }
    write-host «deleting…»
    foreach($s in $IDS.Split(«|»))
    {
    write-host -nonewline «*»
    write-host [GUID]$s
   # $spweb.alerts.delete([GUID]$s)
    }

Найти списки с анонимным доступом 
$site = Get-SPSite «https://sp»
foreach ($web in $site.AllWebs) {foreach($list in $web.lists) {if ($web.AnonymousState.tostring() -eq «Enabled» -and $list.AnonymousPermMask.tostring() -ne «OpenWeb» -and $list.AnonymousPermMask.tostring() -ne «EmptyMask» -and $list.Title -ne «TaxonomyHiddenList» ) {write-host $web.Url ,$list.Title , $list.AnonymousPermMask.tostring() ,$web.AnonymousState.tostring(),$web.AllowAnonymousAccess.tostring() ,$web.AnonymousPermMask64.tostring()  }}}

Проверить SSID пользователя  
$domain = «domain»;
$user_name = «user1»;
$application = «https://sharepoint.com»;

$userID = $domain + «» + $user_name;
$SPuser = Get-SPUser -Identity $userID -Web $application
$objUser = New-Object System.Security.Principal.NTAccount($domain, $user_name) 
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier]) 

Write-Host '———————————-'

$SPuser.sid
$strSID.Value

Создать группу на основе группы AD  

$SiteCollection = "http://site/sitecollection"
$ADGroupName
= "domainadgroup"
$SPGroupName
= "My Test Group A1"
$SPGroupDescription
= "Test Group A1’s Description"
$SPGroupPermission
= "Read"

#Start of script
$site
= Get-SPWeb $SiteCollection

#Check if the group already exists
if ($site.SiteGroups[$SPGroupName] -eq $null)
{

#Ensure Group/User is part of site collection users beforehand and add them if needed
$site
.EnsureUser($ADGroupName)

# Get the AD Group/User in a format that PowerShell can use otherwise there will be a string error
$ADGroupSPFriendly
= $site | Get-SPUser $ADGroupName

#Create the SharePoint Group – Group Name, Group Owner, Group Member, Group Description. Can’t add AD group yet…
$NewSPGroup
= $site.SiteGroups.Add($SPGroupName, $site.CurrentUser, $site.CurrentUser, $SPGroupDescription)
$site
.AssociatedGroups.Add($site.SiteGroups[$SPGroupName]);
$NewSPAccount
= $site.SiteGroups[$SPGroupName]

#Assign the Group permission
$GroupAssignment
= New-Object Microsoft.SharePoint.SPRoleAssignment($NewSPAccount)
$GroupRole
= $site.RoleDefinitions[$SPGroupPermission]
$GroupAssignment
.RoleDefinitionBindings.Add($GroupRole)
$site
.RoleAssignments.Add($GroupAssignment)

#Add the AD Group/User to the group, can’t be done during group creation when using Powershell otherwise errors so is done now.
Set-SPUser -Identity $ADGroupSPFriendly -Web $SiteCollection -Group $SPGroupName
}
$site
.Dispose()
}

Автор: Roman D
Дата публикации: 2016-09-08T07:16:00.001-07:00

Обновление WordPress 4.6.1 — «cURL error»

Наконец то! Вышло обновление WordPress 4.6.1. Почему его так сильно ждали? Версия 4.6 содержала ошибку «cURL error», которая выводила из себя всех и каждого, потому что не давала: обновлять темы, работать плагинам… В конце концов, даже при обновлении WordPress до версии 4.6.1 мне вылезло пару раз «cURL error». Читать

Плагины WordPress для привлечения посетителей и мониторинга сайта

Эта коллекция плагинов фокусируется на привлечении посетителей сайта и мониторинга веб-сайта.

Встраивание формы: Gravity Forms

Встраивание формы: Gravity Forms

Gravity Forms, это фантастический плагин, потому что он простой и мощный. Строительство в стиле drag-and-drop,  простой в использовании. Условная логика позволяет создавать сложные формы. И большая коллекция аддонов сделать его идти к решению для опытных пользователей и разработчиков.

Совет: Хотите создать простую форму контакта? Добавление поля раскрывающегося списка, выбрать тему / отдел (например, поддержка, выставление счетов, продажи, общий запрос). Используйте уведомления маршрутизации для пересылки сообщений командами повторений.

Профилирование посетителя: Leadin

Профилирование посетителя: Leadin

Когда кто — то отправляет форму, Leadin пошлет уведомление. Уведомление содержит сведения о том , что человек делал на вашем сайте, и какая информация доступна о них в Интернете.

Это полезный инструмент для продаж и поддержки команд, так как она обеспечивает контекст для каждого сообщения, которое приходит. Ваша маркетинговая команда будет любить его тоже. Они могут использовать Leadin, чтобы построить свой список адресов электронной почты, и посмотреть содержание сайта, является наиболее эффективным при работе с конверсий.

Статистика сайта: Google Analytics by Yoast

Статистика сайта: Google Analytics by Yoast

Вы работаете вслепую, вы используете веб-сайт без использования аналитики. Без сомнения, Google Analytics является стандартом. Плагин Google Analytics by Yoast делает установку быстрой.

После активации, вы будете иметь возможность просматривать статистику высокого уровня в панели управления WordPress. Это избавит вас от необходимости войти в приложение Google Analytics.

Безопасность: Wordfence

Безопасность: Wordfence

Плагин Wordfence прекрасное решение для обеспечения безопасности сайта. Его функции делятся на четыре категории:

  • Блокирование нападавших и вредоносного кода.
  • Защита логина.
  • Сканирование сайта на наличие уязвимостей.
  • Отслеживание эффективности сайта (веб-трафика и состояния системы).

Wordfence является наиболее загруженный плагин безопасности WordPress. Она может похвастаться безупречными отзывами: 4.9 / 5 звезд, при этом 95% рецензентов, отдают плагину в рейтинге: 5 звезд.

Скорость: WP Super Cache

Скорость: WP Super Cache

Одна вещь, которую вы можете сделать, чтобы ускорить ваш веб — сайт, является использование надежного хостинга, который обрабатывает кэширование. Если это не вариант, попробуйте плагин WP Super Cache от Automattic. Этот плагин очень прост в настройке, особенно, если сравнить его с другими плагинами кэширования.

Резервное копирование по расписанию: UpdraftPlus

Резервное копирование по расписанию: UpdraftPlus

Если ваш сайт часто падает по какой — либо причине, то хорошо иметь готовое запланированное резервное копирование в готовом. Плагин WordPress UpdraftPlus позаботится об этом. Некоторые из моих любимых функций:

  • Выберите необходимые части сайта для резервного копирования.
  • Храните резервные копии на удаленной службы (например, Amazon S3 или Google Drive).
  • Разделение больших резервных копий на отдельные архивы.
  • И многое другое.

Как и Wordfence, UpdraftPlus этот плагин является популярным среди загрузок WordPress. Это один из 7 наилучших плагинов резервного копирования, который имеет внушительный послужной список обзоров.



2016-09-08T08:36:13
Плагины

Аромалампы — создадут атмосферу

Аромалампы Полезное действие ароматических масел известно на протяжении более чем пяти тысяч лет, натуральные эфирные вытяжки из растений способны успокоить, тонизировать или возбудить нервную систему, уничтожить вирусы и бактерии находящиеся в воздухе и при вдыхании, в организме человека. Многие ароматические масла идеальное средство профилактики против вирусных респираторных заболеваний и головных болей, они отлично повышают настроение, настраивают на рабочий лад или придают пикантности интимной атмосфере. Наилучший лечебный эффект достигается при вдыхании полезных соединений (углеводородных цепочек) ароматических масел.

Что такое аромалампа?

Специальные устройства для проведения процедур ароматерапии (лечения ароматами натуральных эфирных масел) называются аромалампы. Основная функция аромаламп — подогрев ароматической эмульсии. Несколько капель масла растворяют в небольшом количестве воды, при нагревании, испаряющиеся молекулы воды и масла распространяются в воздухе, создавая ароматическую атмосферу в помещении. Вдыхание паров с ароматическими композициями благоприятно сказывается на состоянии организма в целом и на работе отдельных его систем.

Виды аромаламп

Аромалампы различаются по виду нагревательного элемента: электрические (нагревание масла происходит при помощи электротока) аромалампы и свечные (нагревание происходит от открытого огня свечи) аромалампы.

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

Устройство аромалампы

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

Где применяют

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

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

Свечные аромалампы, это более домашний, «романтичный» вид ламп для ароматерапии, они более «интимные», создают уютную атмосферу за счет пламени свечи, и радиус охвата у них не такой большой, как у электрических. Свечная аромалампа и несколько капель масла — афродизиака подарит вам незабываемый романтический вечер.

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