Comments 11
2022 год на дворе, в скриншотах Windows Vista и CMD-костылизация
Пингующийся хост не гарантия, что он к себе по административной шаре пустит.
Создавать папки в корне диска С:\ на каждый чих вместо служебных папок для этого предназначенных = варварство.
Использование групповых политик в данном случае наиболее гибкое, простое и наименее трудозатратное, безкостыльное решение.
Статью нужно доработать на кейс с рабочей группой, без домена :)
Доброго времени суток. Спасибо за критику. Год хоть и 2022, а на некоторых госпредприятиях можно и Windows 98 встретить=)(скрины взяты прямо с сайта microsoft, уж не обессутьте).
Это альтернативный вариант для тех, кому не хочется засорять контроллер домена лишними политиками, их настройками и грузить сеть постоянными обращениями к шаре, где лежит exe-шник с конфигом. Поставил один раз на нужные машины и забыл, до тех пор пока машину не переустановишь. Сами все подгрузят из своих недр, даже если сети не будет.
А что касается диска С:, если это так принципиально в корень что-либо пихать лишнее, никто не мешает изменить путь и указать, например, Program files. Про допуск по административной шаре, то возможно не лишним будет проверка доступности, но обычно для администратора домена шара на машины пользователей доступна, а если нет, то тогда GPO точно ваш вариант.
Для машин не в сети все также делается один раз:
Копируем папку с bginfo на машину не в сети.
Запускаем батник с одной строкой, который запишет переменную в реестр в ветку автозагрузки:
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Bginfo /t REG_SZ /d "C:\BGInfo\Bginfo64.exe C:\BGInfo\conf-bginfo.bgi /NOLICPROMPT /TIMER:0" /f
в скриншотах Windows Vista и CMD-костылизация
Лично у меня до сих пор в продакшне ХР имеется. Так что в висте ничего страшного нет.
Ну и cmd тоже используется для не слишком сложных скриптов, где не нужно какую-то сложную логику реализовывать и данные парсить.
Расшаривание корня диска, да еще и на запись - это вообще как и зачем?! За такие "костыли" надо бить по рукам, а ответственного за сие непотребство - макать головой в горячий капуччино!
DesktopInfo - думаю, лучшая замена bginfo.
Еще есть O&O DeskInfo, но он не такой богатый возможностями.
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$code = @'
using System.Runtime.InteropServices;
namespace Win32{
public class Wallpaper{
[DllImport("user32.dll", CharSet=CharSet.Auto)]
static extern int SystemParametersInfo (int uAction , int uParam , string lpvParam , int fuWinIni) ;
public static void SetWallpaper(string thePath){
SystemParametersInfo(20,0,thePath,3);
}
}
}
'@
add-type $code
$message=""
$message+="ComputerName:" + $env:COMPUTERNAME + [Environment]::NewLine
$message+="PROCESSOR_IDENTIFIER:" + $env:PROCESSOR_IDENTIFIER + [Environment]::NewLine
$message+="IP Address(es): "+(Get-NetIPConfiguration).IPv4Address.IpAddress + [Environment]::NewLine
$currentWallpaperPath = (Get-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name Wallpaper).Wallpaper
$width = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Width
$height = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Height
$proposedSize = New-Object System.Drawing.Size ([int]$width,[int]$height)
$fontStyle = "Calibri"
$fontSize = 16
$textfont = New-Object System.Drawing.Font ($fontStyle,$fontSize,[System.Drawing.FontStyle]::Regular)
$textBrush = New-Object Drawing.SolidBrush ([System.Drawing.Color]::White)
$bginfoPath = "$ENV:HOMEPATH\Pictures\bginfo.jpg"
$wallpaper= "$ENV:HOMEPATH\Pictures\wallpaper_original.jpg"
if (!(test-path $wallpaper)) { write-host "123"; Copy-Item $currentWallpaperPath $wallpaper }
$srcBmp = [System.Drawing.Bitmap]::FromFile($wallpaper)
$bmp = New-Object System.Drawing.Bitmap ($srcBmp,$width,$height)
$graphics = [System.Drawing.Graphics]::FromImage($bmp)
$graphics.TextRenderingHint = [System.Drawing.Text.TextRenderingHint]::AntiAlias
$srcBmp.Dispose()
$messageSize = [System.Windows.Forms.TextRenderer]::MeasureText($message,$textfont,$proposedSize)
$rec = New-Object System.Drawing.RectangleF (($width - $messageSize.Width - 20),20,($messageSize.Width + 20),$messageSize.Height)
$graphics.DrawString($message,$textfont,$textBrush,$rec)
$bmp.Save($bginfoPath,[System.Drawing.Imaging.ImageFormat]::Jpeg)
Set-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name wallpaperstyle -Value 2
Set-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name TileWallpaper -Value 0
[Win32.Wallpaper]::SetWallpaper((Get-Item $bginfoPath).FullName)
Пользуюсь только вот этим, на экран добавляется всё что может получить PoSH, в автозагрузке у пользователей powershell.exe bginfo.ps1
Честно говоря, набросал по быстрому, потырив куски кода у AWS https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch-download.html
Установка Bginfo на компьютеры в сети через командную строку Windows