この例では実行前に C:\temp フォルダを作成しておく必要があります。
$provider = New-Object Microsoft.CSharp.CSharpCodeProvider $params = New-Object System.CodeDom.Compiler.CompilerParameters $params.GenerateInMemory = $True $params.TreatWarningsAsErrors = $True $refs = "System.dll","mscorlib.dll" $params.ReferencedAssemblies.AddRange($refs) # C Sharp $txtCode = ' using System; using System.IO; using System.Security.Cryptography; using System.Text; public class CryptTest { public readonly char[] trim_password; public readonly byte[] crypt_key; public readonly byte[] crypt_IV; public const string TRIM_PASSWORD = "\t\r\n\0"; public const string SECRET_PATH = @"C:\temp\sec-key.txt"; public CryptTest(){ trim_password = TRIM_PASSWORD.ToCharArray(); if(File.Exists(SECRET_PATH)){ string read_str = File.ReadAllText(SECRET_PATH); string[] temp_str1 = read_str.Split(new char[]{(char)10}, 2); crypt_key = Convert.FromBase64String(temp_str1[0]); crypt_IV = Convert.FromBase64String(temp_str1[1]); }else{ RC2CryptoServiceProvider rc2CSP = new RC2CryptoServiceProvider(); crypt_key = rc2CSP.Key; crypt_IV = rc2CSP.IV; File.WriteAllText(SECRET_PATH, Convert.ToBase64String(crypt_key)+"\n"+Convert.ToBase64String(crypt_IV)); } } public string Encrypt(string plaintext){ MemoryStream ms = new MemoryStream(); RC2 rc2 = new RC2CryptoServiceProvider(); CryptoStream s = new CryptoStream(ms, rc2.CreateEncryptor(crypt_key, crypt_IV), CryptoStreamMode.Write); byte [] p = Encoding.UTF8.GetBytes(plaintext); s.Write(p,0,p.Length); s.FlushFinalBlock(); return Convert.ToBase64String(ms.ToArray()); } public string Decrypt(string ciphertext){ MemoryStream ms = new MemoryStream(); RC2 rc2 = new RC2CryptoServiceProvider(); CryptoStream s = new CryptoStream(ms, rc2.CreateDecryptor(crypt_key, crypt_IV), CryptoStreamMode.Write); byte [] c = Convert.FromBase64String(ciphertext); s.Write(c, 0, c.Length); s.FlushFinalBlock(); return Encoding.UTF8.GetString(ms.GetBuffer()).Trim(trim_password); } } ' $results = $provider.CompileAssemblyFromSource($params, $txtCode) $results.Errors $mAssembly = $results.CompiledAssembly $i = $mAssembly.CreateInstance("CryptTest") $c = $i.Encrypt("!p@ssw0rd") $c $r = $i.Decrypt($c) $r