回答編集履歴

1

追記

2016/08/02 04:52

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -5,3 +5,95 @@
5
5
 
6
6
 
7
7
  [管理者権限でメモ帳を開いてhostsを編集するコマンド](http://qiita.com/tiibun/items/5719869552ee5b713d83) を参考に書き直してみてください。もしかしたら二、三行にすっきり収まるかもしれませんよ。
8
+
9
+ ###追記
10
+
11
+ 色々制約があるので(にしては PsExec は OK だったり UAC を無効にしていたりポートを開いたりしているようですが)、こうなりましたが、これできちんと動作することを確認しました。
12
+
13
+ Test-Admin および Start-ScriptAsAdmin は [スクリプトを管理者権限で実行する](http://winscript.jp/powershell/302)から頂戴しました。
14
+
15
+ これらを別のスクリプトファイルに分ければ見やすくなると思います。
16
+
17
+
18
+
19
+ ```PowerShell
20
+
21
+ $computerNames = '...\list.txt'
22
+
23
+ $psexec = '...\psexec'
24
+
25
+
26
+
27
+ function Test-Admin
28
+
29
+ {
30
+
31
+ (
32
+
33
+ [Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::
34
+
35
+ GetCurrent()
36
+
37
+ ).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
38
+
39
+ }
40
+
41
+
42
+
43
+ function Start-ScriptAsAdmin
44
+
45
+ {
46
+
47
+ param(
48
+
49
+ [string]
50
+
51
+ $ScriptPath,
52
+
53
+ [object[]]
54
+
55
+ $ArgumentList
56
+
57
+ )
58
+
59
+ if(!(Test-Admin))
60
+
61
+ {
62
+
63
+ $list = @($ScriptPath)
64
+
65
+ if($null -ne $ArgumentList)
66
+
67
+ {
68
+
69
+ $list += @($ArgumentList)
70
+
71
+ }
72
+
73
+ Start-Process powershell -ArgumentList $list -Verb RunAs
74
+
75
+ }
76
+
77
+ }
78
+
79
+
80
+
81
+ Start-ScriptAsAdmin $PsCommandPath $Args
82
+
83
+ Get-Content $computerNames | Foreach-Object {
84
+
85
+ if (Test-Connection -ComputerName $_ -Quiet -count 1) {
86
+
87
+ Write-Host ($_)
88
+
89
+ $out = &$psexec "\\$_\" cmd /c "type %WINDIR%\System32\drivers\etc\hosts"
90
+
91
+ $out
92
+
93
+ }
94
+
95
+ }
96
+
97
+ ```
98
+
99
+