Авторизация



Теги сайта



0х0000007b 1c access control list acl activation active directory ad roles add route adexplorer apache authentication to zabbix bare metal recovery bg zsh bicycle books bruteforce c admin ccna centos centos packet change net adapter name chap chkrootkit chmod cisco clipboard cmd configuring cpu cores cron crontab csc cut cvsup cvsup-without-gui db dev null 2 1 dhcp dhcp reservation disable ipv6 diskpart dism dns domain naming master domain roles download download powershell enable routing on windows enabled end-system doc english english language esx eventlog exe file associations fail2ban fastest_cvsup fedora fg zsh formatdatabase freebsd fsmo get-aduser group policy management hardware https hyper-v idioms iis iperf iptables iscsi jobs kernel panic ldap ldap аутентификация zabbix limit lingualeo linux malware posix mcitp mcsa mcse memory check microsoft mod_ssl mount mssql mysql mysql user password netcache network network config network diagram network document network load balance cluster network scripts nginx nlb num lock numlock openssl pap partition pdc permissions php pipeline pkg_version ports upgrade portupgrade posix powershell ppp pwdlastset rdp reg add regedit registry remote enable restrictions reverse proxy rhel rid rope jumping bridge мост прыжок высота route add route freebsd router switch doc routing protocol rpm sc sc sdset sc sdshow schema scope script output secure web security seize role service permissions services set dns servers set ip address sftp shell script show variables snmp sound scheme sounds speed ssh standard-supfile subinacl supfile switch switchport sync syncronization task sсheduler tempdb topology map transfer role tripplite monitoring tweaks unix user must change password at next logon utf8 vim vlan vmware w32tm web windows windows 2003 r2 windows 2008 r2 windows administrative share windows firewall windows server windows server 2012 windows server backup windows service permissions windows пингалка winre wsus xargs yum zabbix zabbix external check zabbix ldap authentication zsh автоматическое обновление портов freebsd автономные файлы активация английский язык ассоциации файлов windows база данных безопасность active directory буфер вело велосипед видео включение роутинга в windows внешняя проверка zabbix вредоносное программное обеспечение posix документация сети задание двумерного массива захват ролей dc звуки звуковая схема идиомы иероглифы киев кодировка командная строка конфигурация сети маршрутизация маршруты в freebsd маршруты в redhat linux область ограничения windows основные команды отключение административных ресурсов пакеты centos перевод передача ролей dc перенос планировщик задач покатушки полет над днепром проблемы кодировки протокол путь развития в it разрешения служб windows регистрируем cmd скриптом недоступность хоста реестр резервирование ip скриптом роли домена русские символы синхронизация скачать скачать powershell скачать книгу скорость сети списки контроля доступа тарзанка твики фоновые процессы цикл mssql

Главная страница Microsoft POWERSHELL Полезные твики Windows. Автоматизация на PowerShell
Полезные твики Windows. Автоматизация на PowerShell Печать

Каждый раз при переустановке операционной системы Microsoft Windows 8.1 или Windows 7 многие из нас сталкиваются с одними и теми же рутинными задачами, цель которых привести рабочую среду к более удобному состоянию, позволяющему наилучшим образом выполнять свою работу, не задумываясь об остальном. В этой статье я поделюсь простыми и нужными твиками для Вашей операционной системы Microsoft (версии Windows 7 и выше).

Точно следуя написанному, Вы сможете автоматизировать следующее:

  • Автоматический перенос пользовательских папок с системного диска C: на диск D: с миграцией существующих данных
  • Автоматическое переименование метки дисков C: и D: (изменение названия логических дисков)
  • Заблокировать надоедающую рекламу в настольной версии Skype
  • Заблокировать отправку шпионских данных операционной системой

Приведенные твики можно скомпоновать в единый PowerShell скрипт по Вашему желанию. Таким образом Вы существенно снизите ваши трудовые затраты, а главное свое время.

Почему PowerShell? Зачем он нам нужен?

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

На мой взгляд, язык сценариев Microsoft PowerShell в дальнейшем будет стремительно развиваться и все больше и больше пользователей, в том числе и пользователей клиентских рабочих станций, будут прибегать к его использованию в своих нуждах. Также не станет удивлением, если через некоторое время Microsoft добавит базовый функционал PowerShell и в свои мобильные версии операционных систем, устанавливаемые на подобные смартфоны Windows Phone 8.1 http://price.ua/smartfony_windows_phone_8_1/ccid1871.html

Главное преимущество PowerShell по сравнению со многими другими командными оболочками - это унифицированные команды (командлеты). Один раз поняв их принцип, можно будет писать серьезные сценарии, даже не имея доступа к интернет и пользуясь только встроенной справкой Get-Help и командлетом Get-Command

Как с этим работать? Куда вставлять код PowerShell?

Человек, который ни разу не работал с PowerShell, резонно задаст первый вопрос: "Куда же вставлять весь этот код?". Ответ прост: вставлять нужно в саму оболочку, запущенную с повышенными правами администратора.

В меню "Пуск" в строке поиска пишем "powershell", после чего в найденных результатах нажимаем правой кнопкой мыши на "Windows PowerShell" и выбираем "Запуск от имени администратора". Если все сделано правильно, откроется синее окошко. Это и есть оболочка Windows PowerShell.

powershell-tweaks-01

 

Следует также знать что для того, чтобы вставить текст из буфера обмена в оболочку PowerShell, нужно нажать правую кнопку мыши в окне оболочки (сочетание Ctrl+V тут по умолчанию работать не будет). Создавать же сценарии лучше в специальной оболочке PowerShell ISE.


Автоматический перенос пользовательских папок с системного диска C: на диск D:. Миграция существующих данных

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

 
if (Test-Path -LiteralPath 'D:\')
{
    $curUser = "$env:USERDOMAIN\$env:USERNAME"

    if (!(Test-Path -LiteralPath 'D:\_DESKTOP'))
        {
            Write-Host -ForegroundColor DarkGray "START: Migrate Desktop"

            New-Item -Path "D:\_DESKTOP" -ItemType Directory -Force | Out-Null
            Start-Process -FilePath "$env:SystemRoot\System32\xcopy.exe" -Wait -WindowStyle Minimized -ArgumentList """$env:USERPROFILE\Desktop\*"" ""D:\_DESKTOP"" /C /H /K /O /X /R /E /I /G /Q /Y"
            $getDir = Get-Item -Path "D:\_DESKTOP"
            $getDir.Attributes = "Hidden, System"

            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_DESKTOP"" /grant:r *S-1-5-18:(OI)(CI)(F) /inheritance:r"
            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_DESKTOP"" /grant ""$curUser"":(OI)(CI)(F) /inheritance:r"

            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders' -Name 'Desktop' -Value 'D:\_DESKTOP' | Out-Null
            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name 'Desktop' -Value 'D:\_DESKTOP' | Out-Null
        }


    if (!(Test-Path -LiteralPath 'D:\_DOWNLOADS'))
        {
            Write-Host -ForegroundColor DarkGray "START: Migrate Downloads"

            New-Item -Path "D:\_DOWNLOADS" -ItemType Directory -Force | Out-Null
            Start-Process -FilePath "$env:SystemRoot\System32\xcopy.exe" -Wait -WindowStyle Minimized -ArgumentList """$env:USERPROFILE\Downloads\*"" ""D:\_DOWNLOADS"" /C /H /K /O /X /R /E /I /G /Q /Y"
            $getDir = Get-Item -Path "D:\_DOWNLOADS"
            $getDir.Attributes = "ReadOnly"

            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_DOWNLOADS"" /grant:r *S-1-5-18:(OI)(CI)(F) /inheritance:r"
            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_DOWNLOADS"" /grant ""$curUser"":(OI)(CI)(F) /inheritance:r"

            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders' -Name '{374DE290-123F-4565-9164-39C4925E467B}' -Value 'D:\_DOWNLOADS' | Out-Null
            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name '{374DE290-123F-4565-9164-39C4925E467B}' -Value 'D:\_DOWNLOADS' | Out-Null
        }


    if (!(Test-Path -LiteralPath 'D:\_DOCUMENTS'))
        {
            Write-Host -ForegroundColor DarkGray "START: Migrate Documents"

            New-Item -Path "D:\_DOCUMENTS" -ItemType Directory -Force | Out-Null
            Start-Process -FilePath "$env:SystemRoot\System32\xcopy.exe" -Wait -WindowStyle Minimized -ArgumentList """$env:USERPROFILE\Documents\*"" ""D:\_DOCUMENTS"" /C /H /K /O /X /R /E /I /G /Q /Y"
            $getDir = Get-Item -Path "D:\_DOCUMENTS"
            $getDir.Attributes = "ReadOnly"

            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_DOCUMENTS"" /grant:r *S-1-5-18:(OI)(CI)(F) /inheritance:r"
            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_DOCUMENTS"" /grant ""$curUser"":(OI)(CI)(F) /inheritance:r"

            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders' -Name 'Personal' -Value 'D:\_DOCUMENTS' | Out-Null
            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name 'Personal' -Value 'D:\_DOCUMENTS' | Out-Null
        }


    if (!(Test-Path -LiteralPath 'D:\_AUDIO'))
        {
            Write-Host -ForegroundColor DarkGray "START: Migrate Audios"

            New-Item -Path "D:\_AUDIO" -ItemType Directory -Force | Out-Null
            Start-Process -FilePath "$env:SystemRoot\System32\xcopy.exe" -Wait -WindowStyle Minimized -ArgumentList """$env:USERPROFILE\Music\*"" ""D:\_AUDIO"" /C /H /K /O /X /R /E /I /G /Q /Y"
            $getDir = Get-Item -Path "D:\_AUDIO"
            $getDir.Attributes = "ReadOnly"

            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_AUDIO"" /grant:r *S-1-5-18:(OI)(CI)(F) /inheritance:r"
            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_AUDIO"" /grant ""$curUser"":(OI)(CI)(F) /inheritance:r"

            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders' -Name 'My Music' -Value 'D:\_AUDIO' | Out-Null
            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name 'My Music' -Value 'D:\_AUDIO' | Out-Null
        }


    if (!(Test-Path -LiteralPath 'D:\_PICTURES'))
        {
            Write-Host -ForegroundColor DarkGray "START: Migrate Pictures"

            New-Item -Path "D:\_PICTURES" -ItemType Directory -Force | Out-Null
            Start-Process -FilePath "$env:SystemRoot\System32\xcopy.exe" -Wait -WindowStyle Minimized -ArgumentList """$env:USERPROFILE\Pictures\*"" ""D:\_PICTURES"" /C /H /K /O /X /R /E /I /G /Q /Y"
            $getDir = Get-Item -Path "D:\_PICTURES"
            $getDir.Attributes = "ReadOnly"

            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_PICTURES"" /grant:r *S-1-5-18:(OI)(CI)(F) /inheritance:r"
            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_PICTURES"" /grant ""$curUser"":(OI)(CI)(F) /inheritance:r"

            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders' -Name 'My Pictures' -Value 'D:\_PICTURES' | Out-Null
            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name 'My Pictures' -Value 'D:\_PICTURES' | Out-Null
        }


    if (!(Test-Path -LiteralPath 'D:\_VIDEO'))
        {
            Write-Host -ForegroundColor DarkGray "START: Migrate Videos"

            New-Item -Path "D:\_VIDEO" -ItemType Directory -Force | Out-Null
            Start-Process -FilePath "$env:SystemRoot\System32\xcopy.exe" -Wait -WindowStyle Minimized -ArgumentList """$env:USERPROFILE\Videos\*"" ""D:\_VIDEO"" /C /H /K /O /X /R /E /I /G /Q /Y"
            $getDir = Get-Item -Path "D:\_VIDEO"
            $getDir.Attributes = "ReadOnly"

            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_VIDEO"" /grant:r *S-1-5-18:(OI)(CI)(F) /inheritance:r"
            Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -Wait -WindowStyle Minimized -ArgumentList """D:\_VIDEO"" /grant ""$curUser"":(OI)(CI)(F) /inheritance:r"

            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders' -Name 'My Video' -Value 'D:\_VIDEO' | Out-Null
            Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name 'My Video' -Value 'D:\_VIDEO' | Out-Null
        }
}

Для вступления изменений в силу нужно перезагрузить компьютер.

 

Автоматическое переименование метки дисков C: и D: (изменение названия логических дисков)

Еще один интересный сценарий автоматизации переименует Ваши логические диски C и D в определенный формат. Например, если у Вас в системе установлен один физический дисковый накопитель (попросту один винчестер), то ваши логические диски станут выглядеть таким образом: Disk-1_SYSTEM (C:) и Disk-1_WORK (D:). А если у Вас два физических дисковых накопителя, один из которых отформатирован под логический раздел C, а другой под логический раздел D, то ваши логические диски станут: Disk-1_SYSTEM (C:) и Disk-2_WORK (D:).

Write-Host -ForegroundColor DarkGray "START: Logical disks renaming"
[string]$DiskClabel = 'SYSTEM'
[string]$DiskDlabel = 'WORK'

foreach ($Drive in Get-WmiObject win32_diskDrive )
{
    [byte]$CurrentDisk = $Drive.Index + 1
    $did = $Drive.deviceid.replace('\','\\')

    foreach ( $Partition in Get-WmiObject -query ('associators of {win32_diskdrive.deviceid="' + $did + '"} where assocclass = win32_diskDriveToDiskPartition') )
    {
        foreach ($Disk in Get-WmiObject -query ('associators of {win32_diskpartition.deviceid="' + $Partition.deviceID + '"} where assocclass = win32_logicalDiskToPartition'))
        {
            switch ($Disk.DeviceID)
            {
                "C:" {$DiskClabel = "Disk-" + $CurrentDisk + "_SYSTEM"}
                "D:" {$DiskDlabel = "Disk-" + $CurrentDisk + "_WORK"}
            }

            if ( ($DiskDlabel -ne 'WORK') -and ($DiskClabel -ne 'SYSTEM') )
            {
                break
            }
        }
    }
}

Get-CimInstance Win32_LogicalDisk -Filter "deviceID = 'c:'" | Set-CimInstance -Property @{volumename= $DiskClabel}
Get-CimInstance Win32_LogicalDisk -Filter "deviceID = 'd:'" | Set-CimInstance -Property @{volumename= $DiskDlabel}

Для того, чтобы данный сценарий отработал в операционной системе Windows 7, нужно убедиться что версия оболочки PowerShell не ниже 3.0. Если версия ниже, понадобится предварительно установить dotNet Framework 4 (ссылка) и затем соответствующий пакет обновления PowerShell (ссылка).

 

Заблокировать надоедающую рекламу в настольной версии Skype

Надоели анимированные рекламные картинки в приложении Skype? Выполните следующий сценарий:

Write-Host -ForegroundColor DarkGray "START: Skype advertisement disabling"

$spyURLs = @(
"`n"
"`n"
"`n"
'# -----====== START BLOCK: Skype advertisement URLs disabling. Please visit http://Vam.in.UA ======-----'
'127.0.0.1 apps.skype.com' 
'127.0.0.1 api.skype.com' 
'127.0.0.1 static.skypeassets.com'
'127.0.0.1 rad.msn.com'
'127.0.0.1 adriver.ru'
'# -----====== END BLOCK: Skype advertisement URLs disabling. Please visit http://Vam.in.UA ======-----'
) 

Out-File -FilePath "$env:SystemRoot\System32\drivers\etc\hosts" -InputObject $spyURLs -Force -Append -Encoding default

 

Заблокировать отправку шпионских данных операционной системой

И напоследок хотелось бы поделиться сценарием, который занесет в файл hosts ссылки URL, на которые осуществляется отправка операционными системами Microsoft статистической информации. Тем самым предотвратив утечку Ваших данных.

Я не против поделиться некоторой статистической информацией, однако это не должны быть снимки моего Рабочего стола или веб-камеры и подобное. И при любых обстоятельствах, мне хотелось бы самостоятельно принимать решение отправлять ли какие-то статистические данные или нет. А так как в операционных системах по-умолчанию включены сбор и отправка Ваших данных и нет предложения выборочно отключить этот функционал, я буду солидарен с пользователями интернет, которые называют такие действия шпионскими.

На сегодняшний день уже многие сайты содержат новости об обновлениях KB3068708, KB3022345, KB3075249 и KB3080149, которые ставятся на Windows 7 или Windows 8.1. Эти обновления добавляют в такие операционные системы печально известный функционал, присутствующий в Windows 10.

Я предлагаю простой скрипт PowerShell, по сути блокирующий отправку на известные веб-адреса Ваших данных.

Write-Host -ForegroundColor DarkGray "START: Add spy URLs to the Hosts file"

$spyURLs = @(
"`n"
"`n"
"`n"
'# -----====== START BLOCK: Microsoft spy URLs disabling. Please visit http://Vam.in.UA ======-----'
'127.0.0.1 vortex-win.data.microsoft.com'
'127.0.0.1 settings-win.data.microsoft.com'
'127.0.0.1 vortex.data.microsoft.com'
'127.0.0.1 telecommand.telemetry.microsoft.com'
'127.0.0.1 telecommand.telemetry.microsoft.com.nsatc.net'
'127.0.0.1 oca.telemetry.microsoft.com'
'127.0.0.1 oca.telemetry.microsoft.com.nsatc.net'
'127.0.0.1 sqm.telemetry.microsoft.com'
'127.0.0.1 sqm.telemetry.microsoft.com.nsatc.net'
'127.0.0.1 watson.telemetry.microsoft.com'
'127.0.0.1 watson.telemetry.microsoft.com.nsatc.net'
'127.0.0.1 redir.metaservices.microsoft.com'
'127.0.0.1 choice.microsoft.com'
'127.0.0.1 choice.microsoft.com.nsatc.net'
'127.0.0.1 df.telemetry.microsoft.com'
'127.0.0.1 reports.wes.df.telemetry.microsoft.com'
'127.0.0.1 wes.df.telemetry.microsoft.com'
'127.0.0.1 services.wes.df.telemetry.microsoft.com'
'127.0.0.1 sqm.df.telemetry.microsoft.com'
'127.0.0.1 telemetry.microsoft.com'
'127.0.0.1 watson.ppe.telemetry.microsoft.com'
'127.0.0.1 telemetry.appex.bing.net'
'127.0.0.1 telemetry.urs.microsoft.com'
'127.0.0.1 telemetry.appex.bing.net'
'127.0.0.1 settings-sandbox.data.microsoft.com'
'127.0.0.1 vortex-sandbox.data.microsoft.com'
'127.0.0.1 survey.watson.microsoft.com'
'127.0.0.1 watson.live.com'
'127.0.0.1 watson.microsoft.com'
'127.0.0.1 statsfe2.ws.microsoft.com'
'127.0.0.1 corpext.msitadfs.glbdns2.microsoft.com'
'127.0.0.1 compatexchange.cloudapp.net'
'127.0.0.1 cs1.wpc.v0cdn.net'
'127.0.0.1 a-0001.a-msedge.net'
'127.0.0.1 statsfe2.update.microsoft.com.akadns.net'
'127.0.0.1 sls.update.microsoft.com.akadns.net'
'127.0.0.1 fe2.update.microsoft.com.akadns.net'
'127.0.0.1 diagnostics.support.microsoft.com'
'127.0.0.1 corp.sts.microsoft.com'
'127.0.0.1 statsfe1.ws.microsoft.com'
'127.0.0.1 pre.footprintpredict.com'
'127.0.0.1 i1.services.social.microsoft.com'
'127.0.0.1 i1.services.social.microsoft.com.nsatc.net'
'127.0.0.1 feedback.windows.com'
'127.0.0.1 feedback.microsoft-hohm.com'
'127.0.0.1 feedback.search.microsoft.com'
'127.0.0.1 rad.msn.com'
'127.0.0.1 preview.msn.com'
'127.0.0.1 ad.doubleclick.net'
'127.0.0.1 ads.msn.com'
'127.0.0.1 ads1.msads.net'
'127.0.0.1 ads1.msn.com'
'127.0.0.1 a.ads1.msn.com'
'127.0.0.1 a.ads2.msn.com'
'127.0.0.1 adnexus.net'
'127.0.0.1 adnxs.com'
'127.0.0.1 az361816.vo.msecnd.net'
'127.0.0.1 az512334.vo.msecnd.net'
'# -----====== END BLOCK: Microsoft spy URLs disabling. Please visit http://Vam.in.UA ======-----'
)

Out-File -FilePath "$env:SystemRoot\System32\drivers\etc\hosts" -InputObject $spyURLs -Force -Append -Encoding default

Комментарии:

 

Добавить комментарий

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

Защитный код
Обновить

Главная страница Microsoft POWERSHELL Полезные твики Windows. Автоматизация на PowerShell