Метка: powershell
[PowerShell] Загрузка файла в корень SharePoint
Для загрузки файла в корень портала SharePoint можно воспользоваться простым скриптом на PowerShell:
Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue $fileBytes = [system.io.file]::ReadAllBytes("D:\test.txt"); $site = Get-SPSite "http://portal"; $site.RootWeb.Files.Add("test.txt", $fileBytes, $true);
[PowerShell] Количество файлов в папке и результат в txt
Скрипт на PowerShell считает количество файлов в папке D:\test и результат записывает в текстовый файл с датой. Запускаю этот скрипт планировщиком заданий Windows один раз в день.
$date = Get-Date -Format "dd.MM.yyyy_HH:mm" $pathFolder = "D:\test" $fileCount = (Get-ChildItem $pathFolder).Count $msg = $date + " " + $fileCount Out-File "D:\testCounts.txt" -InputObject $msg -Append
[PowerShell] Добавляем пользователей в группу AD
Оперировать большим количеством пользователей в домене Active Directory непросто, а очень просто! С помощью командлетов Quest Software для PowerShell. Устанавливаем Active Roles Management Shell for Active Directory на свой админский компьютер, на контроллер домена ничего ставить не нужно. Подключаем библиотеку через консоль PowerShell командой:
Add-PSSnapin Quest.ActiveRoles.ADManagement
Скрипт PowerShell, который добавляет пользователей AD из контейнера Пользователи в группу Группа.Пользователей, но прогоняет всех через фильтр:
Add-QADGroupMember -Identity 'Группа.Пользователей' ` -Member (Get-QADUser -SearchRoot "OU=Пользователи,DC=mydomen,DC=ru" ` -LdapFilter "(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2)` (title=*)" -SizeLimit 0 | ` Where-Object{!($_.MemberOf -eq "CN=Группа.Пользователей,OU=Группы,DC=mydomen,DC=ru")} ` | %{$_.DirectoryEntry.distinguishedName}) #-WhatIf
Скрипт фильтрует пользователей и добавляет группу только тех, кто не действительно пользователь (objectCategory=person), не заблокированный (!userAccountControl:1.2.840.113556.1.4.803:=2) и у которого заполнено поле Title — (title=*). Также скрипт проверяет, а не входит ли этот пользователь уже в группу, если входит, то пропускает его. Перед применением скрипта можно раскоментировать –WhatIf (убрать перед ним #), чтобы посмотреть на результат виртуально, без применения изменений в AD.
[PowerShell] Прописываем имя и инициалы пользователей в MS Office
По умолчанию после установки Microsoft Office в параметрах не прописаны Имя пользователя и инициалы. В результате получается, что нельзя отследить кем был создан документ или кем он заблокирован в данный момент. Поэтому нужно задавать эти значения у каждого пользователя.
Имя пользователя и инициалы Office задаются в реестре Windows в ветке — HKCU\SOFTWARE\Microsoft\Office\Common\Userinfo, параметры UserName и UserInitials соответственно.
Написал скрипт на PowerShell, который применяется через групповые политики на всех пользователей домена при логоне:
$strName = $env:username $strFilter = "(&(objectCategory=User)(samAccountName=$strName))" $objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.Filter = $strFilter $objPath = $objSearcher.FindOne() $objUser = $objPath.GetDirectoryEntry() $officename = $objUser.cn $officeinitials = $objUser.initials reg add "HKCU\SOFTWARE\Microsoft\Office\Common\Userinfo" /v UserName /t REG_SZ /d $officename /f reg add "HKCU\SOFTWARE\Microsoft\Office\Common\Userinfo" /v UserInitials /t REG_SZ /d $officeinitials /f
Теперь у всех пользователей в Office прописаны их ФИО и инициалы.
[PowerShell] Собираем информацию о принтерах
В организации есть несколько принт-серверов на платформе Windows Server 2003 SP2 и 2008R2, необходимо получить список этих принтеров с определенными полями в файле, чтобы можно было опрашивать эти принтеры по протоколу SNMP. Такой список получить достаточно просто при помощи PowerShell. Набросал такой вот скрипт:
$terminals = ("ps1.company.ru", "ps2.company.ru") $terminals | ForEach-Object { Get-WmiObject -class Win32_Printer -computer $terminals ` | Where-Object {$_.ShareName -ne $null} ` | select Name, ShareName, PortName, Location, Comment, SystemName, DriverName } ` | Export-Csv -NoClobber -Encoding utf8 -Path d:\printers.csv
Скрипт опрашивает два сервера ps1 и ps2, сервера можно добавлять или удалять. Чтобы не выводить в списке разные виртуальные принтеры, скрипт проверяет заполнено ли поле ShareName. У всех принтеров в организации это поле заполнено, остальные принтеры пропускаем. В результате получился файл CVS, с которые можно делать все что угодно.
Установка PowerShell 2.0 на Windows Server 2003
Понадобилось мне тут запустить скрипт на PowerShell для сбора статистики на группе серверов. Все бы хорошо, но один из серверов ну очень старый, еще на Windows Server 2003 SP2. Как оказалось, обновления на этот сервер не ставились с момента его установки, поэтому про PowerShell он и не знает. Пришлось учить Windows Server 2003 SP2 павершелу, вот что для этого нужно:
1. Microsoft .NET Framework 2.0 Service Pack 2
2. Update for Windows Server 2003 (KB968930)
Скачал, установил оба обновления, перезагрузил сервер, запустил PowerShell. Теперь есть PowerShell!
Но чтобы полноценно пользоваться WMI из PowerShell нужно доустановить WMI Windows Installer провайдер, для этого понадобится дистрибутив Windows Server 2003, а точнее папку I386. Далее через Панель управления открывает панель Add Remove Programs –> Add/Remove Windows Components, дальше как на скриншоте.
Ошибка Root element is missing при запуске PowerGUI
При запуске PowerGUI Administrative Console на Windows 7 x64 появляется ошибка: Root element is missing. На этом запуск программы прерывается.
Решение:
Нужно полностью удалить каталог —
C:\Users\<user>\AppData\Local\Quest Software и снова запустить PowerGUI. Перезагрузка не нужна. Если не сработало, то можно еще удалить каталог — C:\Users\<user>\AppData\Roaming\Quest Software.
[SharePoint2010] Резервное копирование
Про то, что резервное копирование любого сервиса должно работать как швейцарские часы, я даже говорить не буду, т.к. это должно быть понятно любому человеку непосредственно связанному с IT. SharePoint 2010 не исключение, поэтому сегодня я расскажу — как настроить автоматическое резервное копирование SharePoint 2010.
[SharePoint2010] The local farm is not accessible. Cmdlets with FeatureDependencyId are not registered
При попытке запустить SharePoint 2010 Management Shell вылезло сообщение — «The local farm is not accessible. Cmdlets with FeatureDependencyId are not registered», и соответственно не работают командлеты PowerShell для SharePoint 2010.
При траблшутинге выяснилось, что ошибка появилась после установки PowerShell 3.0 на сервер Server 2008 R2, а точнее после установки обновления KB2506143. Все дело в том, что SharePoint 2010 использует .NET Framework 3.5, а для PowerShell 3.0 нужен NET Framework 4.0, который SharePoint не поддерживает. Решение простое, нужно для SharePoint 2010 Managment Shell запускать PowerShell в режиме 2.0. А как это сделать расскажу ниже…
[PowerShell] Экспорт списка учетных записей Active Directory в CSV-файл
Наводить порядок в Active Directory удобнее через MS Excel. Я написал скрипт на PowerShell, который все учетные записи пользователей из определенного контейнера в AD экспортирует в CSV-файл.
# # Список всех пользователей в контейнере Отдел777 в Active Directory и экспорт их в CSV файл # #http://did5.ru #16.01.2012 # $objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Отдел777,ou=Структура,dc=contoso,dc=com" $objSearcher.Filter = "(&(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # Количество учетных записей $users.Count $users | ForEach-Object { $user = $_.Properties New-Object PsObject -Property @{ Должность = [string]$user.description Отдел = [string]$user.department Табельный = [string]$user.userprincipalname Телефон = [string]$user.telephonenumber Комната = [string]$user.physicaldeliveryofficename ФИО = [string]$user.cn } } | Export-Csv -NoClobber -Encoding utf8 -Path d:\list_user.csv