런타임에 PowerShell 변수에 텍스트를 임시 저장하는 경우 더 이상 필요하지 않을 때 메모리에서 변수 내용을 제거하는 가장 효율적인 방법은 무엇입니까?Powershell - "Clear-Item 변수 :"vs "Remove-Variable"
내가 사용한 적이 모두 Clear-Item variable:
및 Remove-Variable
하지만 얼마나 빨리 뭔가 이전과 메모리 내용을 제로 화시키는 대 후반으로 메모리에서 제거됩니까?
편집 : 내가 왜 묻는 지 조금 더 명확하게해야했습니다.
많은 응용 프로그램 VM (응용 프로그램이 서비스, 아웃소싱 개발자, 긴 이야기로 실행되지 않음)에 대한 RDP 로그인을 자동화하고 있습니다.
그래서 각 VM에 실행 세션을 그룹화하는 스크립트를 개발 중입니다.
자격 증명을 저장하는 스크립트 기능은 read-host
을 사용하여 호스트 이름을 묻는 메시지를 표시하고 get-credentials
은 도메인/사용자/암호를 선택합니다.
그런 다음 패스는 256 비트 키 (creds를 저장하고 그룹 실행을 실행하는 시스템/사용자에게 고유 한 런타임 키)를 사용하여 secure-string에서 변환됩니다.
VM 이름, 도메인, 사용자 및 암호화 된 패스는 파일에 저장됩니다. 세션을 시작할 때 세부 정보를 읽고 암호를 해독하고 cmdkey.exe
에 전달 된 세부 정보는 해당 VM에 대한 \generic:TERMSRV
자격 증명을 저장하고 plaintext 패스 변수를 지우고 해당 호스트에 mstsc를 실행하며 몇 초 후에 Windows 자격 증명 저장소에서 자격 증명을 제거합니다. (plaintext 이외의 다른 것으로 cmdkey.exe에 암호를 전달한 경우 RDP 세션에 잘못된 자격 증명이나 자격 증명이 제공되지 않음).
그럼, 질문, 가능한 한 짧은 시간 동안 메모리에 존재하는 일반 텍스트에서 암호가 필요합니다.
보안 담당자를 행복하게 유지하기 위해 스크립트 자체는 aes256으로 암호화되어 있으며 자체 ps 호스트가있는 C# 래퍼는 스크립트를 읽고 해독하고 실행하므로이를 실행하는 컴퓨터에 일반 텍스트 원본이 없습니다. (파일 공유에 암호화 된 소스가 너무 효과적이기 때문에 킬 스위치가있어 암호화 된 스크립트를이 앱이 비활성화되었다는 메시지를 표시하는 다른 것으로 간단하게 대체 할 수 있습니다)
사무실에있을 때 내 질문에 편집하여 속도가 중요한 이유를 확인해보십시오 :-) –
특별한 경우에 필자의 권장 사항은 변수를 덮어 쓰는 것입니다. [System.GC] :: Collect()로 gc를 트리거 할 수는 있지만 이것은 좋은 생각이 아닙니다. 그래서 변수를 덮어 쓰는 것이 가장 좋은 해결책이라고 생각합니다 :-) – LaPhi
은 감사의 말처럼 들립니다 .-) –