Сценарій для створення файлу, який можна записувати всіма машинами в домені


0

Досі новачок у powershell, але мені було доручено розібратися, як створити та запустити скрипт powerhell на кожній робочій станції нашого домену, щоб він перетягував статус Bitlocker, а потім записував інформацію у файл CSV. Ми використовуємо labtech як нашу віддалену систему, тому ми хочемо запустити скрипт на кожній машині, оскільки наш інженер не хоче, щоб щось працювало на самому DC (спочатку збирався витягнути всі назви робочих станцій з OU, а потім перевірити стан на кожному з них ). Проблема полягає в тому, що, здається, перша машина, яка запустила скрипт, створює файл, а потім отримує право власності, фактично блокуючи всі інші машини, не записуючи у файл. Вдячні за будь-які пропозиції щодо спрямування мене в правильному напрямку. Дякую.

$Computer = hostname
Write-Host "Getting Bitlocker Status..." -ForegroundColor Green

function ErrorLog {
    $ErrorMessage = $_.Exception.Message
    $Date = Get-Date
    $Date ERROR: "$ErrorMessage" | out-file *path* -Append 
exit
}
try
{
$Status = manage-bde C: -cn $Computer -status | Select-String "Conversion Status:", "Percentage Encrypted:", "Protection Status:", "Lock Status:"
}
catch
{
    ErrorLog

}
finally
{
    $Date = Get-Date
    "$Date Successful BitLocker Check" | out-file *path* -Append
}

Write-Host "Sending info to CSV file..." -ForegroundColor Green

try{
    $ConvStatus = $Status.line | Select-String "Conversion Status:"
    $Percentage = $Status.line | Select-String "Percentage Encrypted:"
    $LockStatus = $Status.line | Select-String "Lock Status:"
    $Object = New-Object PSObject -Property @{
        ComputerName = $Computer
        ConversionStatus = $ConvStatus.ToString().trim("Conversion Status:")
        PercentageEncrypted = $Percentage.ToString().trim("Percentage Encrypted:")
        LockStatus = $LockStatus.ToString().trim("Lock Status:")
}

    $Object | Select-Object ComputerName, ConversionStatus, PercentageEncrypted, LockStatus | Export-CSV *path* -NoTypeInformation -Append -Force
}

catch {
    ErrorLog
}
finally
{
    $Date = Get-Date
    "$Date CSV written to $Path" | out-file *path* -Append

}

Якщо ви не можете запустити скрипт на постійному струмі, чи не можете його запустити на іншій машині? Це значно полегшить обслуговування. Тобто буде лише один сценарій, і не буде жодних проблем з дозволами на файли.
Беренд

Мій оригінальний скрипт витягнув усе ім'я робочої станції з OU Workstations OU і використовував цикл foreach, щоб перевірити стан на кожній машині та додати файл csv. На жаль, здається, що тільки в DC встановлена ​​функція бітлокера, оскільки інші сервери не розпізнають керування-bde. Наш інженер не хоче функцію бітлокера, встановлену на інших серверах ... навіть на сервері UTIL. Наші інші робочі станції працюють у різних підмережах, залежно від їх розташування, тому я не можу віддалено перевірити стан всіх машин із своєї робочої станції. Здається, я можу застряг
mwh87

Відповіді:


1

Наявність одночасного запису всіх комп’ютерів в один і той же файл не є хорошим рішенням. Було б набагато краще запитувати статус Bitlocker усіх робочих станцій з одного центрального комп'ютера домену.

Команда для використання - керування-bde , яка використовується, наприклад, як:

manage-bde -status -computername WS12345 C:

Що може дати цей вихід:

зображення

Ви можете написати сценарій, який збирає інформацію в один файл CSV.

Список літератури:

  • Перевірка стану шифрування віддалених комп'ютерів Windows
  • Сценарій Technet PowerShell для віддаленого запиту кожного комп'ютера, що знаходиться у вказаному OU (використовуючи management-bde.exe), щоб визначити, чи захищений або вимкнений захист BitLocker, та повідомити про це відповідно у кольоровому виведенні. Результати будуть збережені у файлі CSV та надіслані електронною поштою вказаному адресату. Просто змініть необхідні змінні за потребою та запустіть.
  • Сценарій Technet PowerShell, щоб отримати статус шифрування BitLocker для декількох комп'ютерів.

1
+1 Строго кажучи , це не відповідь на питання, але я думаю , що це пояснює те , що ОП має робити. ( xyproblem.info )
Беренд

Це був мій початковий план, проте мені потрібно запустити на сервері, оскільки всі робочі станції знаходяться в різних підмережах, тому я не можу це запускати віддалено зі своєї робочої станції. Наш інженер не дозволяє встановити функцію бітлокера на сервері UTIL і не дозволить мені запустити сценарій на постійному струмі. Ось чому я придумав цей брудний спосіб намагатися отримати звіт
mwh87

Ви можете запустити сценарій один раз на кожному сегменті - його не потрібно виконувати з постійного струму. Потім об’єднайте окремі файли CSV в один.
harrymc

@Berend: Дякуємо за приємне посилання - одне на згадку.
harrymc

0

Ви можете просто зателефонувати на icacls, щоб надати повний доступ усім:

icacls myfile.csv /grant everyone:F

Зауважте, що всі залежать від локальної мови, тому якщо ви не використовуєте англійську мову, вам слід використовувати інше ім’я.

Ось посилання на статтю, яка описує, як це зробити шляхом Powershell. Це трохи довше, і в цьому випадку я вважаю за краще сам. Я трохи змінив приклад із цієї сторінки:

$Path = 'myfile.csv'
$Acl = (Get-Item $Path).GetAccessControl('Access')
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule('Everyone', 'FullControl', 'Allow')
$Acl.SetAccessRule($Ar)
Set-Acl -path $Path -AclObject $Acl

До речі, ви думали, що буде, якщо два ПК записуватимуться у цей файл одночасно?


-1

Мені вдалося переконати нашого інженера внести деякі зміни, і зараз я успішно запускаю свій оригінальний сценарій через наш сервер UTIL. Дякуємо за допомогу всім!


Ви відповідаєте, було б корисніше майбутнім читачам, якщо ви задокументуєте зміни, які зробив ваш інженер - інакше це нікому не допоможе.
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.