Все еще новичок в powershell, но мне было поручено выяснить, как создать и запустить скрипт powershell на каждой рабочей станции в нашем домене, чтобы он получал статус 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

}

3 ответа3

1

Одновременная запись всех компьютеров в один и тот же файл не является хорошим решением. Было бы гораздо предпочтительнее запрашивать состояние Bitlocker всех рабочих станций с одного центрального компьютера домена.

Используемая команда - manage-bde, например, такая как:

manage-bde -status -computername WS12345 C:

Что может дать такой вывод:

образ

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

Рекомендации :

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

Вы можете просто позвонить в icacls, чтобы предоставить всем полный доступ:

icacls myfile.csv /grant everyone:F

Обратите внимание, что все зависит от локали, поэтому, если вы не используете английский, вы должны использовать другое имя.

Вот ссылка на статью, которая описывает, как сделать это способом Powershell. Это немного дольше, и в этом случае я бы предпочел сам вышеупомянутый oneliner. Я немного изменил пример с этой страницы:

$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-сервер. Спасибо всем за помощь!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .