// レジストリ値をコピー private void CopyRegistryValue(string source, string destination, string name, string destinationName) { using (RegistryKey sourceKey = RegistryControl.GetRegistryKey(source, false, true)) using (RegistryKey destinationKey = RegistryControl.GetRegistryKey(destination, true, true)) { RegistryValueKind valueKind = sourceKey.GetValueKind(name); object sourceValue = valueKind == RegistryValueKind.ExpandString ? sourceKey.GetValue(name, null, RegistryValueOptions.DoNotExpandEnvironmentNames) : sourceKey.GetValue(name); if (destinationName == null) { destinationName = name; } // テスト自動生成 _generator.RegistryName(source, name); _generator.RegistryName(source, destinationName); _generator.RegistryValue(source, destinationName, RegistryControl.RegistryValueToString(sourceKey, name, valueKind, true)); destinationKey.SetValue(destinationName, sourceValue, valueKind); // コピー元を削除する場合 sourceKey.DeleteValue(name); } }
/// <summary> /// レジストリ値をDOSコマンドへコンバート /// </summary> /// <param name="targetKey"></param> /// <param name="valueName"></param> /// <returns></returns> private string CreateDosCommand(RegistryKey targetKey, string valueName) { RegistryValueKind valueKind = targetKey.GetValueKind(valueName); string regValue = ""; switch (valueKind) { case RegistryValueKind.String: case RegistryValueKind.MultiString: case RegistryValueKind.ExpandString: case RegistryValueKind.Binary: regValue = string.Format("\"{0}\"", RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true)); break; case RegistryValueKind.DWord: case RegistryValueKind.QWord: regValue = RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true); break; case RegistryValueKind.None: default: break; } return(string.Format( "reg add \"{0}\" {1} /d {2} /t {3} /f", targetKey, valueName == "" ? "/ve" : $"/v \"{valueName}\"", regValue, RegistryControl.ValueKindToString(valueKind))); }
/* * /// <summary> * /// レジストリキーをSetコマンドへコンバート * /// </summary> * /// <returns></returns> * private List<string> RegKey_ToSetCommand() * { * List<string> commandList = new List<string>(); * * Action<RegistryKey> measureRegistry = null; * measureRegistry = (targetKey) => * { * string[] valueNames = targetKey.GetValueNames(); * if (valueNames.Length > 0) * { * // レジストリ値の設定用コマンド * foreach (string valueName in targetKey.GetValueNames()) * { * RegistryValueKind valueKind = targetKey.GetValueKind(valueName); * string regValue = RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true); * switch (RegistryControl.ValueKindToString(valueKind)) * { * case Item.REG_SZ: * case Item.REG_MULTI_SZ: * case Item.REG_EXPAND_SZ: * case Item.REG_BINARY: * regValue = string.Format("-Value \"{0}\" ", regValue); * break; * case Item.REG_DWORD: * case Item.REG_QWORD: * regValue = string.Format("-Value {0} ", regValue); * break; * case Item.REG_NONE: * regValue = ""; * break; * } * commandList.Add(string.Format( * "Set-Registry -Path \"{0}\" -Name \"{1}\" {2}-Type {3}", * ReplaceDoller(targetKey.ToString()), * ReplaceDoller(valueName), * ReplaceDoller(regValue), * RegistryControl.ValueKindToString(valueKind))); * * } * } * else * { * // レジストリ値設定無し。空レジストリキー作成 * commandList.Add(string.Format("New-Registry -Path \"{0}\"", * ReplaceDoller(targetKey.ToString()))); * } * * // 配下のレジストリキーを再帰的にチェック * if (Recursive) * { * foreach (string keyName in targetKey.GetSubKeyNames()) * { * using (RegistryKey subTargetKey = targetKey.OpenSubKey(keyName, false)) * { * measureRegistry(subTargetKey); * } * } * } * }; * using (RegistryKey regKey = RegistryControl.GetRegistryKey(RegistryPath, false, false)) * { * measureRegistry(regKey); * } * * return commandList; * } */ /* * /// <summary> * /// レジストリ値をSetコマンドへコンバート * /// </summary> * /// <returns></returns> * private List<string> RegValue_ToSetCommand() * { * List<string> commandList = new List<string>(); * * using (RegistryKey targetKey = RegistryControl.GetRegistryKey(RegistryPath, false, false)) * { * RegistryValueKind valueKind = targetKey.GetValueKind(Name); * string regValue = RegistryControl.RegistryValueToString(targetKey, Name, valueKind, true); * switch (RegistryControl.ValueKindToString(valueKind)) * { * case Item.REG_SZ: * case Item.REG_MULTI_SZ: * case Item.REG_EXPAND_SZ: * case Item.REG_BINARY: * regValue = string.Format("-Value \"{0}\" ", regValue); * break; * case Item.REG_DWORD: * case Item.REG_QWORD: * regValue = string.Format("-Value {0} ", regValue); * break; * case Item.REG_NONE: * regValue = ""; * break; * } * commandList.Add(string.Format( * "Set-Registry -Path \"{0}\" -Name \"{1}\" {2}-Type {3}", * ReplaceDoller(targetKey.ToString()), * ReplaceDoller(Name), * ReplaceDoller(regValue), * RegistryControl.ValueKindToString(valueKind))); * } * * return commandList; * } */ /* * /// <summary> * /// レジストリキーをDosコマンドへコンバート * /// </summary> * /// <returns></returns> * private List<string> RegKey_ToDosCommand() * { * List<string> commandList = new List<string>(); * * Action<RegistryKey> measureRegistry = null; * measureRegistry = (targetKey) => * { * string[] valueNames = targetKey.GetValueNames(); * if (valueNames.Length > 0) * { * // レジストリ値の設定用コマンド * foreach (string valueName in targetKey.GetValueNames()) * { * RegistryValueKind valueKind = targetKey.GetValueKind(valueName); * string regValue = RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true); * switch (RegistryControl.ValueKindToString(valueKind)) * { * case Item.REG_SZ: * case Item.REG_MULTI_SZ: * case Item.REG_EXPAND_SZ: * case Item.REG_BINARY: * regValue = string.Format("\"{0}\"", regValue); * break; * case Item.REG_DWORD: * case Item.REG_QWORD: * regValue = string.Format("{0}", regValue); * break; * case Item.REG_NONE: * regValue = ""; * break; * } * commandList.Add(string.Format( * "reg add \"{0}\" /v \"{1}\" /d {2} /t {3} /f", * ReplaceDoller(targetKey.ToString()), * ReplaceDoller(valueName), * ReplaceDoller(regValue), * RegistryControl.ValueKindToString(valueKind))); * * } * } * else * { * // レジストリ値設定無し。空レジストリキー作成 * commandList.Add(string.Format("reg add \"{0}\" /ve /f", * ReplaceDoller(targetKey.ToString()))); * commandList.Add(string.Format("reg delete \"{0}\" /ve /f", * ReplaceDoller(targetKey.ToString()))); * } * * // 配下のレジストリキーを再帰的にチェック * if (Recursive) * { * foreach (string keyName in targetKey.GetSubKeyNames()) * { * using (RegistryKey subTargetKey = targetKey.OpenSubKey(keyName, false)) * { * measureRegistry(subTargetKey); * } * } * } * }; * using (RegistryKey regKey = RegistryControl.GetRegistryKey(RegistryPath, false, false)) * { * measureRegistry(regKey); * } * * return commandList; * } */ /* * /// <summary> * /// レジストリ値をDosコマンドへコンバート * /// </summary> * /// <returns></returns> * private List<string> RegValue_ToDosCommand() * { * List<string> commandList = new List<string>(); * * using (RegistryKey targetKey = RegistryControl.GetRegistryKey(RegistryPath, false, false)) * { * RegistryValueKind valueKind = targetKey.GetValueKind(Name); * string regValue = RegistryControl.RegistryValueToString(targetKey, Name, valueKind, true); * switch (RegistryControl.ValueKindToString(valueKind)) * { * case Item.REG_SZ: * case Item.REG_MULTI_SZ: * case Item.REG_EXPAND_SZ: * case Item.REG_BINARY: * regValue = string.Format("\"{0}\"", regValue); * break; * case Item.REG_DWORD: * case Item.REG_QWORD: * regValue = string.Format("{0}", regValue); * break; * case Item.REG_NONE: * regValue = ""; * break; * } * * commandList.Add(string.Format( * "reg add \"{0}\" /v \"{1}\" /d {2} /t {3} /f", * ReplaceDoller(targetKey.ToString()), * ReplaceDoller(Name), * ReplaceDoller(regValue), * RegistryControl.ValueKindToString(valueKind))); * } * * return commandList; * } */ /// <summary> /// レジストリ値をSetコマンドへコンバート /// </summary> /// <param name="targetKey"></param> /// <param name="valueName"></param> /// <returns></returns> private string CreateSetCommand(RegistryKey targetKey, string valueName) { RegistryValueKind valueKind = targetKey.GetValueKind(valueName); string regValue = ""; switch (valueKind) { case RegistryValueKind.String: case RegistryValueKind.MultiString: case RegistryValueKind.ExpandString: case RegistryValueKind.Binary: regValue = string.Format("\"{0}\"", RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true)); break; case RegistryValueKind.DWord: case RegistryValueKind.QWord: regValue = RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true); break; case RegistryValueKind.None: default: break; } return(string.Format( "Set-Registry -Path \"{0}\" -Name \"{1}\" -Value {2} -Type {3}", ReplaceDoller(targetKey.ToString()), ReplaceDoller(valueName), ReplaceDoller(regValue), RegistryControl.ValueKindToString(valueKind))); }
protected override void ProcessRecord() { if (Name == null) { // レジストリキーの取得 if (ReturnReadonlyKey) { WriteObject(RegistryControl.GetRegistryKey(RegistryPath, false, false)); } else if (ReturnWritableKey) { WriteObject(RegistryControl.GetRegistryKey(RegistryPath, true, true)); } else { using (RegistryKey regKey = RegistryControl.GetRegistryKey(RegistryPath, false, false)) { WriteObject(new RegistrySummary(regKey, IgnoreSecurity, IgnoreValues), true); } } } else { // レジストリ値の取得 using (RegistryKey regKey = RegistryControl.GetRegistryKey(RegistryPath, false, false)) { RegistryValueKind valueKind = regKey.GetValueKind(Name); if (RawValue) { switch (valueKind) { case RegistryValueKind.ExpandString: WriteObject(NoResolv ? regKey.GetValue(Name, "", RegistryValueOptions.DoNotExpandEnvironmentNames) : regKey.GetValue(Name)); break; case RegistryValueKind.None: WriteObject(null); break; default: WriteObject(regKey.GetValue(Name)); break; } } else { WriteObject(RegistryControl.RegistryValueToString(regKey, Name, valueKind, NoResolv)); } } } }
/// <summary> /// レジストリのパラメータ名/種類/値のチェック /// </summary> /// <param name="regKey">RegistryKeyインスタンス</param> private void CheckRegValue(RegistryKey regKey) { if (Name == null) { Console.Error.WriteLine("Name無し: {0}", Name); return; } try { RegistryValueKind valueKind = regKey.GetValueKind(Name); // Name用チェック if (Target == Item.NAME) { retValue = true; return; } // Type用チェック if (Target == Item.TYPE) { string tempVlueKind = RegistryControl.ValueKindToString(valueKind); retValue = tempVlueKind == Type; if (!retValue) { Console.Error.WriteLine( "Type不一致: {0} / {1}", Type, tempVlueKind); } return; } // Value用チェック if (valueKind == RegistryValueKind.Binary) { Value = Value.ToUpper(); } retValue = RegistryControl.RegistryValueToString(regKey, Name, valueKind, true) == Value; if (!retValue) { Console.Error.WriteLine("Value不一致 ({0}): {1}", RegistryControl.ValueKindToString(valueKind), Value); Console.WriteLine(RegistryControl.RegistryValueToString(regKey, Name, valueKind, true)); } } catch (IOException) { // Name,Type,Valueの条件で名前の有無チェック Console.Error.WriteLine("Name無し: {0}", Name); } }
protected override void ProcessRecord() { if (Name == null) { // レジストリキーの取得 WriteObject(new RegistryKeyInfo(Path, true)); } else { // レジストリ値の取得 try { using (RegistryKey regKey = RegistryControl.GetRegistryKey(Path, false, false)) { RegistryValueKind valueKind = regKey.GetValueKind(Name); if (RawValue) { switch (valueKind) { case RegistryValueKind.ExpandString: WriteObject(NoResolv ? regKey.GetValue(Name, "", RegistryValueOptions.DoNotExpandEnvironmentNames) : regKey.GetValue(Name)); break; case RegistryValueKind.None: WriteObject(null); break; default: WriteObject(regKey.GetValue(Name)); break; } } else { WriteObject(RegistryControl.RegistryValueToString(regKey, Name, valueKind, NoResolv)); /* * switch (valueKind) * { * case RegistryValueKind.String: * case RegistryValueKind.DWord: * case RegistryValueKind.QWord: * WriteObject(regKey.GetValue(Name)); * break; * case RegistryValueKind.ExpandString: * WriteObject(NoResolv ? * regKey.GetValue(Name, "", RegistryValueOptions.DoNotExpandEnvironmentNames) : * regKey.GetValue(Name)); * break; * case RegistryValueKind.Binary: * //WriteObject(RegistryControl.RegBinaryBytesToString(regKey.GetValue(Name) as byte[])); * WriteObject(RegistryControl.RegistryValueToString(regKey, Name, valueKind, true)); * break; * case RegistryValueKind.MultiString: * WriteObject( * string.Join("\\0", regKey.GetValue(Name) as string[])); * break; * case RegistryValueKind.None: * //WriteObject(regKey.GetValue(Name)); * WriteObject(null); * break; * } */ } } } catch (Exception e) { TextWriter errorWriter = Console.Error; errorWriter.WriteLine(e.Message); } } }
private void SearchKeyNameValue(RegistryKey targetKey) { RegistryKeyNameValue regKNV = new RegistryKeyNameValue(); bool isAdded = false; // レジストリキーをチェック if (hasPath && ( Path.GetFileName(targetKey.ToString()).IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) >= 0)) { regKNV.AddKey(targetKey); isAdded = true; } // レジストリ値をチェック foreach (string valueName in targetKey.GetValueNames()) { RegistryValueKind valueKind = targetKey.GetValueKind(valueName); // 名前チェック if (hasName && (valueName.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) >= 0)) { regKNV.AddValue( targetKey, valueName, RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true)); isAdded = true; continue; } // 値チェック if (hasValue && ( valueKind == RegistryValueKind.String || valueKind == RegistryValueKind.MultiString || valueKind == RegistryValueKind.ExpandString)) { string tempValueName = string.IsNullOrEmpty(valueName) ? "(既定)" : valueName; string tempStringValue = RegistryControl.RegistryValueToString(targetKey, valueName, valueKind, true); if (tempStringValue.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) >= 0) { regKNV.AddValue(targetKey, tempValueName, tempStringValue); isAdded = true; } } } if (isAdded) { if (isText) { Console.WriteLine(regKNV); } else { KNVList.Add(regKNV); } } foreach (string keyName in targetKey.GetSubKeyNames()) { using (RegistryKey subTargetKey = targetKey.OpenSubKey(keyName, false)) { SearchKeyNameValue(subTargetKey); } } }
/// <summary> /// レジストリのパラメータ名/種類/値のチェック /// 長かったので独立したメソッドに /// </summary> /// <param name="regKey">RegistryKeyインスタンス</param> private void CheckRegValue(RegistryKey regKey) { if (Name == null) { Console.Error.WriteLine("Name無し: {0}", Name); return; } try { RegistryValueKind valueKind = regKey.GetValueKind(Name); // Name用チェック if (Target == Item.NAME) { retValue = true; return; } // Type用チェック if (Target == Item.TYPE) { retValue = valueKind == RegistryControl.StringToValueKind(Type); if (!retValue) { Console.Error.WriteLine( "Type不一致: {0} / {1}", Type, RegistryControl.ValueKindToString(valueKind)); } return; } // Value用チェック if (valueKind == RegistryValueKind.Binary) { Value = Value.ToUpper(); } retValue = RegistryControl.RegistryValueToString(regKey, Name, valueKind, true) == Value; if (!retValue) { Console.Error.WriteLine("Value不一致 ({0}): {1}", RegistryControl.ValueKindToString(valueKind), Value); Console.WriteLine(RegistryControl.RegistryValueToString(regKey, Name, valueKind, true)); } /* * switch (valueKind) * { * case RegistryValueKind.String: * retValue = regKey.GetValue(Name) as string == Value; * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_SZ): {0}", Value); * } * break; * case RegistryValueKind.Binary: * retValue = RegistryControl.RegistryValueToString(regKey, Name, valueKind, true) == Value.ToUpper(); * //retValue = RegistryControl.RegBinaryBytesToString(regKey.GetValue(Name) as byte[]) == Value.ToUpper(); * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_BINARY): {0}", Value); * } * break; * case RegistryValueKind.DWord: * retValue = (int)regKey.GetValue(Name) == int.Parse(Value); * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_DWORD): {0}", Value); * } * break; * case RegistryValueKind.QWord: * retValue = (long)regKey.GetValue(Name) == long.Parse(Value); * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_QWORD): {0}", Value); * } * break; * case RegistryValueKind.MultiString: * retValue = string.Join("\\0", regKey.GetValue(Name) as string[]) == Value; * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_MULTI_SZ): {0}", Value); * } * break; * case RegistryValueKind.ExpandString: * retValue = regKey.GetValue(Name, "", RegistryValueOptions.DoNotExpandEnvironmentNames) as string == Value; * if (!retValue) * { * Console.Error.WriteLine("Value不一致 (REG_EXPAND_SZ): {0}", Value); * } * break; * case RegistryValueKind.None: * retValue = string.IsNullOrEmpty(Value); * break; * } */ } catch (IOException) { // Name,Type,Valueの条件で名前の有無チェック Console.Error.WriteLine("Name無し: {0}", Name); } }