Windows Sysinternals

Windows Sysinternals  (https://technet.microsoft.com/ja-jp/sysinternals/bb842062.aspx)を忘れないように、備忘録です ^^;

このページには、Windows OS の運用・管理で役にたつMicrosoft製のツールがたくさん紹介されています。
このブログでも、 bginfo (http://miz.blue/bginfo/) を使った時の情報を記しましたが、bginfo以外にもこれらのツールを使ってみた際には、随時ここで備忘録したいと思います (^^)

 

 

Active Directory ユーザ(と移動フォルダなども一緒に)削除スクリプト

Active Directory のユーザと、移動プロファイルなどの関連するフォルダを併せて削除する用の PowerShell スクリプト を作成したので、その記録です。

以前の備忘録(ADユーザーの一括登録 その②) と対に作成したものです。

 


前回のADユーザ登録スクリプトでは .csv を読み込み 一括でユーザ作成するタイプでしたが、今回はユーザーのID( ↓ Name の部分)を入力して、1ユーザづつ削除するタイプのスクリプトにしてます。

 


 

ADユーザを削除する PowerShell スクリプト(.ps1)と、それを実行する用のショートカット(.ps1 を直接実行してもよいのですが、処理結果が流れてしまうので、-noexit で実行する) を 「C:\11.AD_User_Delete」 に設置。

 

ファイル 「01.~ 」 の ショートカットのリンク先は以下のようになってます。

 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit C:\11.AD_User_Delete\11.AD-User-Delete.ps1

 


この 「01. ~」 を右クリックして 「管理者として実行」 すると、

↑ こんなふうにユーザIDの入力を求められるので、IDを入力すると削除処理が実行されます。
(個人フォルダ、移動プロファイル/フォルダリダイレクト ともに、ユーザIDから始まるフォルダ名になっているので、ここで入力された値をキーに削除処理を実行してます。)

 

削除の .ps1 の中身は以下です。
移動プロファイルの削除方法やパスなどはスクリプト内からご確認を。 ><

<###
 
    このスクリプトについて:
    
    ADユーザと関連するディレクトリを削除するスクリプトです。
 
    STEP001: 削除するユーザーのIDを入力。
    STEP002: 個人フォルダ、移動プロファイル、フォルダリダイレクト を削除
 
    【更新履歴】
    2016.10.21   新規作成   o'miz
 
###>
 
 
<###
    STEP 001. ADユーザ名の入力と該当ユーザの削除
###>
 
### ユーザ名の入力
$DeleteADUser = Read-Host "削除するユーザのIDを入力してください"
 
### 入力されたユーザーの存在確認。最初にNULLを代入しておく。一致するユーザがいたらそのIDを代入。
$ExistUser = $NULL
$ExistUser = Get-ADUser $DeleteADUser
 
### ユーザーIDが存在しなかった場合(NULL のままだったら)
if ($ExistUser -eq $NULL)
{
    Write-Warning "存在しないユーザIDです。 処理を中断します。"
    exit
 
### 存在した場合(NULLでなかったら)は Remove-ADUser を実行
}
else
{
    Write-Host ...
    Write-Host ...
    ### 削除の最終確認。
    $DeleteChoice = Read-Host "削除してよろしいですか?(y/n)"

    ### y or n で処理を分岐。(ちなみに Switch は 大文字/小文字を区別しません)
    Switch ($DeleteChoice) 
    {
        ### y が入力されたら削除を実行
        "y" 
        {
            Get-ADUser $DeleteADUser |
            Remove-ADUser -Confirm:$false
            
            Write-Host ...
            Write-Host ...
            Write-Host "$DeleteADUser を削除しました。" -ForegroundColor Cyan
            Write-Host "続いて個人フォルダとユーザープロファイルを削除します。" -ForegroundColor Cyan
        }
        ### n だったら処理を中止。
        "n" 
        {
            Write-Host ...
            Write-Host ...
            Write-Error "処理を中止します。"
            Exit
        }
        ### 上記以外の入力だったら。
        default
        {
            Write-Host ...
            Write-Host ...
            Write-Host "y / n のどちらでもないため、処理を中断します。"
            Exit        
        }
    }
}
 
 
 
<###
    STEP 002. 個人フォルダ、フォルダーリダイレクト、移動ユーザプロファイル の削除
###>
 
 
<### 
    STEP002-1. 個人フォルダの削除
###>

### 個人フォルダのパスを指定
$DeletePrivateFolder = "\\hogehoge.local\share\個人用フォルダ\$DeleteADUser"
 
### 個人フォルダが存在していたら Try を実行
if (Test-Path -Path $DeletePrivateFolder*) 
{
    ### 個人フォルダを Remove-Item
    Try 
    {
        Write-Host ...
        Write-Host ...
        Write-Host "個人フォルダ $DeletePrivateFolder を削除します。" -ForegroundColor Cyan
     
        Remove-Item $DeletePrivateFolder* -Recurse -Force -ErrorAction Stop

    ### 個人フォルダの Remove-Item に例外が発生したら Catch を実行 
    }
    Catch
    {
        Write-Host ...
        Write-Warning "個人フォルダ $DeletePrivateFolder の削除に失敗しました。"
        ### 直前に発生した例外($Error[0])を表示
        Write-Host $Error -ForegroundColor Red
        Write-Host "手動で個人フォルダを削除してください。"
    }
 
### 個人フォルダが存在していなかったら。
}
else
{
    Write-Warning "個人フォルダが見つかりません。"
    Write-Warning "手動でフォルダ検索と削除を実行してください。"
    Write-Host "続行するには何かキーを押してください..."
    [Console]::ReadKey() |
    Out-Null
 
}
 

<### 
    STEP002-2. 移動プロファイルの削除
###>

### 移動プロファイルのパスを指定
$DeleteUserProfile = "\\hogehoge.local\UserProfiles$\$DeleteADUser"+".V2"
 
### 移動プロファイルが存在していたら Try を実行
if (Test-Path -Path $DeleteUserProfile) 
{
    ### 移動プロファイルの所有権を Administrator にしてから Remove-Item
    Try 
    {
        Write-Host ...
        Write-Host ...
        Write-Host ("ユーザーの移動プロファイル $DeleteUserProfile を削除します。")  -ForegroundColor Cyan
 
        ### フォルダの所有権をAdministratorに変更
        ### takeown /f $DeleteUserProfile /a /r /d Y
        $Cmd_Takeown01 = "takeown.exe"
        $Args_Takeown01 = "/f $DeleteUserProfile /a /r /d Y"
        ### -Wait でコマンドの終了を待つ
        Start-Process $Cmd_Takeown01 $Args_Takeown01 -Wait

        ### Administrator にアクセス権を付与
        ### icacls $DeleteUserProfile /grant Administrators:F /t
        $Cmd_icacls01 = "icacls.exe"
        $Args_icacls01 = "$DeleteUserProfile /grant Administrators:F /t"
        ### -Wait でコマンドの終了を待つ
        Start-Process $Cmd_icacls01 $Args_icacls01 -Wait
 
        Remove-Item $DeleteUserProfile -Recurse -Force -ErrorAction Stop
     
    ### 移動プロファイルの Remove-Item で例外が出たら Catch を実行
    }
    Catch
    {
        Write-Host ...
        Write-Warning "ユーザーの移動プロファイル $DeleteUserProfile の削除に失敗しました。"
        ### 直前に発生した例外($Error[0])を表示
        Write-Host $Error -ForegroundColor Red
        Write-Host "手動で削除してください。"
        Write-Host "続行するには何かキーを押してください..."
        [Console]::ReadKey() |
        Out-Null
    }  
}
else
{
    Write-Warning "移動プロファイルが見つかりませんでした。 手動でフォルダ検索と削除を実行してください。"
    Write-Host "続行するには何かキーを押してください..."
    [Console]::ReadKey() |
    Out-Null
 
}
 
 
<### 
    STEP002-3. フォルダリダイレクトの削除
###>

### フォルダリダイレクトのパスを指定
$DeleteFolderRidirect = "\\hogehoge.local\FolderRedirect$\$DeleteADUser"
 
### フォルダリダイレクトが存在していたら Try を実行
if (Test-Path -Path $DeleteFolderRidirect) 
{
    ### Administrator に所有させてから Remove-Item
    Try 
    {
        Write-host ...
        Write-host ...
        Write-host ("ユーザーのプロファイル(フォルダリダイレクト) $DeleteFolderRidirect を削除します。") -ForegroundColor Cyan
 
        ### フォルダの所有権をAdministratorに変更
        ### takeown /f $DeleteFolderRidirect /a /r /d Y
        $Cmd_Takeown02 = "takeown.exe"
        $Args_Takeown02 = "/f $DeleteFolderRidirect /a /r /d Y"
        Start-Process $Cmd_Takeown02 $Args_Takeown02 -Wait

        ### Administrator にアクセス権を付与
        ### icacls $DeleteFolderRidirect /grant Administrators:F /t
        $Cmd_icacls02 = "icacls.exe"
        $Args_icacls02 = "$DeleteFolderRidirect /grant Administrators:F /t"
        Start-Process $Cmd_icacls02 $Args_icacls02 -Wait
 
        Remove-Item $DeleteFolderRidirect -Recurse -Force -ErrorAction Stop
 
    ### Remove-Item で例外が発生したら Catch を実行
    }
    Catch
    {
        Write-Host ...
        Write-Warning "ユーザーのプロファイル(フォルダリダイレクト) $DeleteFolderRidirect の削除に失敗しました。"
        ### 直前に発生した例外($Error[0])を表示
        Write-Host $Error -ForegroundColor Red
        Write-Host "手動で削除してください。"
        Write-Host "続行するには何かキーを押してください..."
        [Console]::ReadKey() |
        Out-Null
    }
}
else
{
    Write-Warning "フォルダリダイレクトが見つかりませんでした。手動でフォルダ検索と削除を実行してください。"
    Write-Host "続行するには何かキーを押してください..."
    [Console]::ReadKey() |
    Out-Null
}

 

今回の備忘録は以上です。

 

 

Windows Update クライアントのリセット

WSUS 配下のクライアントPCのうちの1台(Windows Server 2012 R2)が、いつまでたっても報告を上げてこない & アップデートしない ようになってしまったので、Windows Update クライアントの情報をリセットした際の備忘録です。

とは言っても、technet ( Windows Update クライアントの情報をクリアにする手順 )に乗ってる手順をそのまんま実行したら治ったっていうだけなんですが。。。

wuauclt コマンドのオプションも気になったので、調べた結果も併せて備忘録します(最後のほうに)。

 


 

1) 自動更新サービスとBITSの停止

コマンドプロンプト or PowerShell を管理者権限で起動して、以下のコマンドを実行。

net stop wuauserv
net stop bits

 

 

2) Software Distribution フォルダーのリネーム

コマンドプロンプト を管理者権限で起動して、以下のコマンドを実行。

 ren %systemroot%\SoftwareDistribution SoftwareDistribution.old

※ PowerShell だと %systemroot% を理解してくれない・・・

↓ リネームされました。

ちなみに、各種ログもこのフォルダ配下にあるので、具合悪いときなどは中身を確認すると手がかりがあるかも。

 

3) BITS のジョブを削除

コマンドプロンプト を管理者権限で起動して、以下のコマンドを実行。

del %ALLUSERSPROFILE%\Microsoft\Network\Downloader\qmgr0.dat
del %ALLUSERSPROFILE%\Microsoft\Network\Downloader\qmgr1.dat

↓ 削除する前はこんなんです。

 

 

4) 自動更新サービスとBITSの開始

net start bits
net start wuauserv

 

 

5) 更新プログラムの検出

 wuauclt /detectnow

 

これで目出度く治ってくれました。 ^^)

 


 

ところで、wuauclt コマンド(@2012R2)ってヘルプが出てこないので、どんなオプションが使えるのか気になったので調べてみました。

 strings.exe C:\Windows\System32\wuauclt.exe > C:\99.work\wuauclt_strings.txt && C:\99.work\wuauclt_strings.txt

strings.exe は Windows Sysinternals  から入手できます。

出力された .txt の中身をみる限り、下記のようなオプションがあるようです(オプションの説明はありませんが・・・)。

/DemoUI
/BeginInteractiveOSUpgrade
/InstallOSUpgrade
/IdleShutdownNow
/ShowOptions
/ShowCheckForUpdates
/ShowWUAutoScan
/UpdateNow
/SelfUpdateUnmanaged
/SelfUpdateManaged
/CloseWindowsUpdate
/ShowWindowsUpdate
/ShowWU
/ResetEulas
/ResetAuthorization
/ShowSettingsDialog
/RunHandlerComServer
/ReportNow
/DetectNow

 

今回の備忘録は以上です。

 

 

Active Directory ユーザーの一括登録 その②

前回の 備忘録 ( .csv ファイルにADユーザーの情報を記載して、PowerShell の New-ADUser コマンド で一括作成 ) の続きになります。

今回は、登録するユーザ用の個人フォルダを併せて作成したかったので、 New-ADUser した後に New-Item でフォルダを作成する PowerShell スクリプト にしました。

 


 

1)  ユーザ情報の入った .csv を 「 C:\99.work\new_user.csv 」 としてファイルを設置。( .csv の中身については、前回の備忘録 を参照ください。)
※ このあとのスクリプトを実行することで、new_user.csv は new_user-YYYYMMDD-HHMMSS.csv にリネームするようにしています。(残っちゃうと事故の元なので)

 

2)  スクリプト ( と実行用のショートカット ) を 「 C:\10.AD_User_Create\ 」 に置く。

↑ このフォルダの中身はこんなです。
00a. と 00b. はファイル名通りで、中身は 0 byte です。

ファイル「10.AD-User-Add.ps1」 が、 New-ADUser して New-Item して .csv をリネームする用のスクリプトファイル、

ファイル 「01.これを右クリックで管理者として実行すると10.が実行されます。」 は 「10.AD-User-Add.ps1」 を実行するためのショートカットで、 
ファイル名の通り、「01.~」 を右クリックして管理者として実行すると、「10.~」 が起動されて .csv に記載したユーザがADに登録されて、個人用フォルダが作成されます。

直接  「 10.~.ps1 」 を実行してもよいのですが、その場合処理結果が流れてしまう(画面が閉じてしまう)ので、powershell.exe から -noexit オプションで実行する様にショートカットを作成してます。

ファイル 「01.これを右クリックで管理者として実行すると10.が実行されます。」 の中身は、

ショートカットのリンク先は下記になります。

 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit C:\10.AD_User_Create\10.AD-User-Add.ps1

 

 

「10.AD-User-Add.ps1」の中身は ↓ こんなんです。

 <###
    このスクリプトについて:
    .csv ファイルの情報を元に Active Directory のユーザを追加します。

    !事前に STEP 001 の .csv 作成を忘れずに!

    STEP 001 = なんとかして、.csv を作成
    STEP 002 = ADユーザの作成、個人フォルダの作成、.csv をリネームして保管

    【更新履歴】
      2016.10.14 新規作成 o'miz
###>


<###
    STEP 001. 【事前準備】登録するユーザーのリスト(*.csv)を作成します。

    作成したら、↓ ここに置いてください。

    C:\99.work\new_user.csv

###>



<###
    STEP 002. ADユーザーの作成と、個人フォルダの作成

    ※ ユーザーの初期パスワードは Himitsu@1234 です。

###>


### C:\99.work\new_user.csv の存在確認

$csv_path =  "C:\99.work\new_user.csv"
$csv_exist = (Test-Path -Path $csv_path)


### C:\99.work\new_user.csv が存在した場合は、ADユーザ作成 & 個人フォルダの作成を行う
if($csv_exist -eq $true) 
{

    ### 例外を catch するために $ErrorActionPreference自動変数の値を stop に設定
    $ErrorActionPreference = "stop"

    ### ADユーザー作成
    Try 
    {
        ### Get-Content でユーザ一覧の .csv ファイルを読み取って、
        Get-Content $csv_path |
        ### ConvertFrom-Csv に渡して、
        ConvertFrom-Csv |
        ### ForEach-Object(= % )で New-ADUserを繰り返し(.csv の末尾のエントリーまで)実行します。
        %
        {
        New-ADUser $_.Name -Surname $_.Surname -GivenName $_.GivenName -DisplayName $_.DisplayName -UserPrincipalName $_.UserPrincipalName -AccountPassword (ConvertTo-SecureString "Himitsu@1234" -AsPlainText -Force) -ProfilePath \\hogehoge.local\Profile$\UserProfiles$\%username% -Path "OU=test,DC=hogehoge,DC=local" -Enabled $true -ChangePasswordAtLogon $true -HomeDrive O: -HomeDirectory \\hogehoge.local\Share\共有フォルダ
        } |
        Out-Null

        Write-Output ""
        Write-Output "================================"
        Write-Output "下記のADユーザーを登録しました。"
        Write-Output ""
        Get-Content $csv_path |
        ConvertFrom-Csv |
        %
        {
        $_.Name + "    " + $_.DisplayName
        } |
        %
        {
        Write-Output "$_"
        }
    ### Try の処理が失敗したら。
    }
    Catch
    {
        Write-Output ""
        Write-Output "ユーザー作成に失敗しました。"
        ### 直前に発生した例外($Error[0])を表示
        Write-Host $Error
        Write-Output ""
        Exit
    }


    ### 個人フォルダの作成:
    ### .csv の Name と DisplayName を読み取って結合して、個人フォルダを作成
    Write-Output ""
    Write-Output ""
    Write-Output ""
    Write-Output "================================"
    Write-Output ""
    Write-Output "個人フォルダを作成します。"

    Get-Content $csv_path |
    ConvertFrom-Csv |
    %
    {
    $_.Name + "_" + $_.DisplayName
    } |
    %
    {
    New-Item "\\hogehoge.local\Share\共有フォルダ\$_" -type directory
    }


    ### new_user.csv をリネームします。
    ### 残っとくと紛らわしいので。

    ### 日付の取得
    $NowDate = Get-Date -Format "yyyyMMdd_HHmmss"

    Move-Item $csv_path C:\99.work\new_user-$NowDate.csv

    Write-Output ""
    Write-Output ""
    Write-Output ""
    Write-Output "================================"
    Write-Output ""
    Write-Output "C:\99.work\new_user.csv を C:\99.work\new_user-$NowDate.csv にリネームしました。(残ると紛らわしいので)"

###  C:\99.work\new_user.csv が存在しなかった場合
}
else
{
    Write-Output ""
    Write-Output " 登録ファイル(C:\99.work\new_user.csv) がありません。"
    Write-Output ""
}

↑ 個人用フォルダのACLは特に操作していない (親ディレクトリのを継承) してますので、変更が必要な場合は別途設定します。

 


ユーザ作成(と個人フォルダの作成)に成功すると、このように出力されます。

 

ファイル「new_user.csv」 が存在しない場合は、このように表示されます。

 

既にアカウントが存在する場合は、

 

その他のエラーが発生した場合は、こんな感じでエラーが出ますので、

 

それぞれ、適宜対応を。

 


今回の備忘録は以上です。

 

 

 

Hyper-V 上の仮想マシン(Linux)の複製

Hyper-V @ 2012R2 上の Linux(CentOS) 仮想マシンを複製した際の作業記録です。

稼働中のものと同じ Linux仮想マシン(ただし、host名、IPアドレスは異なる)を作りたかったので、すでに稼働している仮想マシンを エクスポート > インポート(コピー) して作成しました。

コピー元の仮想マシンを ” devmiz01 ” 、複製後(コピー後)の仮想マシンを ” devmiz02 ” とします。
devmiz0* の OS は CentOS 6.8 です。

 

① コピー元となる仮想マシンをエクスポートします。

エクスポートが終わったら、エクスポートフォルダ内の 仮想HDD と構成ファイルを編集しておきます。(しなくても動作に問題はないですが、コピー元と名前が同じになるのでややこしい)

・  .vhdx ファイル名を新規仮想マシンの名称に変更。

 

・ Virtual Machines ディレクトリ下の仮想マシン構成ファイルを編集し、

” devmiz01 ” となっている箇所を ” devmiz02 ” に変更。 (以下の2箇所 ←環境によって下記以外にも旧マシン名が記載されている場合があるので、旧マシン名は一括して置換します)

・ vhdx ファイルパス  ( <controller0> <drive0> の <pathname> の箇所 )

・ 仮想マシン名 (<properties> の <name> の箇所)

 

② エクスポートした仮想マシンをインポートします。

 

「仮想マシンをコピーする(新しい一意なIDを作成する)」 を選択。

 

③ ” devmiz02 ” を起動する前に、仮想マシンからネットワークアダプターを外しておきます。 (「仮想スイッチ = 接続されていません」 にする)

 

静的MACアドレス(Linuxの場合、MACアドレスが変わると ethX の設定も変わってしまうので、静的MAC で運用しています) も、コピー元の値になっているので、新しいMACアドレスに変更しておきます。

 

 

④ ネットワークアダプターが外れた状態で仮想マシンを起動し、ホスト名、IPアドレスを変更します。

・ ホスト名は、/etc/sysconfig/network、 /etc/hosts を修正。

・ IP アドレスは、/etc/sysconfig/network-scripts/ifcfg-eth0 を修正。
 ※ IPもだけど、HWADDR  (or MACADDR) も新しい MAC アドレスに変更。

・ /etc/udev/rules.d/70-persistent-net.rules に古いMACアドレスと新しいMACアドレスの 2つのエントリーがある(はず)ので、どちらもコメントアウトしておく。

修正完了後、仮想マシンをシャットダウンする。

 

⑤ 仮想マシンにネットワークアダプターを接続し、起動する。

 

以上で、IP(とMACアドレス)とホスト名が異なる以外は、中身が “devmiz01 ” と同じの ” devmiz02 ” が完成です。

 

 

 

Hyper-V 仮想マシン エクスポートの自動化

Hyer-V @ Windows Server 2012R2 で仮想マシンのエクスポートを自動化した際の作業記録です。

PowerShell の Export-VM コマンドレット で仮想マシンをエクスポート、併せて古いエクスポートは削除する、の動作をするPowerShell スクリプトを作成して、このスクリプトを Windows のタスクスケジュラーから毎日起動して実行する、といった運用です。

 

PowerShell スクリプトは ↓ こんなものを作ってみました。

<###
    このスクリプトについて:

    仮想マシンをエクスポートする処理を行います。
    (併せて、古いエクスポートを削除します)

    このシェルはタスクスケジューラーによって毎日 AM 2:00 に起動されます。


    STEP1: 仮想マシンをエクスポート
    STEP2: 古いエクスポートを削除
###>



<### 
    【STEP 1】
    仮想マシンを下記パスにエクスポートする
        E:\Daily_ExportedVM\<日付>\
###>

### 日付の取得
$NowDate = Get-Date -Format "yyyyMMdd_HHmmss"

### エクスポート対象の仮想マシンの指定
$TragetVM01 = "devmiz01"
$TragetVM02 = "hogehoge"

### エクスポート先のパスを指定
$ExportPath = "E:\Daily_ExportedVM\$NowDate\"

### Exportの成功 or 失敗の判断を STEP2(古いフォルダの削除)でするための変数($CheckCode)を定義
### 最初に0(=成功)を代入しておく。(失敗を検知したら 1 が代入される)
$CheckCode = 0


### コマンドエラー時に Try-Catch の Catch 部分が実行されるように、デフォルトパラメータを Stopに変更
$ErrorActionPreference = "stop"


### TargetVM01のエクスポート
### try-catch を使って、エラー発生時の処理を実装(catch内がエラー時のアクション)
Try {
    ### 仮想マシンのエクスポートを実行
    Export-VM -Name $TragetVM01 -Path $ExportPath -ErrorVariable ExportError01 |
    Out-Null   ### Out-Null することで Export-VM が終了するのを待つ。

### Export-VM がエラーになったら、エラー内容をファイルに出力して、$CheckCode に 1を代入
}Catch{

    ### エラーを このファイルに出力→ E:\Daily_ExportedVM\ExportErrorCode-$TragetVM01-$NowDate.txt 
    echo $ExportError01 | 
    Out-File E:\Daily_ExportedVM\ExportErrorCode-$TragetVM01-$NowDate.txt

    ### エラーの場合は変数 'CheckCode'に 1 を代入(0以外の代入でSTEP2の際に中止ルーチンに移行)
    $CheckCode = 1

}
Out-Null


### TargetVM02のエクスポート
### try-catch を使って、エラー発生時の処理を実装(catch内がエラー時のアクション)

Try {
    ### 仮想マシンのエクスポートを実行
    Export-VM -Name $TragetVM02 -Path $ExportPath -ErrorVariable ExportError02 |
    Out-Null   ### Out-Null することで Export-VM が終了するのを待つ。

### Export-VM がエラーになったら、エラー内容をファイルに出力して、$CheckCode に 1を代入
}Catch{

    ### エラーを このファイルに出力→ E:\Daily_ExportedVM\ExportErrorCode-$TragetVM01-$NowDate.txt 
    echo $ExportError02 | 
    Out-File E:\Daily_ExportedVM\ExportErrorCode-$TragetVM02-$NowDate.txt

    ### エラーの場合は変数 'CheckCode'に 1 を代入(0以外の代入でSTEP2の際に中止ルーチンに移行)
    $CheckCode = 1

}
Out-Null



<### 
    【STEP 2】
    古いエクスポートの削除
    2世代(過去2日分)のこす ← HDDの使用状況を見ながら調整

    $DeleteTime で経過時間を指定。
    $DeleteTime = "-n"  n(分/min)。 n分前を指定するので、マイナスをつける
    2日 = 2880min (60min * 24hour * 2day)
    3日 = 4320min (60min * 24hour * 3day)
    10日 = 14400min (60min * 24hour * 10day)
###>
#$DeleteTime = "-5"       ### 5分経過(テスト用)
$DeleteTime = "-4320"   ### 3日 ← 4320だと3日前のが残っちゃうので、4300 とかちょっと減らしておくのがいいかも。


### Export-VM が例外処理で停止していなければ($CheckCode = 0)、古いフォルダの削除実施
if ( $CheckCode -eq 0 ) {
    ### 対象フォルダ配下のリストを取得
    Get-ChildItem E:\Daily_ExportedVM |
    ### 作成されてから $DeleteTime の値を超過したフォルダ・ファイルを選択/抽出
    Where-Object {
    $_.CreationTime -lt (Get-Date).AddMinutes($DeleteTime)
    } |
    ### 対象を絶対パスに変換し、削除
    foreach {
        Remove-Item -Recurse -Force $_.FullName
    }
### $Code != 0 であれば(1が代入されていれば)処理を中止。
} else {
    exit
}

 

↑ このスクリプトを 「 C:\02.Daily_VM_Export_Shell\Daily_VM_Export.ps1 」 という名前で保存。

 

このスクリプトが毎日 AM 2:00 に実行されるように、タスクスケジューラーに登録。
↓ 登録はこんなんにしました。

 

 

操作の中身は、

 

「プログラム/スクリプト」

 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

「引数の追加」

 -Command "C:\02.Daily_VM_Export_Shell\Daily_VM_Export.ps1"

「開始」

 C:\02.Daily_VM_Export_Shell

 

 

今回の備忘録は以上です。

 

 

Active Directory ユーザーの一括登録

Active Directory (@ Windows Server 2012 R2) にADユーザーを一括登録した際の備忘録です。

ADユーザの登録にはいろいろな方法 ( @ITさんの記事 とか technet (英語) ) がありますが、今回は CSVファイルにユーザーの情報を記載して、 PowerShell コマンドレット(New-ADUser)に取り込んで一括作成しました。

 


登録したユーザー(例)のパラメーター

・Name :  user001
・姓 (Surname): 苗字
・名 (GivenName): 名前
・表示名 (DisplayName): 苗字 名前

 

・ユーザー ログオン名(UserPrincipalName) : user001@hogehoge.local
・ユーザーは次回ログオン時にパスワード変更が必要(ChangePasswordAtLogon) : True

 

・プロファイルパス(ProfilePath) : 今回は移動プロファイルなので、それ用に作った共有フォルダのUNCパスを指定。
・ホームフォルダー 接続ドライブ(HomeDrive) : Oドライブ
・ホームフォルダー パス(HomeDirectory) : 共有フォルダのUNCパスを指定

 

上記の赤枠で囲んでいるパラメーターが明示的に設定した箇所になります。(その他のパラメーターはデフォルトのまま)

 


 

ちなみに、上記の1ユーザーのみを PowerShell の New-ADUser コマンドレットで登録するには、

 New-ADUser user001 -Surname 苗字 -GivenName 名前 -DisplayName "苗字 名前" -UserPrincipalName user001@hogehoge.local -AccountPassword (ConvertTo-SecureString "Himitsu@1234" -AsPlainText -Force) -ProfilePath \\hogehoge.local\Profile$\UserProfiles$\%username% -Path "OU=test,DC=hogehoge,DC=local" -Enabled $true -ChangePasswordAtLogon $true -HomeDrive O: -HomeDirectory \\hogehoge.local\Share\共有フォルダ

※ ADドメイン 「hogehoge.local」 内のOU(組織単位) 「test」 に user001 を作成。

「AccountPassword」 パラメータでパスワード ( Himitsu@1234 ) を設定しています。
New-ADUser コマンドは平文でのパスワードを入力出来ないため、後に続く()内の ConvertTo-SecureString で暗号化してます。

New-ADUser コマンドの引数については、technet (https://technet.microsoft.com/ja-jp/library/ee617253.aspx) に詳しく載ってます(英語ですけど・・・)。

 


登録するユーザを CSVファイルに記載します。

今回は同一ADドメイン内の単一OU(組織単位)へのユーザー展開だったので、

・Name
・Surname (姓)
・GiveName (名)
・DisplayName (表示名)
・UserPrincipalName (ユーザー ログオン名)

を可変要素とし CSV ファイルに登録。
(ユーザープロファイルのパスとか初期パスワードは共通なので、CSVではなくコマンドから直接入力)

CSV は下記のように記載します。

Name,Surname,GivenName,DisplayName,UserPrincipalName
user001,苗字,名前,苗字 名前,user001@hogehoge.local
user002,苗字2,名前2,苗字2 名前2,user002@hogehoge.local

このCSV ファイルを今回は 「users.txt」 とういファイル名で保存。

 

PowerShell を(管理者権限で)起動して、以下のコマンドを実行。

 Get-Content .\users.txt | ConvertFrom-Csv | %{New-ADUser $_.Name -Surname $_.Surname -GivenName $_.GivenName -DisplayName $_.DisplayName -UserPrincipalName $_.UserPrincipalName -AccountPassword (ConvertTo-SecureString "Himitsu@1234" -AsPlainText -Force) -ProfilePath \\hogehoge.local\Profile$\UserProfiles$\%username% -Path "OU=test,DC=hogehoge,DC=local" -Enabled $true -ChangePasswordAtLogon $true -HomeDrive O: -HomeDirectory \\hogehoge.local\Share\共有フォルダ}

※ 上記は users.txt を配置したカレントパスで実行してます。 

日本語の文字化けを回避するために、CSVファイルを 「 Get-Content 」 コマンドレットで読み取ってから 「ConverFrom-Csv 」 して 「 New-ADUser 」 に渡すようにしています。

 

今回の備忘録は以上となります。

 

 

 

Fortigate HA構成でのWANリンクロードバランス (WAN LLB)

Fortigate 60D で HA構成を組んでマルチホーミング( =  WAN Link Load Balancing ( WAN LLB )) した際の作業記録です。

使用したファームウェアは v5.4.1,build5447、
HA は Active-Passive で、構成はこんなです。

 

・v5.4.1 での WAN LLBの解説はこちら( http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-whats-new-54/Top_VirtualWANLink.htm

・ビデオ解説はこちら ( https://video.fortinet.com/video/187/wan-link-load-balancing
・Youtube ( https://www.youtube.com/watch?v=HRajFKAdflU

・HA の構成については 以前の備忘録 を参照ください。

 

ISP1 / ISP2 ともに、固定のグローバルIPを払い出してもらって、WAN1 に ISP1 を、WAN2 に ISP2 を、それぞれ接続してます。
(ISP2 との接続には PPPoE を使用)

 


【WAN Link Load Balancing の有効化】

System > Feature Select から 「 WAN Link Load Barancing 」 を有効にします。

 


【WAN Link Load Balancing の設定の前に】

WAN Link Load Balance 用のインターフェースを作成する為に、
まず、WAN1 / WAN2 インターフェースをオブジェクトに含むポリシーとStatic Routing を全て削除します。

デフォルトの状態であれば Static Routing はカラなので何もする必要ない(はず)ですが、ポリシーにはデフォルトで  Internal -> WAN1 を All permit する設定が定義されているので、削除しておきます。

 


【WAN1 / WAN2 インターフェースの設定 (ISPとの接続)】

次は WAN1 / WAN2 インターフェースをそれぞれの ISP に接続します。

WAN1 の Addressing mode は Manual で、ISP1 から払いだされたIPを登録。

 

WAN2 は PPPoE です。 
払い出してもらうIPアドレスを Unnumberd IP に書いておきます。

 

WAN1 / WAN2 ともに設定完了。

 


【WAN LLB の設定】

次はWAN Link Load Balancing の設定です。

Network > WAN LLB  に進みます。

 

Interface State を 「Enable」 にし、「+Create New」 をクリックします。
1 つ目の Interface にWAN1 を登録。
Gateway には ISP1 のデフォルトゲートウェイを登録。

※ WAN1/2 がプルダウンリストに出てこない場合は、ポリシーか Static Route に WAN1/2 を含む設定が(きっと)残っているはず。 

 

もう一度 「 + Create New 」 をクリックして、2番めの Interface に WAN2 を追加します。
WAN2 は PPPoE なので、Gateway は未登録で。

 

 

ロードバランスアルゴリズムはお好みで (とはいっても回線速度だとか通信要件とか次第ですね)
今回は 「Volume」 で半々(1:1) に使うように。

※ Voume の場合 0:0 だと、次の Default Route の設定をした際に、WAN1 側のデフォルトルートがRouting Monitor に現れない( PPPoE 側の経路情報は表示されるけど)、結果 WAN1 側が使えない現象に遭遇したので、 0 は使用しないのがよさそう。

 


【Static Route の登録】

Network > Static Route に進みます。

 

「+ Create New」 します。 
Device には 「wan-load-balance」 を指定 (すると Next Hop の記入欄が出てこなくなる = 未入力でOK)して登録。

 

追加されたところ。

 

Routing Table がどうなっているか、確認してみます。
Monitor > Routing Monitor を開きます。

↑ Default GW ( 0.0.0.0/0 ) が 2 テーブルありますね! ^^/
一方は wan1 インターフェースのNext Hop (WAN LLB の設定時に登録したIP)、一方は ppp1 (=wan2) インターフェースで PPPoE が払いだしたIPです。

 


【Policy の登録】

詳細は端折りますが ^^; 
Internal から 「 wan-load-balance 」 向けの ポリシーを作成して通信できるようにしておきます。

 


【WAN Status Check】

今回は、ISP1 側の デフォルトルートを ping してreply がなければ ISP2側(wan2)に片寄るように設定。
(ロードバランスが 1:1 なのに片方だけ ping ?  意味無いじゃん、なのですが・・・)

Network > Wan Status Check に進みます。

 

「 + Create New 」 して ISP1 側のデフォルトGW のIPを登録。

 

↓ こんな感じで監視されます。

 


【稼働確認】

ちゃんと 1:1 でバランシングされてるか、確認してみます。

Fortiview > All Sessions を開くと、
(画像がとれなかったのですが) WAN1 / WAN2 の両方から通信してることが確認できます。

 

 

WAN1 インターフェースから ISP1 への ping が失敗すると、↓ こんな風に。

 

このときは、↓ このように Routing Table も縮退して、

セッションが WAN2 に片寄ります。

ISP1への ping が復旧すれば、元に戻ります。

 

今回の備忘録は以上となります。

 

 

 

 

Windows展開サービス(WDS)

Windows展開サービス(WDS)を使用して、複数のクライアントPCを一斉展開した際の作業記録です。

【Windows 展開サービス (Windows  Deployment Sevices) 】
 Windows  展開サービス (WDS) は、Windows オペレーティング システムのリモート展開を可能にするサービスです。
 ネットワーク経由で複数のPCを一斉にセットアップできるので、多数のPCをキッティングする場合などに大活躍です。

・ Windows 展開サービスの概要 ( https://msdn.microsoft.com/ja-jp/library/hh831764(v=ws.11).aspx

・ @IT さんの記事(http://www.atmarkit.co.jp/ait/articles/1504/22/news018.html

 

今回は、WDSに Windows Server 2012 R2 (と2008 R2 も併用)、40台ほどのPC(全て同ベンダの同一機種)に、Windows 7 Pro を展開しました。

 WDS は 2012R2 のみでやりたかったのですが、 WDS@2012R2 でのカスタムインストールイメージの作成が出来ない事象(参照コンピュータをWDSから取得したキャプチャイメージで起動するとエラーになる)に遭遇したため、

1)  WDS@2008R2 のキャプチャイメージからクライアントPCをPXE起動して、カスタムインストールイメージを作成。

2)  1)で作成されたカスタムインストールイメージを WDS@2012R2 にインポート。

して各PC達に展開、といった事をしました。

 

 今回はすでに構築済みの Active Directory (とDNS)環境に WDS(とPC達)を追加。
 DHCPサーバーがない環境なので、WDSに相乗り(DHCPサーバとWDSを新規構築)しました。
 なお、WDS は Hyper-V 2012 R2 上の仮想マシンです。

 


 

【作業の流れ】

  1.  参照コンピュータ(展開用のマスタとなるOS = Windows 7)を仕上げておく。 (PC x 1台に Windows 7 を入れてWindows Updateして、Office入れたりとか、圧縮・解凍ツール入れたりとか)
    OSが仕上がったら、sysprep かけてシャットダウン。
  2.  2012R2 (と2008R2)を用意し、 WDS の役割を追加。
  3.  WDS にブートイメージを追加。
  4.  3.で作成したブートイメージから、キャプチャイメージを作成。 
  5.  参照コンピュータの電源をON -> PXEブートして、4. で作成したキャプチャイメージから起動。
  6.  5. の結果、参照コンピュータ上のHDD上に、カスタムインストールイメージ(*.wim)が作成される。
  7.  カスタムインストールイメージ( *.wim ファイル)を WDS にコピー。
    (6.の際に、WDSにアップロードすることも可能)
  8.  7. のイメージ(*.wim)を WDSにインポートしてインストールイメージに追加。
  9.  あとは展開したいPC達をPXEブートして、WDS 上のカスタムインストールイメージをダウンロード -> インストール。

 

 


 

参照コンピュータ(展開用のマスタOS)の作成

展開の元になるマスターOSを作成します。
詳細割愛しますが、今回は Windows 7 をインストール(アップデートとかも済ましておく)して、Adobe Reader や Office 、圧縮・解凍ツールなど、共通で必要になるものをインストールした状態に作成。

OSが仕上がったら、 sysprep (Sysprep テクニカル リファレンス – TechNet) で一般化した状態でシャットダウンしておきます。

Windows 7 の sysprep (https://technet.microsoft.com/ja-jp/library/dd799240(v=ws.10).aspx)は、

↓ このパスにあります。
C:\Windows\System32\sysprep\sysprep.exe

sysprep.exe をダブルクリックして、

・「システムのOOBE(Out-of-Box Experience)に入る」 を選択
・「一般化する」 にチェックを入れる
・「シャットダウン」 を選択

実行すると初期化シーケンスが走り、しばらく後シャットダウンされます。
WDS の準備が整うまで、参照コンピュータの電源はこのまま OFF しておきます。

 


 

WDS( とDHCPサーバー )の役割を Windows Server 2012 R2 に追加

今回の環境にはDHCPサーバーがなかったので、まず「DHCPサーバー」の役割を追加、次に「Windows 展開サービス 」 の役割をインストール。
(ウィザード通りの作業なので、スクリーンショットは割愛します)

WDSは「トランスポートサーバー」と「展開サーバー」の両方を選択。

 


WDS の初期設定
 ※ DHCPサーバーの設定は割愛します。

「管理ツール」 > 「Windows 展開サービス」を開きます。

↑インストール直後のWDSは未構成の状態です。
サーバーを右クリックして 「サーバーの構成」 を選択。

ウィザードに沿って設定していきます。
前提条件が提示されるので、合致しているかどうか確認。

 

Active Directory と統合。

 

リモートインストールフォルダ(展開用のブートイメージ等が保管される)のパスを指定します。
C:\ ドライブ以外が推奨のようですが、今回は C:\ でいきます。

 

DHCPサーバー をWDS と同じサーバーに実装したので、両方ともチェック。

 

今回はすべてのクライアントに応答を選択。
※ 意図しないPXEを防ぐために 「応答しない」 でも(必要なときだけ有効にする)

 

設定完了です。
※ サービスは自動で開始されないようになっている模様。

 

↓ こんな具合に仕上がりました。
サービスが起動していないので、サーバーのアイコンに停止マーク(■)がついてます。
(サービスの起動はキャプチャイメージの準備が終わってから)

 

 


 

WDSにブートイメージを追加

まずはブートイメージを追加します。

※ ブートイメージを作成するために、WIndows Server 2012 R2 のインストールDVD(に入ってるファイル)を使用するので、参照できるよう事前に準備しておきます。

 

「ブートイメージ」 を右クリック > 「ブートイメージの追加」を選択。

 

インストールDVDの「\sources」 ディレクトリにある 「boot.wim」 を使います。

 

イメージの名前はわかりやすそうなものに、説明もつけておくとよいでしょう。

 

ブートイメージが追加されました。

 

 


ブートイメージからキャプチャイメージを作成

次に、ブートイメージからキャプチャイメージを作成します。

さきほど作成したブートイメージを右クリック > 「キャプチャイメージの作成」 を選択。

 

保存パスは 「C:\90.RemoteInstall\Boot\x64\ja-JP\」、
ファイル名を 「capture-image_01.wim」 としました。

 

作成したキャプチャイメージをブートイメージに追加します。
ブートイメージを右クリックして 「ブートイメージの追加」 を選択。

 

先ほど作成した キャプチャイメージのファイル(「C:\90.RemoteInstall\Boot\x64\ja-JP\capture-image_01.wim」) を指定。

 

キャプチャイメージが追加されました。

 


 

参照コンピューターの電源をONにして、PXEブートする。

次は、いよいよ展開用マスターOSの作成(参照PCからの抽出)です。

WDS が停止している場合(サーバーのアイコンが黒の■)は、サーバーを右クリック > すべてのタスク > 開始 を選択してスタート。

起動に成功すると、アイコンが緑の△マークになります。

 

 

次に、参照コンピューターの電源を入れます。

PXEブート(ネットワークブート)ですよ! 
油断してると、OSが起動して sysprep シーケンスが開始されちゃいますからね!

BIOSでPXE(ネットワーク)ブート優先の設定にしておくか、
起動時に F12 キー を押してブートシーケンス選択モードに入って、ネットワークブートを選択するとよいでしょう。

!!標準的には F12 が BOOTモード選択ですが、機種依存の場合もあるので、事前に確認を。

 

今回は F12 キー でPXEブート(ネットワークブート)を選択。

 

WDS との通信(とDHCPサーバーからのアドレス取得)が上手くいくと、さきほど登録したブートイメージが選択肢に現れます。
キャプチャイメージ = 「capture-image_x64」 を選択します。

 

・・・すると、
「0xc000000f 」なるステータスになって起動しませぇん。。。

 

いろいろググッてみたところ、同様の事象 & 解決方法が散見できましたが、私の環境ではFIXできなかったので、WDS@2008R2 に置き換えてやってみたところ、成功しました。

↓ (評価版の) Windows Server 2008 R2 で1台サーバーを作って、 WDS と DHCP の役割を追加して、WDSにブートイメージ/キャプチャイメージを登録。
(設定方法は2012R2と同等のため割愛)

 

 WDS@2008R2 が仕上がったら、(2012R2 のほうはシャットダウンしておいて) 参照コンピュータをPXEブート。

先ほどと同様に、capture-image から起動。(2008R2 ではファイル名を変えたので、さきほどのスクリーンショットとはファイル名が異なっております) 

 

2008R2 からだと下記のように起動に成功。
イメージキャプチャウィザードが開始されます。

 

参照コンピューターからイメージキャプチャ(抽出)するボリュームとイメージの名前を指定。
このPCの場合は、ボリュームD:\  に sysprep した Windows 7 が入ってる(C:\ は回復ドライブ)ので、D:\ を指定。
名前にはわかりやすい名前を入力。

 

抽出したイメージの保管先(参照コンピュータのローカルドライブ)を指定。
今回は 「D:\Master-OS_Win7\Master-OS_Win7.wim」 として保管。

※ 同時にWDSへアップロードする事もできるみたいですが、私の環境だと不調だったため、ローカルのみに保存、後でこのファイルをWDSにファイルをコピーしてインポートする、にしました。

 

イメージの作成が始まります。

しばらくすると、イメージのキャプチャが完了します。

 

「完了」 をクリックすると、参照コンピューターが再起動されるので、
そのまま OS を起動します。
(sysprep がかかってるので、初期設定から開始されます)

 

ウィザードで指定した場所に .wim ファイルが出来てます。
(今回であれば、「 D:\Master-OS_Win7\Master-OS_Win7.wim 」)

↑ このファイルを WDS@2012R2 (から参照できる場所:ネットワークドライブとかでもOK) にコピーしておきます。

 


 

インストールイメージに カスタムイメージを追加

キャプチャしたイメージ(今回であれば、「 Master-OS_Win7.wim 」)をインストールイメージに追加します。

インストールイメージを右クリック > 「インストールイメージの追加」 を選択。

 

ウィザードに沿って追加します。
名前は判りやすそうなものを指定。

 

抽出したイメージ(今回であればファイル名「Master-OS_Win7.wim」 )を指定。

 

 

インストールイメージが追加されました。

 


 

クライアントへの展開

クライアントをPXEブートして、インストールイメージをデプロイします。

なお、キャプチャ用のブートイメージ( 今回であれば、capture-image_x64 )は展開時には不要なので、無効にしておきます。
(イメージを選択して右クリック > 「無効にする」。 無効になるとアイコンに赤い下向き矢印がつきます)

 

クライアントをPXEブート(ネットワークブート)します。
(電源ONしたら F12 キー でブートシーケンス選択メニュー)

 

WDS (とDHCPサーバー)との通信に成功すると、セットアップが開始されます。

 

Windows 展開サービスのセットアップ ウィザードが起動。

 

Active Directory の認証を求められますので、ユーザー名とパスワードを入力。

 

認証に成功すると、WDS に追加したインストールイメージが表示(選択)されるので、「次へ」。
(今回であれば、「 Base-Image_Win7 」 )

 

インストール場所を選択。
(今回の環境では、ドライブ 0 の パーティション 3 )

 

すでに Windows の入ってるパーティションなので、警告が出ました。が、OK で先に進みます。

 

インストールが開始されます。

しばらくすると、インストール完了。

 


このあと、デプロイしたPC達を 1台1台 ホスト名変えたりだとか、ローカルアドミンのパスワード変えたりだとか、なんだかんだ人手をかけましたが、きっといろいろ自動化する方法があるはず。

そのあたりはまた別の機会いに試してみたいと思います。

今回の備忘録は以上となります。

 

 

 

Fortigate Firmware Update v5.4.0 to v5.4.1

Fortigate 60D の FortiOS を v5.4.0 から v5.4.1 にアップデートした際の作業記録です。

インターネットに接続してる Fortigate なので、新ファームウェアの通知とアップデートは、FortiGuard Network 経由で行っています。
(ですので、とくだん難しいことはしておらず、GUIの命じるがままの作業です)

v5.4.1 のリリースノートはこちら(http://docs.fortinet.com/uploaded/files/3075/fortios-v5.4.1-release-notes.pdf

 

ダッシュボードに v5.4.1 が出たとの通知が来ました。
(まだ本番稼働してない個体なので、気楽にアップデートすることにします)

 

画面右下の 「Upgrade」 をクリック。
※ コンフィグファイル は事前にバックアップしておきます。

 

Firmware のダウンロードとアップグレードが実行されます。

 

今回の Fortigate 60D は、 HA構成(Active -Standby)を組んでる機器なので、スタンバイ機側からファームウェアのアップデートがかかります。

スタンバイ機のアップデートが終わると、アクティブ機側がアップデートされます。
(Active側のアップデート中は、Standby機がActiveに昇格しますので、Fortigate経由の通信は途切れずに継続されます。)

↓ FW01 が Active、 FW02 が Standby です。 FW02 が v5.4.1 になったところ。

 

FW01も v5.4.1 になりました。

 

今回のアップデートの所要時間は、2台でだいたい10分程度。

アップデート後は、HA の Master/Slave がひっくり返ってるので、元にもどしておきます。

マスター側で、以下のコマンドを実行。

# diagnose sys ha reset-uptime

 

 

最後に、事前にバックアップしておいたコンフィグと、v5.4.1 のコンフィグを比較します。
(WinMerge 日本語版  http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html  を使用)

バージョンアップ前のコンフィグでは、SNMPのインターフェース設定の名前部分を明示的に指定していたのですが、バージョンアップ後は無指定(ANY)になっちゃってますね。。。 (まぁ、動作的には問題ないですが)

他にも、追加されたパラメータ(WiFi関連が多い感じ)が見受けられますが、実際の通信に関わるポリシーとかインターフェースあたりの設定は(さすがに)バージョンアップ前後で変わってないことが確認できましたので(SNMPの部分は元の設定に戻すとして)、今回の備忘録は以上とします。