PowerShell - проверка INI-файла, проблемы с журналом - PullRequest
0 голосов
/ 18 апреля 2019

Возникли проблемы с принудительным отключением двух групп VNC-серверов. Я устраняю проблему, и я хочу сделать один шаг - следить за файлом config .ini. Я относительно новичок в PowerShell и не могу заставить это работать.

По сути, я хочу, чтобы скрипт проверял содержимое файла конфигурации (ultravnc.ini) и проверял, является ли строка «MSLogonRequired = 1» в этом файле. Если нет, я хочу добавить дату в файл журнала. Со временем я сделаю еще кое-что, но это моя основная потребность. В настоящее время он не работает.

# Variables 
$outputFile = "vncMSLogonErrors.txt" 
$vncConfig = "C:\Program Files (x86)\uvnc bvba\UltraVNC\ultravnc.ini"
$checkString = "MSLogonRequired=1"


# Get VNC Config File, check for MS Logon setting, write date to file if missing
Get-Content $vncConfig
If (-not $checkString)
   {Add-Content $outputFile -Value $(Get-Date)}

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Полезный ответ Шамуса Берубе концептуально прост и работает хорошо, если вы можете предположить:

  • что интересующая линия в точности равна MSLogonRequired=1, без изменений в пробелах.

  • что если файл INI подразделяется на несколько секций (например, [admin]), то имя ключа MSLogonRequired является уникальным среди секций, чтобы предотвратить ложные срабатывания.

Поэтому обычно предпочтительнее использовать выделенную команду разбора INI-файла ; к сожалению:

  • PowerShell не поставляется с одним , хотя добавление одного обсуждается
  • тем временем вы можете использовать популярный PsIni сторонний модуль (см. этот ответ для получения информации об установке и справочной информации):

Использование функции Get-IniContent модуля PsIni:

Примечание. Исходя из документации INI-файла UltraVNC , код предполагает, что запись MSLogonRequired находится внутри секции [admin] файла INI.

# Variables 
$outputFile = "vncMSLogonErrors.txt" 
$vncConfig = "C:\Program Files (x86)\uvnc bvba\UltraVNC\ultravnc.ini"

# Check the VNC Config File to see if the [admin] section's 'MSLogonRequired'
# entry, if present, has value '1'.
if ((Get-IniContent $vncConfig).admin.MSLogonRequired -ne '1') {
   Add-Content $outputFile -Value (Get-Date) 
}
1 голос
/ 18 апреля 2019
# Variables 
$outputFile = "vncMSLogonErrors.txt" 
$vncConfig = "C:\Program Files (x86)\uvnc bvba\UltraVNC\ultravnc.ini"
$checkString = "MSLogonRequired=1"

if ((get-content $vncconfig) -notcontains $checkString)) { Add-Content $outputFile -Value $(Get-Date) }
...