タグ「PowerShell」が付けられているもの

固定IPを使用するLANの中で、今どのIPアドレスが空いているか適当にpingを打ってみることがありますが、連続して応答が返ってくるとちょっと疲れます。1~254まで全部手動で行うのは面倒なので、コマンドの例を探したらありましたのでメモ。

コマンドプロンプトの例

例えば、192.168.0.2~192.168.0.10を調べる場合

指定した範囲でpingarpを連続で打つコマンドです。

for /l %i in (2,1,10) do ping -w 1 -n 1 192.168.0.%i && arp -a 192.168.0.%i

最初の(2,1,10)は変数「%i」を2から10まで1ずつ加算していくことを表しています。

結果のログをテキストファイルで残す場合

コマンドの後ろに>> result.txtなど任意のファイル名を記載します。

for /l %i in (2,1,254) do ping -w 1 -n 1 192.168.0.%i && arp -a 192.168.0.%i >> result.txt

上記のようにファイル名のみ指定すると、ファイルの保存先はコマンドを実行したディレクトリに保存されます。(ほとんどの場合、ユーザーフォルダ)

分かりやすい場所に保存する場合はd:\result.txtなど、任意のディレクトリに変更します。

バッチファイルを作る場合

このコマンドをバッチファイルにする場合は、3カ所ある「%i」「%%i」にして「.bat」の拡張子を付けた名前で保存します。

for /l %%i in (2,1,254) do ping -w 1 -n 1 192.168.0.%%i && arp -a 192.168.0.%%i >> result.txt

結果について

応答があったもののみがテキストファイルに出力されていますので、ここにないIPアドレスが空いているということになりますが、たまたま電源が入っていない機器も含まれるので注意が必要です。

PowerShellのスクリプトの例

こちらはPowerShell192.168.0.1~192.168.0.255まで連続でpingを送信するスクリプトです。以下のスクリプトをPowerShellに貼り付けるか、メモ帳で「.ps1」という拡張子を付けて保存します。

$date = Get-Date -Format _yyyy_MMdd_HHmmss
for ($i = 1; $i -lt 255; $i++) {
        ping 192.168.0.$i >> pinglog$date.txt
}

実行すると、実行結果の入ったテキストファイルが「pinglog_2016_1127_092028.txt」のようなファイル名で実行ディレクトリに保存されます。

WordPressやMovableTypeで使っているブログ更新時のPING送信先が活きているか、PowerShellで簡単に調べるスクリプトを見つけたのでメモ。

ping送信先のテキストファイルを用意

例えば、以下のテキストをpinglist.txtという名前を付けて保存

google.co.jp
facebook.com
yahoo.co.jp

スクリプト作成

以下のスクリプトをメモ帳に貼り付け、先ほどのpinglist.txtと同じ階層にping.ps1といった感じで適当に.ps1の拡張子を付けて保存します。

echo pingを実行しています。しばらくお待ちください。

$date = Get-Date -Format _yyyy_MMdd_HHmmss
$target = Get-Content pinglist.txt

foreach ($item in $target) {
  ping $item >> pinglog$date.txt
  }

echo 結果を「pinglog$date.txt」に保存しました。

pause

スクリプト実行

スクリプトファイル(ping.ps1)を右クリックして「PowerShellで実行」をクリックするとスクリプトが実行されます。

 ↓

実行結果

実行結果は以下のような内容でスクリプトファイル(ping.ps1)と同じ階層に「pinglog_2016_1126_225217.txt」といったテキストファイルが作成されているので開いて確認できます。

これで、今後の確認作業が楽になりそうです。

Windows Server 2012 Essentialsを使用していますが、「パスワードの有効期限が切れています。」といったメッセージが出てパスワードを変更しなければログインできなくなりました。

またそのパスワードも以前使用していた旧パスワードを新パスワードに設定することができませんでした。

Active Directory環境下ではパスワードの有効期間がデフォルトで180日、使用できない旧パスワード数は24回となっているのが原因のようです。

ローカル セキュリティ ポリシー(変更前)

有効期限を設けなたくないので、「ローカルセキュリティポリシー」の「パスワードの有効期間」を「0」に変更しようと思いましたが、グレーアウトしていて変更ができませんでした。

パスワードの有効期間のプロパティ

また、旧パスワードが使えるように「パスワードの履歴を記録する回数」を「0」にしようとしましたが、同じくグレーアウトしていて変更ができませんでした。

パスワードの履歴を記録するのプロパティ

Power Shell(管理者権限で実行)で「net accounts」を使えばコマンドで変更できるようです。

現在の状況を見る

net accounts

Power Shell net accounts

パスワードの有効期間を0日(無期限)にする

net accounts /maxpwage:unlimited

パスワードの履歴を記録する回数(使用できない旧パスワード数)を0回にする

net accounts /uniquepw:0

これで無事変更ができました。

ローカル セキュリティ ポリシー(変更後)

Windows Server 2012 Essentialsを使用していますが、「パスワードの有効期限が切れています。」といったメッセージが出てパスワードを変更しなければログインできなくなりました。

またそのパスワードも以前使用していた旧パスワードを新パスワードに設定することができませんでした。

Active Directory環境下ではパスワードの有効期間がデフォルトで180日、使用できない旧パスワード数は24回となっているのが原因のようです。

ローカル セキュリティ ポリシー(変更前)

有効期限を設けなたくないので、「ローカルセキュリティポリシー」の「パスワードの有効期間」を「0」に変更しようと思いましたが、グレーアウトしていて変更ができませんでした。

パスワードの有効期間のプロパティ

また、旧パスワードが使えるように「パスワードの履歴を記録する回数」を「0」にしようとしましたが、同じくグレーアウトしていて変更ができませんでした。

パスワードの履歴を記録するのプロパティ

Power Shell(管理者権限で実行)で「net accounts」を使えばコマンドで変更できるようです。

現在の状況を見る

net accounts

Power Shell net accounts

パスワードの有効期間を0日(無期限)にする

net accounts /maxpwage:unlimited

パスワードの履歴を記録する回数(使用できない旧パスワード数)を0回にする

net accounts /uniquepw:0

これで無事変更ができました。

ローカル セキュリティ ポリシー(変更後)