Example #1
0
        protected override void ProcessRecord()
        {
            var setting = new Class.MemoryDump.PagingFileSetting();

            setting.Load();

            //  参考
            //  https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-logicaldisk
            const int FIXED_HARD_DISK_MEDIA = 12;

            //  ローカルドライブを取得
            var localDrives = new List <string>();

            foreach (ManagementObject mo in new ManagementClass("Win32_LogicalDisk").
                     GetInstances().
                     OfType <ManagementObject>().
                     Where(x => x["Name"] is string))
            {
                int mediaType = mo["MediaType"] != null?int.Parse(mo["MediaType"].ToString()) : 0;

                if (mediaType == FIXED_HARD_DISK_MEDIA)
                {
                    localDrives.Add(mo["Name"].ToString());
                }
            }

            //  ページングファイル無しのローカルディスクの有無を確認。無ければPagingFileオブジェクトを追加
            foreach (string localDrive in localDrives)
            {
                string tempLocalDrive = localDrive.TrimEnd('\\');
                if (setting.PagingFiles == null)
                {
                    setting.PagingFiles = new List <Class.MemoryDump.PagingFile>();
                    setting.PagingFiles.Add(new Class.MemoryDump.PagingFile()
                    {
                        DriveName = tempLocalDrive
                    });
                }
                else if (!setting.PagingFiles.Any(x => x.DriveName.Equals(tempLocalDrive, StringComparison.OrdinalIgnoreCase)))
                {
                    setting.PagingFiles.Add(new Class.MemoryDump.PagingFile()
                    {
                        DriveName = tempLocalDrive
                    });
                }
            }
            setting.PagingFiles = setting.PagingFiles.OrderBy(x => x.DriveName).ToList();

            //  パラメータで「-PagingFile」を指定した場合、PagingFileSettingではなくPagingFileのリストを返す。
            if (this.PagingFile)
            {
                WriteObject(setting.PagingFiles);
            }
            else
            {
                WriteObject(setting);
            }
        }
Example #2
0
        protected override void ProcessRecord()
        {
            if (PagingFileSettingObject == null)
            {
                if (AutoManage != null && (bool)AutoManage)
                {
                    //  自動管理が有効
                    var setting = new Class.MemoryDump.PagingFileSetting();
                    setting.Init();     //  デフォルトで自動管理が有効
                    setting.Save();
                }
                else
                {
                    //  自動管理無効
                    var setting = new Class.MemoryDump.PagingFileSetting();
                    setting.Init();
                    setting.AutoManage = false;

                    if (PagingFileObject == null)
                    {
                        //  文字列でPagingFileを指定 (「C:\pagefile.sys 1024 2048」等)
                        setting.PagingFiles = new List <Class.MemoryDump.PagingFile>();
                        foreach (string pagingFileLine in PagengFile)
                        {
                            string[] fields = pagingFileLine.Split();
                            setting.PagingFiles.Add(new Class.MemoryDump.PagingFile()
                            {
                                FilePath    = fields[0],
                                MinimumSize = long.Parse(fields[1]),
                                MaximumSize = long.Parse(fields[2])
                            });
                        }
                    }
                    else
                    {
                        //  別コマンドレットで生成したPagingFileオブジェクトを指定
                        setting.PagingFiles = PagingFileObject.ToList();
                    }

                    setting.Save();
                }
            }
            else
            {
                //  PaingFileSettingオブジェクト全体を指定
                PagingFileSettingObject.Save();
            }
        }