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); } }
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(); } }