Wciąż nowy w PowerShell, ale miałem zadanie dowiedzieć się, jak utworzyć i uruchomić skrypt PowerShell na każdej stacji roboczej w naszej domenie, aby pobierał status Bitlocker, a następnie zapisywał informacje w pliku CSV. Używamy labtech jako naszego zdalnego systemu, więc chcemy uruchomić skrypt na każdej maszynie, ponieważ nasz inżynier nie chce, aby cokolwiek działało na samym DC (pierwotnie zamierzał pobrać wszystkie nazwy stacji roboczych z jednostki organizacyjnej, a następnie sprawdzić status na każdym z nich ). Problem polega na tym, że wydaje się, że pierwsza maszyna, na której skrypt działa, tworzy plik, a następnie przejmuje własność, skutecznie blokując wszystkie inne maszyny przed zapisem do pliku. Doceniamy wszelkie sugestie, aby skierować mnie w dobrym kierunku. Dzięki.
$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
}
źródło
Odpowiedzi:
Jednoczesne zapisywanie wszystkich komputerów w tym samym pliku nie jest dobrym rozwiązaniem. O wiele lepiej byłoby sprawdzić status Bitlockera na wszystkich stacjach roboczych z jednego centralnego komputera w domenie.
Polecenie do użycia to manage-bde , używane na przykład jako:
Co może dać ten wynik:
Możesz napisać skrypt, który zbiera informacje w jednym pliku CSV.
Referencje:
źródło
Możesz po prostu zadzwonić do icacls, aby zapewnić pełny dostęp wszystkim:
Pamiętaj, że każdy jest zależny od regionu, więc jeśli nie używasz angielskiego, powinieneś użyć innej nazwy.
Oto link do artykułu opisującego, jak to zrobić w PowerShell. Jest nieco dłuższy, aw tym przypadku sam wolałbym powyższy oneliner. Trochę zmodyfikowałem przykład z tej strony:
BTW, czy zastanawiałeś się, co się stanie, jeśli dwa komputery będą jednocześnie zapisywać w tym pliku?
źródło
Udało mi się przekonać naszego inżyniera do wprowadzenia pewnych zmian i teraz z powodzeniem uruchamiam mój oryginalny skrypt za pośrednictwem naszego serwera UTIL. Dzięki za pomoc wszystkim!
źródło