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”

 />

"@

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

Популярное