hvostat: Jeeslaya (Default)
Утащил у [livejournal.com profile] ra1aie, за что ему большое спасибо.

Бывает так, что позарез нужно скачать какой-то файл с удаленного сервера, а на машине или server core, или слетевший ie, или другие причины, препятствующие скачиванию файлов традиционным способом.
И здесь нам поможет BITSAdmin - встроенная в Windows Server утилитка, способная выполнять функции wget.
Пример: bitsadmin /transfer myDownloadJob /download /priority normal http://www.site.domain/uzful_toolz.zip c:\uzful_toolz.zip

Коллега [livejournal.com profile] asm7 дополнил:
Также, можно воспользоваться командлетом PowerShell:
Invoke-WebRequest

Командлет присустствует в PowerShell 3.0 или старше.

__
hvostat: Jeeslaya (Default)
Нет ничего проще:

1) Создаём новый EventLog и указываем, откуда будем писать:
New-EventLog –LogName Application –Source “My Script”

2) Записываем событие, тип, код события и текст в записи журнала:
Write-EventLog –LogName Application –Source “My Script” –EntryType Information –EventID 1 –Message “This is a test message.”

__
hvostat: Jeeslaya (Default)
Задача: скопировать набор групповых политик из одной OU в другую OU.

Решение:
Воспользоваться PowerShell.

$SourceOU = "SOURCE_OU"
$DestinationOU = "OU=DESTINATION_OU,OU=MOSCOW,DC=hvostat,DC=local"

[xml]$gpos = Get-GPOReport -all -ReportType xml

foreach ($gpo in $gpos.gpos.gpo) {

if ($gpo.LinksTo.SOMName -eq $SourceOU) {
New-GPLink -Name $gpo.name -Target $DestinationOU
}
}

__
hvostat: Jeeslaya (Default)
Задача: создать собственную таблицу.
Приступаем.

#Обзываем таблицу:
$table_name = “SampleTable”

#Создаём объект таблицы:
$table = New-Object system.Data.DataTable “$table_name”

#Задаём столбцы:
$column1 = New-Object system.Data.DataColumn ColumnName1,([string])
$column2 = New-Object system.Data.DataColumn ColumnName2,([string])
...
$columnN = New-Object system.Data.DataColumn ColumnNameN,([string])

#Добавляём столбцы в таблицу:
$table.columns.add($column1)
$table.columns.add($column2)
...
$table.columns.add($columnN)

#Создаём новую строку:
$row = $table.NewRow()

#Начиниям данными:
$row.ColumnName1 = “A”
$row.ColumnName2 = “1”
...
$row.ColumnNameN = “NNN”

#Добавляем строку в таблицу:
$table.Rows.Add($row)

#Показываем таблицу:
$table | format-table -AutoSize

#"Чистим" и экспортируем в HTML:
$table | select * -ExcludeProperty RowError, RowState, HasErrors, Name, Table, ItemArray | ConvertTo-Html | out-file out-data.html

__
hvostat: Jeeslaya (Default)
Задача: получить данные по изданным сертификатам в CA.

Решение:
1) Скачать специальный PowerShell модуль отсюда.
3) Установить.
4) Импортировать модуль:
Import-Module PSPKI
5) Заполучить список интересующих сертификатов, например, вот так:
Get-CA | Get-IssuedRequest | Where-Object CertificateTemplate -eq "Secret Template" |Sort-Object NotAfter | ft CommonName, NotAfter

__
hvostat: Jeeslaya (Default)
Задача - узнать установленную версию PowerShell.

Нет ничего проще:
1) (внезапно!) Запускаем PowerShell
2) Вводим команду:
$PSVersionTable
3) ???
4) PROFIT!!!

Задача - установить PowerShell v.3.0. на Windows 7.
1) Скачиваем и устанавливаем DotNet 4.0
2) Скачиваем и устанавливаем Windows Management Framework 3.0

Задача - установить PowerShell v.4.0. на Windows 7.
1) Скачиваем и устанавливаем DotNet 4.5
2) Скачиваем и устанавливаем Windows Management Framework 4.0

PS: После всего комплекса телодвижений не забываем перекомпилировать модули .net

Список модулей и совместимость )

__
hvostat: Jeeslaya (Default)
Задача - скормить файл сертификата сторонней программе в виде одной строки.

$raw_text = Get-Content .\ADatum.cer
$string_text = $raw_text -join ''
$string_text > ADatum_string.txt

__
hvostat: Jeeslaya (Default)
Задача: получить в е-мейл результаты PS скрипта и/или уведомление через Scheduler.
Решение: использовать командлет Send-MailMessage

Пример:
$report = "Some report data"
Send-MailMessage -Body "$report" -Subject "PowerShell Test" -To admin@contoso.com -SmtpServer mail.contoso.com -From powershell@contoso.com -UseSsl -Encoding UTF8

_
hvostat: Jeeslaya (Default)
1. Формируем нужный нам layout в меню старт.
2. После этого экспортируем layout.
3. Запускаем PowerShell, в нём исполняем команду:
Export-StartLayout -As BIN -Path "с:\Layout_folder\layout_name.bin" -Verbose
4. После этого, на клиентской машине создаём scheduled task со скриптом либо исполняем разово:
Import-StartLayout -LayoutPath ".\layout_name.bin" -MountPath "%SystemDrive%\"

Все новые(!) пользователи это рабочей станции получат сохраненный layout.
Если каких-то программ нет на рабочей станции, но ссылки на них есть в "импортном" layout’е, то ссылки появятся после установки этих программ.

_
hvostat: Jeeslaya (Default)
Столкнулся с "чудесами": рабочие станции случайным образом не регистрируют/обновляют DNS-записи на домен-контроллере.

Первым делом - диагностика.
Воспользуемся "eine wundere powershellische Komandleten"

cls
write-host FLushing DNS cache...
ipconfig /flushdns
write-host
$total_workstations_count = (Get-ADComputer -Filter {(dnshostname -like "*workstation*") -or (dnshostname -like "*notebook*")} | sort dnshostname | format-table dnshostname).count
write-host "$total_workstations_count" workstations total found in Active Directory
write-host -----------------------------------
write-host Trying to resolve DNS host names...
$lost_workstations = 0
$workstations = (Get-ADComputer -Filter {(dnshostname -like "*workstation*") -or (dnshostname -like "*notebook*")} | sort dnshostname)
foreach($workstation in $workstations) {
$workstation_dns = $workstation.dnshostname | Select -Expand $_.dnshostname
If (-not(Resolve-DnsName -Name $workstation_dns -ErrorAction SilentlyContinue)) {
Write-Output -Verbose "Warning!!! Unregistred workstaion: $workstation_dns"
$lost_workstations ++
}}
Write-Host "Total workstations NOT registred: $lost_workstations"
write-host ----------- End Of Script ---------

_
hvostat: Jeeslaya (Default)
Задача: уведомлять пользователя на личный почтовый ящик о приходе почты на корпоративный почтовый ящик.
Нюанс: содержимое письма показывать нельзя!

Решение: Создать особое TransportRule
New-TransportRule "Notify Anna when Message Recieved" -SentTo 'anna@contoso.com' -GenerateIncidentReport 'anna@adatum.com'-IncidentReportContent "Sender","Subject"

_
hvostat: Jeeslaya (Default)
Поставили задачу запускать программу с определёнными ключами.
В PowerShell это делается через вот такую хитро закрученную жопу таким образом:

& 'C:\Program Files (x86)\Some Useful Program\run.exe' /argument

_
hvostat: Jeeslaya (Default)
Разворачиваем корпоративный мессенджер с привязкой к AD.

Возникла проблема: в поле имени мессенджер копирует параметр "name", а он есть весьма длинный.
Юзверятам будет очень неудобно наблюдать в списке контактов подобных персонажей:
Старопольский Вениамин Станиславович
Барановская Валерия Владиленовна
Бальбуциновский Александр Яковлевич
и прочих "длинных".

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

Ради Бога. )
Воспользуемся "eine wundere powershellische Komandleten":

Import-Module ActiveDirectory
$users = Get-ADGroupMember "CN=target_group,OU=IT,DC=adatum,DC=com"
foreach($user in $users) {
$full_name = $user.Name | Select -Expand $_.Name
$name_split = $full_name -split("")
$splitted = $name_split[2,3]
Set-ADObject -Identity $user -Replace @{displaynameprintable="$splitted"}
}

Проверить правильность работы скрипта можно с помощью команды:
Get-ADUser -Identity i.ivanov -Properties * |ft name,displaynameprintable
hvostat: Jeeslaya (Default)
Иногда, например для тестов, требуется создать большие файлы.

Простейший скрипт на PowerShell:

$path = "С:\test\testfile.txt"
$file = [io.file]::Create($path)
$file.SetLength(250gb)
$file.Close()
Get-Item $path

UPD: Господин товарищ [livejournal.com profile] ms_serg подсказывает, что можно использовать fsutil:

fsutil file createnew C:\test\testfile.txt 1000

Сразу оговорю нюансы обоих методов: файлы создаются пустые.
Будет свободная минутка - черкну на PS "Фуфлотрон mk.II", который создаёт "честные" файлы, с рандомной "кашей" внутри.
hvostat: Jeeslaya (Default)
Добавляем агента:
C:\ExchangeInstallPath\Scripts\Install-AntiSpamAgents.ps1
Restart-Service MSExchangeTransport

Настраиваем конфиг:
set-TransportConfig -InternalSMTPServers @{Add="192.168.nnn.nnn"}
Set-ContentFilterConfig -QuarantineMailbox postmaster@domain.pseudodomain
Add-IPBlockListProvider -name bl.spamcop.net -lookupdomain bl.spamcop.net
Add-IPBlockListProvider -name zen.spamhaus.org -lookupdomain zen.spamhaus.org
Set-SenderIDConfig -SpoofedDomainAction Delete
Set-SenderReputationConfig -SenderBlockingEnabled $true -SrlBlockThreshold 6 -SenderBlockingPeriod 36
Set-SenderFilterConfig -BlankSenderBlockingEnabled $true
Set-ContentFilterConfig -SCLQuarantineThreshold 6
Set-ContentFilterConfig -SCLDeleteEnabled $true
Set-ContentFilterConfig -SCLQuarantineEnabled $true -QuarantineMailbox postmaster@domain.pseudodomain
Set-ContentFilterConfig -SCLRejectEnabled $false
Restart-Service MSExchangeTransport

__
hvostat: Jeeslaya (Default)
По мотивам вот этого поста.

Задача: принудительно выполнять logoff всем терминальным пользователям сервера.
Решение: используем PowerShell.
1) Скачиваем вот этот модуль: PSTerminalServices (почему этого модуля нет "искаробки" я не пойму никогда)
2) Пишем PowerShell’ный скрипт:

Import-Module PSTerminalServices
Get-TSSession -ComputerName SERVER_NAME -filter {$_.sessionID -ne 0 -AND $_.sessionID -ne 1 -AND $_.sessionID -ne 65536}| Stop-TSSession –Force

3) Сохраняем как logoff.ps1
4) Настраиваем выполнение в task scheduler на 1,2,3..n часов ночи.
5) PROFIT

Profile

hvostat: Jeeslaya (Default)
hvostat

June 2017

S M T W T F S
    123
45678910
11121314151617
181920212223 24
252627282930 

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated 23 July 2017 18:39
Powered by Dreamwidth Studios