Skrypt do utworzenia pliku, który można zapisać na wszystkich komputerach w domenie

0

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

}
mwh87
źródło
Jeśli nie możesz uruchomić skryptu na DC, czy nie możesz uruchomić go na innym komputerze? Ułatwi to utrzymanie. Tzn. Będzie tylko jeden skrypt i nie będzie żadnych problemów z uprawnieniami do plików.
Berend
Mój oryginalny skrypt pobierał wszystkie nazwy stacji roboczych z jednostki organizacyjnej stacji roboczych i używał pętli foreach, aby sprawdzić status na każdej maszynie i dołączyć plik csv. Niestety wydaje się, że tylko DC ma zainstalowaną funkcję Bitlocker, ponieważ inne serwery nie rozpoznają zarządzania-bde. Nasz inżynier nie chce, aby funkcja Bitlocker była instalowana na innych serwerach ... nawet na serwerze UTIL. Nasze inne stacje robocze znajdują się w różnych podsieciach w zależności od ich lokalizacji, więc nie mogę zdalnie sprawdzić statusu na wszystkich komputerach z mojej stacji roboczej. Wygląda na to, że utknąłem
mwh87

Odpowiedzi:

1

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:

manage-bde -status -computername WS12345 C:

Co może dać ten wynik:

wizerunek

Możesz napisać skrypt, który zbiera informacje w jednym pliku CSV.

Referencje:

  • Sprawdzanie stanu szyfrowania zdalnych komputerów z systemem Windows
  • Skrypt Technet PowerShell do zdalnego odpytywania każdego komputera znalezionego w określonej jednostce organizacyjnej (przy użyciu manage-bde.exe) w celu ustalenia, czy ochrona BitLocker jest włączona czy wyłączona, i odpowiednio raportuj w wynikach oznaczonych kolorami. Wyniki zostaną zapisane w pliku CSV i wysłane pocztą e-mail do określonych odbiorców. Wystarczy zmienić wymagane zmienne zgodnie z wymaganiami i uruchomić.
  • Skrypt Technet PowerShell, aby uzyskać status szyfrowania funkcją BitLocker dla wielu komputerów.
harrymc
źródło
1
+1 Ściśle mówiąc nie jest to odpowiedź na pytanie, ale myślę, że to ma wyjaśnić, co OP musi zrobić. ( xyproblem.info )
Berend
To był mój pierwotny plan, jednak muszę uruchomić na serwerze, ponieważ wszystkie stacje robocze znajdują się w różnych podsieciach, więc nie mogę uruchomić tego zdalnie z mojej stacji roboczej. Nasz inżynier nie pozwala na zainstalowanie funkcji Bitlocker na serwerze UTIL i nie pozwala mi na uruchomienie skryptu na DC. Właśnie dlatego wymyśliłem ten brudny sposób próby uzyskania raportu
mwh87,
Możesz uruchomić skrypt raz dla każdego segmentu - nie musi on być uruchamiany z kontrolera domeny. Następnie scal poszczególne pliki CSV w jeden.
harrymc
@Berend: Dzięki za fajny link - jeden do zapamiętania.
harrymc
0

Możesz po prostu zadzwonić do icacls, aby zapewnić pełny dostęp wszystkim:

icacls myfile.csv /grant everyone:F

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:

$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

BTW, czy zastanawiałeś się, co się stanie, jeśli dwa komputery będą jednocześnie zapisywać w tym pliku?

Berend
źródło
-1

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!

mwh87
źródło
Odpowiedź byłaby przydatna dla przyszłych czytelników, jeśli udokumentujesz zmiany dokonane przez inżyniera - w przeciwnym razie tak naprawdę nikomu to nie pomoże.
DavidPostill