Wednesday 21 September 2022

Удаленно включить RDP в Windows.


Всем привет.

Иногда случается что на удаленном хосте забыли включить RDP. Это можно поправить не бегая к нему лично, т.е. вы можете удаленно включить RDP на любом компьютере Windows. Но для этого у вас должен быть удаленный доступ к целевому компьютеру (через PowerShell или WMI) и ваша учетная запись состоять в группе локальных администраторов на целевом компьютере.

В принципе все сводится в правке ключа реестра  fDenyTSConnections на целевом компьютере RemHost.

Это понятно? Тогда приступим. Выполним настройку RDP удаленно из командной строки с помощью встроенной утилиты sc (позволяет создавать, управлять или удалять службы Windows):

sc \\RemHost config RemoteRegistry start=demand

sc \\RemHost start RemoteRegistry

Затем на своем компьютере:

  • запустите редактор реестра regedit.exe
  • выберите в меню Файл пункт Connect Network Registry (Подключить сетевой реестр)
  • укажите имя RemHost или IP адрес удаленного компьютера, на котором нужно включить службу RDP;
  • перейдите в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server;
  • найдите параметр fDenyTSConnections (тип REG_DWORD). Если данный ключ отсутствует – создайте его. 
  • измените его значение на 0, чтобы включить RDP.

Для отключения RDP доступа нужно изменить значение fDenyTSConnections на 1.

Сразу после этого без перезагрузки удаленный компьютер должен стать доступным по RDP.

Friday 16 September 2022

Супер-ножницы Windows 11.

Всем привет.

Как и ожидалось, в Windows 11 инструмент «Ножницы» находится в списке удаленных функций. Пользователи ПК, недавно обновившиеся до Windows 11 с Windows 10, могут заметить, что старый инструмент "Ножницы" отсутствует и недоступен - это связано с тем, что старый инструмент "Ножницы" был заменен на Snipping Tool (Ножницы) плюс Snip & Sketch, т.е. два в одном. С итоговым названием... "Ножницы"!


Замечательно, но не совсем. У меня новые "Ножницы" работают в два раза медленнее старых, да и половина функций в наборе мне оказалась не нужна. Поэтому встала задача вернуть те "Ножницы" что попроще. Как? 

Не надо искать никаких умных инструкций на пол экрана, все оказалось проще простого - находим Windows 10 и: 

  • в  \Windows\System32 берем SnippingTool.exe, 
  • в \Windows\System32\en-US берем SnippingTool.exe.mui.
И ложим все это в нашу Windows 11 по тем же папкам. Это все. Можно использовать старые "Ножницы" запуском с ярлыка SnippingTool.exe.

Всем удачи.

Thursday 15 September 2022

Блокируем SCCM Remote Control.

Всем привет.

Применение SCCM Remote Control в работе службы технической поддержки имеет свои плюсы. Главным преимуществом перед тем же RDP-соединеием является возможность подосединиться удаленно в сеанс пользователя и наглядно лицезреть и решать проблему последнего.

Однако, как оказалось, в этом же и его опасность для пользователя. Ибо SCCM Remote Control не требует подтверждения на подсоединение, т.е. спецалист ТП может это сделать в самый "неудобный" момент либо же в момент когда пользователь зевнул и отошел на кофе от своего пк не заблокировав рабочий стол.

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

Первое - как мы знаем удаленный помошник SCCM Remote Control использует порты:

Console SCCM -> Client tcp 2701,3389 udp 3389

Поскольку 3389-й порт нужен для RDP его мы блокировать не будем, а нацелимся на порт 2701.

Второе - править правила штатного фаерволла Windows я тоже не стал, ибо они часто попадают под политики того же инфобеза и мои локальные запреты дожили бы максимум до следующего gpupdate.

Wednesday 14 September 2022

Установка .NET Framework v3.5 в Windows Server.


Всем привет.

Довольно много приложений для своей работы в Windows Server или Windows 10 требуют наличия предустановленного .NET Framework 3.5 несмотря на наличие в системе .NET Framework более высоких версий. К примеру, без .Net 3.5 вам не удасться установить и запустить SQL Management Studio. Такой вот загадочный Microsoft. Ну что ж, будем выкручиваться.

Если на вашем Windows Server есть прямой доступ в Интернет, вы можете установить .NET Framefork 3.5 несколькими способам:

  • через Server Manager;
  • с помощью DISM: DISM /Online /Enable-Feature /FeatureName:NetFx3 /All
  • с помощью PowerShell: Install-WindowsFeature NET-Framework-Core

При этом все необходимые файлы .NET 3.5 для вашей версии Windows Server загружаются с серверов Windows Update. Чтобы сработал этот метод установки нужно убедиться в:

  • сервер не настроен на локальный WSUS сервер для получения обновлений (проверьте настройки обновлений в групповых политиках или напрямую в реестре: REG QUERY "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -v WUServer)
  • настройки прокси-сервера и файервола не должны ограничивать доступ к серверам Windows Update.

Если с вашего сервера нет прямого доступа в Интернет (что есть правильно), то при попытке установить .NET 3.5 в Windows Server через консоль Server Manager (Add Roles and Features -> Features -> Net Framework 3.5 Features, установка заканчивается с ошибкой 0x800f081f (The source files could not be found) или 0x800F0950.

Хотя .NET Framework 3.5 присутствует в списке компонентов Windows Server 2016/2019, на самом деле его бинарные файлы в хранилище компонентов Windows отсутствуют (концепция Features on Demand). Это сделано, чтобы уменьшить размер ОС на диске. Вы можете проверить наличие.NET Framework 3.5 в локальном хранилище компонентов Windows Server с помощью команды:

Get-WindowsFeature *Framework*

Обычно вы увидите статус компонента NET-Framework-Core для версии 3.5 как Removed.

Saturday 10 September 2022

Удаляем фантомные сервера из VMM.

Всем привет.

Сегодня хочу вам поведать как можно убрать из консоли SCVMM сведения о некорректно удаленных(мигрированных) HV-серверах. Например, в случае с одного из серверов виртуализации сняли роль Hyper-V, поставили чистую ОС и отдали под другие задачи, а из консоли VMM отключить забыли. Но это может произойти даже когда администратор  выполняет все штатно в самой консоли SCVMM. В результате чего получается такая картина:

Собственно, теперь с этим сервером, тот самый который pending, сделать ничего нельзя ни из GUI, ни из PowerShell. Если он просто перестал существовать и забыт в SCVMM, то его можно удалить так:

$VMM = 'hv04.forza.com'

$Name = Get-SCVMHost -ComputerName $VMM

Remove-SCVMHost -VMHost $Name -Force

Thursday 8 September 2022

Запуск внешней программы из PowerShell.

Всем привет.

Задача запустить из PowerShell какой либо исполняемый файл  (программу или утилиту командной строки) встречается достаточно часто. Последний раз я с этим столнкнулся бувкально на днях когда правил шаблон BGinfo. PowerShell предлагает для этого несколько различных способов, которые рассмотрим далее.

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

$exec = "d:\1st.cmd"

Секция прямого вызова:

.$exec

& $exec

cmd /c $exec


Секция  Invoke-командлетов:

Invoke-Expression -Command $exec

Invoke-Item -Path $exec

Invoke-Command -ScriptBlock {& $exec}

Wednesday 7 September 2022

Шифрование данных в PowerShell.

Всем привет.

С помощью PowerShell можно не только защитить конфиденциальные данные, но и использовать другие возможности командлетов, таких, как Invoke-Command или New-PSSession. Я покажу вам, насколько просто шифровать или дешифровать данные в PowerShell и как можно использовать зашифрованные данные для создания данных учетных записей.

В PowerShell командлеты ConvertTo-SecureString и ConvertFrom-SecureString можно использовать для шифрования и дешифрования стандартной строки System.String в System.Security.SecureString.

Вот пример, когда строка шифруется и сохраняется в переменной:

data = "This is some extremely important data"

$encryptedData = ConvertTo-SecureString -String $data -AsPlainText

Если мы введем имя переменной, содержащей зашифрованную строку, то увидим ее тип System.Security.SecureString

Мы также можем расшифровать данные, хранящиеся в объекте System.Security.SecureString, следующим образом:

ConvertFrom-SecureString -SecureString $encryptedData -AsPlainText


Ремарка - это справедливо для Powershell версии 7.2+.

Sunday 4 September 2022

BGinfo и Powershell.

Всем привет.

BGInfo - это маленькая утилита входящая в состав всем известного пакета Sysinternals от Марка Русиновича. В ее задачи входит отображение на рабочем столе некой полезной системной информации. 

В качестве дополнительной опции она может черпать информацию из внутренних WMI-запросов и внешних VB-скриптов. Однако автор уилиты здесь незаслуженно обошел Powershell. Поэтому я сегодня вам покажу как это исправить. 

Логика моего решения проста - запустим Powershell из VBScript. В шаблоне BGInfo указываем вызов VB-скрипта, например файл 11.vbs, в котором и вызываем Powershell:


On Error Resume Next

Set objShell = CreateObject("Wscript.Shell")

Status = objShell.Exec("powershell.exe -ExecutionPolicy Bypass –Noprofile -Windowstyle Hidden -File test.ps1").StdOut.ReadAll()

Echo Status

Не забываем прочитать результат Powershell через ReadAll(), и передать его через эхо в саму BGInfo.

А вот скрипт Powershell test.ps1 должен возвращать максимально простой однострочный ответ, например такой:
$PSVersionTable.PSVersion.Major

Это все. Работает на ура. Кстати убирайте в Path все кроме имени вызываемого vbs-файла, так проще запускать утилиту с нового места, не надо будет каждый раз перестраивать шаблон.

Удачи.

Friday 2 September 2022

GUI с помощью Windows Presentation Foundation.

Всем привет.

Рациональным подходом к созданию GUI в Powershell будет случай когда декларативное описание графического интерфейса отделяется от остального кода исполнения. Такой подход обеспечивает технология Windows Presentation Foundation (WPF).

При использовании WPF графический интерфейс описывается с помощью бази­рующегося на XML языка разметки XAML (Extensible Application Markup Lan­guage). Таким образом, дизайн интерфейса отделяется от логики сценария, рабо­тающего с этим интерфейсом. Для работы с объектами WPF в PowerShell нужно загрузить сборку PresentationFramework:

PS C: \Users\xenial> Add-Type -AssemblyName PresentationFramework

Создадим сначала простейшее диалоговое окно без элементов размером 300x200 пик­селов и с заголовком "Форма WPF". На первом шаге с помощью here-string созда­дим строку $xaml с XML-разметкой, содержащей один тег <window/> с атрибутами Width, Height и Title, и преобразуем эту строку в объект XML:

PS С:\Users\xenial> [xml]$xaml = @"

<Window

xmlns="http: //schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns :x="http: //schemas.microsoft.com/winfx/2006/xaml"

        x:Name="Window" Тitle="Form WPF” Height=”200" Width=”300”

 />

"@

Thursday 1 September 2022

Закавыка в Powershell.


Всем привет.

В процессе написания кода был вынужден еще раз вернуться к... кавычкам в Powershell.

Итак, одинарными кавычками ' ' в Powershell выделяют нерасширяемые строки. В таких строках не действуют escape-последовательности и не происходит подстановка значений переменных.

Двойные кавычки " " используются для создания расширяемых строк. Если внутри такой строки встречается имя переменной или другое выражение, кото­рое может быть вычислено, то в строку подставляется значение данной пере­менной или результат вычисления выражения. Также в расширяемых строках действуют escape-последовательности. Например, если в переменной $name хра­нится слово ’’Иван”, то в переменной $hello = "Привет, $паше! `n" будет записа­на строка ’Привет, Иван!’ и символ перевода строки.

Знак ` (обратный апостроф или гравис) является в PowerShell экранирующим символом. Внутри строки в двойных кавычках обратный апостроф задает escape-последовательность (например, `n означает перевод строки). Использова­ ние его перед пробелом внутри параметров команды позволяет не указывать ка­вычки для путей к файлам или каталогам, содержащим пробелы (например, cd C:\Program Files). Если обратный апостроф является последним символом в командной строке, то ввод команды продолжается со следующей строки (это позволяет выполнять в PowerShell многострочные команды). По сути гравис не является кавычкой как таковой, но его укажем тоже.

Ок, а теперь наглядные примеры по всем трем видам:

Clear-Host

 

Write-Host '1)'

Write-Host "String text"

Write-Host 'String text'

Результат работы скрипта:

1)

String text

String text

 

Версия на печать

Популярное