Windows Server 2008 以降、管理者権限でログオンすると自動的に「サーバーマネージャー」が起動します。
この自動起動を抑制する方法はいくつかあり、サーバーマネージャー、グループポリシー、レジストリで設定できます。
その他に、タスクスケジューラーで抑止する方法を見つけたので紹介します。
これはあまり知られていないような気がします。
Windows Server 2008 以降、管理者権限でログオンすると自動的に「サーバーマネージャー」が起動します。
この自動起動を抑制する方法はいくつかあり、サーバーマネージャー、グループポリシー、レジストリで設定できます。
その他に、タスクスケジューラーで抑止する方法を見つけたので紹介します。
これはあまり知られていないような気がします。
昨日書いたスクリプトを、一部改良しました。
出力されるテキストファイルは、実行した「Get-Netホニャララ」コマンドレットがそのままファイル名になります。
昨日のスクリプトでは、拡張子「.txt」までの間に長いスペースが発生してしまいますので、ちゃんと「Get-Netホニャララ.txt」となるようにしたのが以下のスクリプトです。
===============================
Get-Command -name Get-Net* | Format-List name | Out-File .¥1.txt
$1 = Get-Content .¥1.txt
$2 = $1.length -4
$C = 2
While($C -le $2)
{
$A = $1[$C]
$B = -join $A[7..100]
Invoke-Expression $B | Out-File .¥$B.txt
$C = $C +2
}
===============================
なお、PowerShellで「Get-Netホニャララ」が使えるようになるのは、Windows8 や Windows Server 2012以降です。
PowerShellで何らかの設定情報を収集するためには、大抵の場合「Get-ホニャララ」というコマンドレットを実行します。
NIC(ネットワークアダプター)に関係する設定情報であれば、「Get-NetIPAddress」や「Get-NetAdapterHardwareinfo」のように、「Get-Netホニャララ」というコマンドレットで概ね取得可能です。
それらを一気に実行するスクリプトを書いてみました。
(実行結果は、それぞれのコマンドレットごとに独立したテキストファイルとして、カレントディレクトリに出力されます。)
===============================
Get-Command -name Get-Net* | Format-Table name | Out-File .¥1.txt
$1 = Get-Content .¥1.txt
$2 = $1.length -3
$C = 3
While($C -le $2)
{
$A = $1[$C]
Invoke-Expression $A | Out-File .¥$A.txt
$C = $C +1
}
===============================
Windows Server 2012 や Windows 8 以降、PowerShell に「NetSecurity」モジュールが追加されたことで、Windows ファイアウォールを設定できるようになりました。
Windows Server 2012 や Windows 8 に限りませんが、近年の Windows OS は、デフォルトで 外部からの ping に応答しないようになっています。
これは、「Windows ファイアウォール」が有効で、なおかつ 「ICMP の応答を許可する設定」が無効だからです。
応答させるためには、「Windows ファイアウォール」自体を無効化するか、もしくは 「ICMP の応答を許可する設定」を有効化する必要があります。
今回は、後者の設定を PowerShell でやってみます。(IPv4 による通信を想定)
なお、この設定は GUI「セキュリティが強化された Windows ファイアウォール」において、「ファイルとプリンターの共有(エコー要求 - ICMPv4 受信)」という表示名で存在します。
まずは、デフォルトの設定が無効であることを確認します。
(Get-NetFirewallRule -name FPS-ICMP4-ERQ-In).Enable
↓2015/11/14 末尾の一文字が欠けていたので修正しました。
(Get-NetFirewallRule -name FPS-ICMP4-ERQ-In).Enabled
この実行結果は「False」となるはずです。
続いて、この設定を有効化します。
Set-NetFirewallRule -name FPS-ICMP4-ERQ-In -enabled true
これにより、外部からの ping に応答するようになります。
前述の確認用コマンドレットの実行結果も、「True」になるはずです。
(OSの再起動や、ネットワークアダプタの無効化・有効化といった作業は特に必要ありません。)
GUIツールであるイベントビューアを使わず、PowerShellのコマンドレットだけでイベントログを検索し、条件に合致するイベントを抽出する方法を考えてみました。
<前提>
(1).Net Framework 3.5 以上がインストールされている必要があります。
※Windows Server 2008 R2 の場合は、サーバーマネージャーの「機能の追加」で「.Net Framework 3.5.1 の機能」をインストールすれば大丈夫です。
(2)PowerShellを「管理者として実行」する必要があります。
<検索条件>
(1)「アプリケーションとサービスログ」の中にある、「Microsoft-Windows-GroupPolicy/Operational」を検索します。
(2)直近24時間以内に記録されたイベントを検索します。
(3)「エラー」や「警告」など、「情報」以外のイベントを検索します。
<コマンド例> (全3行)
$CT = Get-Date
$24ha = $CT.AddHours(-24)
Get-WinEvent -Logname Microsoft-Windows-GroupPolicy/Operational | Where-Object {$_.TimeCreated -ge $24ha -and $_.LevelDisplayName -ne "情報"}
<コマンド解説>
一行目では、現在の時刻(current time)を Get-Date コマンドレットにより取得し、変数「$CT」に格納しています。
二行目では、時刻を加算減算するメソッド「AddHours」を使用して24時間前の時刻を取得し、変数「$24ha」に格納しています。
(二行目は、$CT.AddDays(-1) と記述して一日前の時刻を取得しても、全く同じ意味になります。)
三行目のパイプ(|)より前の部分で実行している Get-WinEvent コマンドレットは、指定したイベントログの全イベントを取得するためのコマンドレットです。
このコマンドレットを実行するために、前提(1)・(2)を両方満たしている必要があります。
そして最後にパイプ以降の部分で、取得した全イベントの中から検索条件に合致するものだけを抽出しています。
-ge は「〜以上」、-ne は「〜と不一致」を意味し、それら二つの条件式を -and により並記しています。
まあ結合できるからってどうということもないのですが、そのうち何かの役に立つかもしれないので備忘録として残しておきます。
Windows Vista SP2 の PowerShell 1.0 で出来たことなので、おそらく以降のどのバージョンでも同じやり方で出来るはずです。
比較的どうでもいい豆知識として、好きなタイミングでわざとブルースクリーンを発生させる方法を紹介します。
管理者として実行しているPowershellで、"Stop-Process -ProcessName wininit -Force" というコマンドレットを実行するだけです。
(Windows Server 2008 の Powershell 1.0 のみ、-Force オプションが不要です。)
この方法なら、NotMyFault.exe ツールが不要で、Winodws 自身の機能だけでブルースクリーンを発生させられます。
2014年11月26日の <Get 編 其の一> では " Get-ScheduledTask " というコマンドレットを紹介しましたが、タスクの情報を得るコマンドレットとしては " Get-ScheduledTaskInfo " もあります。
このコマンドレットを使うと、特定タスクの直近の実行時刻(LastRunTime)と次回の実行時刻(NextRunTime)が分かります。
タスクの実行ユーザーを定義するコマンドレットは、" New-ScheduledTaskPrincipal " ですが、これも実行結果を変数に格納します。
ローカルユーザー「u002」により、ログオンしていない時でもタスクを実行したい場合のコマンドレットは以下のようになります。
$User = New-ScheduledTaskPrincipal -UserId u002 -LogonType Password
※ ローカル セキュリティ ポリシー の「ユーザー権利の割り当て」により、「u002」に対して「バッチジョブによりログオン」の権利を割り当てておかないと、実際にタスクを実行することはできません。
※ ここでは入力しませんが、この「u002」というユーザーのパスワードは、名前と同じ「u002」だとしておきます。
タスクの実行内容を定義するコマンドレットは、" New-ScheduledTaskAction " です。
E ドライブ直下にあるスクリプトファイル「script.ps1」を実行する場合のコマンドレットは以下のようになります。
$Act = New-ScheduledTaskAction -Execute powershell.exe -Argument E:¥script.ps1
このRegister 編では、新規のタスクをPowerShell で作成します。
タスク作成のコマンドレットは " Register-ScheduledTask " なのですが、これを実行する前に、他のコマンドレットをいくつも実行しておく必要があります。
TechNetの下記URLで、ページ下部にこのコマンドレットの例文が紹介されています。
http://technet.microsoft.com/en-us/library/jj649811.aspx
これによると、先に " New-ScheduledTaskTrigger " というコマンドレットを使ってタスクの実行タイミングを定義し、それを変数に格納しています。
そして最後に実行する " Register-ScheduledTask " で、" -Trigger " というオプションにその変数を投入しています。
(正直言って、大変回りくどいと思います。)