コード例 #1
0
ファイル: MoveRegistry.cs プロジェクト: tgiqfe/PSFile
        //  レジストリ値をコピー
        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);
                }
        }
コード例 #2
0
        /// <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)));
        }
コード例 #3
0
        /*
         * /// <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)));
        }
コード例 #4
0
ファイル: GetRegistry.cs プロジェクト: tgiqfe/PSFile
        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));
                    }
                }
            }
        }
コード例 #5
0
ファイル: TestRegistry.cs プロジェクト: tgiqfe/PSFile
        /// <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);
            }
        }
コード例 #6
0
        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);
                }
            }
        }
コード例 #7
0
        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);
                }
            }
        }
コード例 #8
0
        /// <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);
            }
        }