Podczas tymczasowego przechowywania tekstu w zmiennych programu Power Shell w czasie wykonywania, jaki jest najskuteczniejszy sposób usuwania zawartości zmiennych z pamięci, gdy nie są już potrzebne?Powershell - "Clear-Item zmienna:" kontra "Remove-Variable"
Użyłem zarówno Clear-Item variable:
, jak i Remove-Variable
, ale jak szybko coś zostanie usunięte z pamięci z tym ostatnim, a zerować zawartość pamięci z poprzednią?
EDYCJA: Powinienem był trochę wyjaśnić, dlaczego pytam.
Automatyzuję logowanie RDP dla kilku maszyn wirtualnych aplikacji (aplikacja nie działa jako usługa, outsourcing deweloperów, długa historia).
Opracowuję więc (w dużym stopniu skończony) skrypt do grupowania sesji uruchamiania na każdą z maszyn wirtualnych.
Pomysł polega na tym, że funkcja skryptu przechowująca referencje używa read-host
, aby zapytać o nazwę hosta, a następnie get-credentials
, aby odebrać domenę/użytkownika/hasło.
Przejście jest następnie konwertowane z bezpiecznego ciągu za pomocą klucza 256-bitowego (klucz runtime unikalny dla komputera/użytkownika, który przechowuje kredyty i uruchamia uruchomienie grupy).
Nazwa maszyny wirtualnej, domena, użytkownik i szyfrowane hasło są przechowywane w pliku. Podczas uruchamiania sesji szczegóły są odczytywane, odszyfrowywane, dane przekazywane do cmdkey.exe
, aby przechowywać poświadczenia \generic:TERMSRV
dla tej maszyny wirtualnej, wyczyścić zmienną przepustową tekstową, uruchomić mstsc dla tego hosta, kilka sekund później usunąć poświadczenie z magazynu referencji systemu Windows. (Jeśli przekazałem hasło do cmdkey.exe jako coś innego niż zwykły tekst, sesja RDP otrzyma niepoprawne dane lub nie będzie żadnych poświadczeń).
Tak więc, stąd pytanie, potrzebuję hasła W trybie zwykłego tekstu, aby istniało w pamięci tak krótko, jak to możliwe.
Aby zapewnić bezpieczeństwo użytkownikom, sam skrypt jest zaszyfrowany aes256, a opakowanie C# z własnym hostem ps odczytuje, odszyfrowuje i uruchamia skrypt, więc nie ma żadnego źródła tekstu w postaci zwykłego tekstu na komputerze, który to uruchamia. (Zaszyfrowane źródło w udziale plikowym tak skutecznie mam przełącznik zabicia, mogę po prostu zastąpić zaszyfrowany skrypt innym wyświetlającym komunikat, że ta aplikacja została wyłączona)
Będę się z tym bawić po powrocie do biura, zobacz EDYCJA na moje pytanie, aby zobaczyć, dlaczego prędkość ma znaczenie :-) –
W twoim szczególnym przypadku moim zaleceniem jest nadpisanie zmiennej. Możesz wywołać gc za pomocą [System.GC] :: Collect(), ale nie jest to dobry pomysł. Myślę więc, że zastąpienie zmiennej jest najlepszym rozwiązaniem :-) – LaPhi
brzmi jak droga, dzięki :-) –