syg_hira's tech-work memo

某人材サービス会社の情報共有インフラ担当のおぼえがきです。MicrosoftのEnterprise製品多め。

Disable and enable ipv6 Interfaces on Windows Server 2008 R2(修正版)

ネットワークアダプタのプロパティで、IPv6を無効にしても、6to4などのトンネルインターフェースは有効なまま。
ホスト自体はIPv6のアドレスを持ったままになってしまう。
実害はほとんどないと思うが、IPv6のアドレスを管理するのが面倒、ということもあるので、Windows Server 2008 にて、ipv6インターフェースを完全に無効化する方法。

Windows で IPVersion 6 またはその特定のコンポーネントを無効にする方法
1.レジストリを設定する
2.OSを再起動する
※インターフェースの無効→有効では反映されない。

OS再起動後、ネットワークアダプタのプロパティをみると、コンポーネントIPv6チェックボックスはONのまま。
でも、以下で、IPv6無効化を確認。

  • netsh interface ipv6 show interface して、IPv6はLoopbackトンネルインターフェース以外が表示されないことを確認。
  • ipconfig /all ですべてのアダプタにIPv6アドレスが割り当てられていないことを確認。


設定コマンド

New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name DisabledComponents -Value -1 -PropertyType DWord -Force
$Ret = Read-Host -Prompt '再起動が必要です。今すぐ再起動する場合はY、後で再起動する場合はNを入力してください'
if ($Ret -eq 'y') { Restart-Computer }

Get Windows service properties (Updated)

This command get get windows services properties with TSV.

  • DisplayName
  • Name
  • Status(Stopped or Running)
  • StartMode(Auto, Manual or Disabled)
  • StartName(Service Account)
Get-Service | sort-object DisplayName |ForEach-Object -Process{$Filter="Name='$($_.Name)'";$Service=(Get-WmiObject Win32_Service -filter $Filter);$("$($Service.DisplayName)`t$($Service.Name)`t$($_.Status)`t$($Service.StartMode)`t$($Service.StartName)")}

get displayname, name, status, startupmode(startup type) and 'log on as' of windows services (Updated)

Get-Service | sort-object DisplayName |ForEach-Object -Process{$Filter="Name='$($_.Name)'";$Service=(Get-WmiObject Win32_Service -filter $Filter);$("$($Service.DisplayName)`t$($Service.Name)`t$($_.Status)`t$($Service.StartMode)`t$($Service.StartName)")}

This script write tab separated format.

Disable and enable ipv6 Tunnel Interfaces on Windows Server 2008 R2

トンネルインターフェースを選択的に有効化・無効化する場合は、下記のコマンドを実行。

IPv6をまるっと無効化する場合は、こちらを参照

 

# Disable

netsh interface ipv6 isatap set state disabled
netsh interface ipv6 6to4 set state disabled
netsh interface ipv6 set teredo disable

 

# Enable
rem netsh interface ipv6 isatap set state enabled
rem netsh interface ipv6 6to4 set state enabled
rem netsh interface ipv6 set teredo client

 

 

タスクスケジューラのタスク状態を取得

コマンド単発実行

schtasks /query /s サーバ名 /tn タスク名

 

Powershellでプロパティ取得、schtasksを呼び出すお手軽バージョン。

 

$Task = (schtasks /query /s サーバ名 /tn "タスク名" /v /fo csv | ConvertFrom-Csv)
$Task.前回の結果
0
$Task.状態
準備完了

 

プロパティ名が日本語なのはちょっと変ですね。

OSかユーザの言語設定のどちらかに合わせて書き換えないといけないのかな。

 

イベントログからユニークなイベントIDとメッセージを抽出

どんなエラーが発生しているか確認するため、イベントID1つにつき1件だけピックアップ。

Get-WinEvent -Path 'D:\work\hoge1.evtx','D:\work\hoge2.evtx' | where {$_.Level -eq 2} | Sort-Object -Unique ID | fl

 

PowerShell実行ポリシー変更

$Cred = Get-Credential -Credential 'domain\TaskUser'
Invoke-Command -ComputerName ServerName -Credential $Cred -ScriptBlock { `
Get-ExecutionPolicy -List; `
$Ret = Read-Host -Prompt '実行ポリシーを変更します(Hit Any Key)'; `
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted; `
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Unrestricted; `
Get-ExecutionPolicy -List; `
$Ret = Read-Host -Prompt '実行ポリシーを変更しました(Hit Any Key)'; `
}

手動で実行できるPowerShellスクリプトを、JP1/AJSから呼び出し実行する際に、実行ポリシーを'Unrestricted'にする必要がありました。

検証環境では'LocalMachine'ポリシーだけでも動作しましたが、本番環境ではタスク実行ユーザのCurrentUserポリシーもUnrestrictedにする必要がありました。

サーバがたくさんあるので、上のスクリプトで共通管理者アカウントを利用してリモートから設定しました。

ポリシーについては、セッションのプロファイルなどが関係しそうですが、時間の問題で調査できず。

なお、実行ポリシーを'Unrestricted'にする場合、セキュリティリスクを検討してください。
しかるべきハードニングされたサーバであれば、運用作業の管理ができていれば問題はないと思いますが。