teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

質問要点の明確化

2020/03/16 02:49

投稿

DreamTheater
DreamTheater

スコア1095

title CHANGED
@@ -1,1 +1,1 @@
1
- Windows 10 フルスキャン実行中CPU使用率の上限をVBScriptで変更したい
1
+ Windows 10 CPU使用率の上限をVBScriptで変更したい
body CHANGED
@@ -1,11 +1,17 @@
1
1
  ### 経緯
2
- McAfeeのフルスキャンを毎週計画起動しているのですが、CPU使用率が100%に到達すると、PC本体ファンがフル回転
2
+ 『Windows 10 フルスキャン実行中CPU使用率の上限をVBScriptで変更たい』で質問させて頂きましたが、
3
- 非常に煩く困ておりました。
3
+ 要点が的確でなかったようですので質問を変更します
4
- コンパネの電源設定で「プロセッサの電源管理」から「最大のプロセッサの状態」を100から80に変更すると、
5
- フルスキャン所要時間は伸びるものの、ファン音が静かになることが確認できたので、以下のようなVBScriptを
6
- 書いてみました。
7
4
 
8
- ### 試作コード1
5
+ ### やりたいこと
6
+ VBScriptで以下を実現させたいです。
7
+ 0. CPU使用率の上限を80%に制限する。
8
+ 0. McAfeeフルスキャンを起動する。
9
+ 0. フルスキャンの実行を待ち合わせる。
10
+ 0. CPU使用率上限を100%に戻す。
11
+
12
+ 1と4それぞれをpowercfgコマンドをVBScriptから実行しているのですが、1が期待通りの結果となりません。
13
+
14
+ ### CPU使用率の上限を80%に制限するVBScript
9
15
  ```VBScript
10
16
  Dim cmdString
11
17
  Dim shellObj
@@ -15,58 +21,41 @@
15
21
  '==CPU使用率の最大を80%に下げる(ファン音対策)
16
22
  cmdString = "powercfg /SETACVALUEINDEX SCHEME_BALANCED SUB_PROCESSOR PROCTHROTTLEMAX 80"
17
23
  shellObj.Run(cmdString, 0, True)
18
-
19
24
  'McAfeeフルスキャンを実行
20
25
 
21
26
  'McAfeeフルスキャン完了を待ち合わせる。
22
-
23
- '==CPU使用率の最大を100%に戻す
24
- cmdString = "powercfg /SETACVALUEINDEX SCHEME_BALANCED SUB_PROCESSOR PROCTHROTTLEMAX 100"
25
- shellObj.Run(cmdString, 0, True)
26
27
  ```
27
- ### 結果1
28
- 上記スクリプトを実行したところ、CPU使用率は100%まで上昇し、ファン音が発生してしまいました。
29
- フルスキャン中、コンパネの「最大のプロセッサの状態」は80%と表示されていたのですが。。。
28
+ 2のMcAfeeフルスキャンが開始した頃合いでコンパネの電源設定で「最大のプロセッサの状態」は80%
29
+ 変更されているのですが、CPU使用率は80%を超えほぼ100%となりました。
30
30
 
31
- ### 試作コード2
31
+ ### 試行(Sleepの挿入)
32
- (根拠な)、CPU使用率の最大を80%に設定した直後に10秒Sleepを入れて再実行。
32
+ (根拠いのですが)、CPU使用率の最大を80%に設定した直後に30秒Sleepを入れて再実行。
33
33
  ```VBScript
34
34
  Dim cmdString
35
35
  Dim shellObj
36
36
 
37
37
  Set shellObj = CreateObject("WScript.Shell") 'シェルオブジェクトを生成する
38
38
 
39
- '==CPU使用率の最大を80%に下げる(ファン音対策)
39
+ '==CPU使用率の最大を80%に下げる
40
40
  cmdString = "powercfg /SETACVALUEINDEX SCHEME_BALANCED SUB_PROCESSOR PROCTHROTTLEMAX 80"
41
41
  shellObj.Run(cmdString, 0, True)
42
42
 
43
- '10秒待ち合わせ
43
+ '30秒待ち合わせ
44
- Wscript.Sleep 10000
44
+ Wscript.Sleep 30000
45
45
 
46
46
  'McAfeeフルスキャンを実行
47
47
 
48
48
  'McAfeeフルスキャン完了を待ち合わせる。
49
-
50
- '==CPU使用率の最大を100%に戻す
51
- cmdString = "powercfg /SETACVALUEINDEX SCHEME_BALANCED SUB_PROCESSOR PROCTHROTTLEMAX 100"
52
- shellObj.Run(cmdString, 0, True)
53
49
  ```
50
+ コンパネの「最大のプロセッサの状態」は80%に変更され、CPU使用率も80%上限で推移し、うまくいったと
51
+ 思われたのですが、別のPCで実行すると4台中2台でCPU使用率が100%まで上昇してしまいます。
52
+ 使用率100%のPCにおいてもコンパネの「最大のプロセッサの状態」は80%と表示されています。
53
+ ※本スクリプト実行直前までCPU使用率は10%未満でした。
54
54
 
55
- ### 結果2
55
+ ### 確認事項
56
- フルスキャが始まってもCPU使用率は80%以上に上がらずファン音かったのでまくいった
56
+ - powercfgコマドでCPU上限を80%設定できたとしても上限超えは起きうるなのでしょか?
57
- 思い、、、
57
+ - Sleep挿入によって一部PCで上限80%なったのはたまたまでしょうか?
58
58
 
59
- ### 問題点
60
- 別のPC3台で上記スクリプトを実行してみたところ、3台中1台は相変わらずCPU使用率が100%まで上昇し
61
- ファン音が鳴り響くままでした。
62
- ※Sleep時間30秒変更てい
59
+ 先ほど要領の得ない質問で、コメント頂いた方ご迷惑をお掛けしました
63
60
 
64
- ### 実現したいこと
65
- - CPU使用率上限変更をVBScriptで制御したい
66
- →約100台のPCで毎週フルスキャンを行うので、各自にコンパネの「最大のプロセッサの状態」を都度
67
- 設定させず、スクリプトで制御したい為です。(設定し忘れや戻し忘れを防止したい)
68
-
69
- そもそもpowercfgコマンドは完了まで待ち合わせしているので、10秒以上のSleep挿入で実行結果が
70
- 変わること自体納得できておりません。
71
-
72
61
  お力添えの程よろしくお願い致します。

1

コードにシェルオブジェクト生成を追記

2020/03/16 02:49

投稿

DreamTheater
DreamTheater

スコア1095

title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,10 @@
8
8
  ### 試作コード1
9
9
  ```VBScript
10
10
  Dim cmdString
11
+ Dim shellObj
11
12
 
13
+ Set shellObj = CreateObject("WScript.Shell") 'シェルオブジェクトを生成する
14
+
12
15
  '==CPU使用率の最大を80%に下げる(ファン音対策)
13
16
  cmdString = "powercfg /SETACVALUEINDEX SCHEME_BALANCED SUB_PROCESSOR PROCTHROTTLEMAX 80"
14
17
  shellObj.Run(cmdString, 0, True)
@@ -29,7 +32,10 @@
29
32
  (根拠なく)、CPU使用率の最大を80%に設定した直後に10秒Sleepを入れて再実行。
30
33
  ```VBScript
31
34
  Dim cmdString
35
+ Dim shellObj
32
36
 
37
+ Set shellObj = CreateObject("WScript.Shell") 'シェルオブジェクトを生成する
38
+
33
39
  '==CPU使用率の最大を80%に下げる(ファン音対策)
34
40
  cmdString = "powercfg /SETACVALUEINDEX SCHEME_BALANCED SUB_PROCESSOR PROCTHROTTLEMAX 80"
35
41
  shellObj.Run(cmdString, 0, True)