5_POWERSHELLの覚書 ネットワーク内の疎通を確認する
特定の範囲内のネットワーク機器にpingをうち、疎通のあるものは
「結果あり」ないものは「結果なし」と表示する。
自分の管理外のネットワークに対して行うと偵察・攻撃とみなされる場合があるので注意が必要。
#Windowを作成するおまじない。
$rui = $host.UI.RawUI
$rui.WindowSize = New-Object System.Management.Automation.Host.Size(80,30)
while($true){
for($i = 1;$i -ne 11;$i++){
$add = "192.168." + $i + ".1" #192.168.1.1~192.168.1.10に対してpingをうつ
$ret = Test-Connection $add -Quiet
if($ret){
write-host $add
write-host "□□□ 疎通あり! □□□"
} else {
write-host $add
write-host "■■■ 疎通なし!■■■"
}
}
pause
Clear-Host
}
4_POWERSHELLの覚書 リストに一致する行を抽出
test.ps1を実行するとwindowが起動するので、sc.csvをドラッグアンドドロップして
エンターキーを押せばsc.csvの条件でmap.csvのStationを抽出してくれる。
map.csv
id | Station | number |
1 | 清瀬 | 30 |
2 | 東久留米 | 40 |
3 | ひばりが丘 | 50 |
4 | 保谷 | 60 |
5 | 大泉学園 | 70 |
6 | 石神井公園 | 80 |
sc.csv
40 |
50 |
test.ps1
#windowを表示するおまじない
$rui = $host.UI.RawUI
$rui.WindowSize = New-Object System.Management.Automation.Host.Size(80,30)
Write-Host "csvをドラグアンドドロップしてください。"
#csvファイル名とパスを読み込む
$ps = Read-Host
$sta = Import-Csv .\map.csv -Encoding UTF8
$ps2 = Get-Content $ps -Encoding UTF8
while($True){
# それぞれのテーブルを表示する。
$sta | Format-Table
$ps2 | Format-Table
#テーブルの条件でcsvを抽出する。
$aaa = $sta | Where-Object -FilterScript {$ps2 -contains $_.number}
write-host $aaa."Station"
pause
Clear-Host
}
3_POWERSHELLの覚書 リストに一致する条件をCSVから取得
タイトルどおりです。わかりにくいですがそのうちまとめます。
map.csv
Station | number |
清瀬 | 30 |
東久留米 | 40 |
ひばりが丘 | 50 |
保谷 | 60 |
大泉学園 | 70 |
石神井公園 | 80 |
練馬 | 90 |
桜台 | 92 |
東長崎 | 97 |
椎名町 | 98 |
池袋 | 99 |
sc.csv
name | add | shubetu |
1 | 127.30.0.1 | ABC |
2 | 127.70.8.9 | XYZ |
3 | 127.80.7.5 | XYZ |
4 | 127.50.6.2 | ABC |
5 | 127.60.6.2 | XYZ |
6 | 127.40.6.2 | XYZ |
7 | 127.90.7.6 | ABC |
8 | 127.92.6.3 | XYZ |
9 | 127.98.6.3 | XYZ |
10 | 127.92.6.3 | ABC |
11 | 127.99.6.3 | XYZ |
test.ps1
# Windowを作成するおまじない
$rui = $host.UI.RawUI
$rui.WindowSize = New-Object System.Management.Automation.Host.Size(80,30)
# CSVファイルの読み込み
$map = Import-Csv .\map.csv -Encoding utf8
$sc = Import-Csv ./sc.csv -Encoding utf8
# 関数を作成する
function search($types,$F_or_L){
$desk = $sc | Where-Object {$F_or_L -eq $_."shubetu"} | Select-Object add | select -Expandproperty "add"
# %はForEach-Objectの省略形
$new_key = $desk | % { $_.Split(".")[1] } |Sort-Object| Get-Unique
$result = $map | Where-Object -FilterScript {$new_key -contains $_.number}
#これではダメ$aaa = $map | Where-Object -FilterScript {$_.number -contains $new_key}
write-host "--------------------"$types "結果------------------------"
Write-Host ""
for($i=0;$i -lt $result.length;$i++){
Write-Host $result[$i]."Station"
}
write-host ""
write-host "-----------------------------------------------------"
}
search "First" "ABC"
search "Last" "XYZ"
pause
POWERSHELLの覚書2
map.csv
id |
station | number |
1 | 池袋 | 30 |
2 | 練馬 | 40 |
3 | 石神井公園 | 50 |
4 | ひばりが丘 | 60 |
5 | 所沢 | 70 |
6 | 飯能 |
80 |
station名を入力すると127.0.0.*の*をnumberに変更してpingを打つpowershell
(なんのこっちゃ)
ping.ps1
#Windowを作成するおまじない。
$rui = $host.UI.RawUI
$rui.WindowSize = New-Object System.Management.Automation.Host.Size(80,30)
#CSVファイルを読み込む
$sta = Import-Csv .\map.csv -Encoding UTF8
while($true){
write-host "駅名を入力してください。"
write-host ""
$Search_STA = Read-Host
write-host ""
$Result = $sta | Where-Object -FilterScript { $Search_STA -contains $_.Station}
write-host "------------------------------------------------------"
if ($Result -ne $null){
write-host $Search_STA "のIDは" $Result."number" "です。"
$IP = "127.0.0." + $Result."number"
write-host $IP
ping $IP -t -l 0
} else{
write-host "お探しの駅は見つかりませんでした"
}
write-host "------------------------------------------------------"
write-host ""
pause
Clear-Host
}
POWERSHELLの覚書1
#windowを作成するおまじない
$rui = $host.UI.RawUI
$rui.WindowSize = New-Object System.Management.Automation.Host.Size(80,30)
#CSVファイルの読み込み
$sta = Import-Csv .\map.csv -Encoding UTF8
#文字出力
write-host
#文字受け入れ
read-host
#一時停止
pause
#windowに表示されている文字を消去
clear-host
#ループ
while($true){}
#プロセスの5行(一番下)だけ表示 firstは上の5行
get-process | select-object -Last 5
#どんなプロパティ(表の表題)があるのかを調べる。
get-process | Get-Member
#別ウィンドウでコマンドを実行する
start cmd -ArgumentList "/c ping $IP -t -l 0"
#grepみたいに使える
Get-Item .\*.txt | Select-String "test" -Context 1
-Context :前後の行数を指定できる。
pythonではまった話
以下のようにCSVファイルの1行目にaaa,bbb,cccという文字を入力するコードを書いて実行しました。
sample.py
下が実行結果です。「csvはwriter属性を持っていません」みたいなことを言われていますが意味不明です。持ってるじゃないですか。
コードをいくら書き換えても同じエラーしかでないのでgoogleに頼ることにしました。トップに表示されたのはインポートしたモジュールとファイル名が同じではダメというものです。
でも私が作ったファイル名はsample.pyです。全然違うじゃないですか。
しばらくしてから犯人を見つけました。
そうです同一ファイル内にcsv.pyというファイルが存在していたのです。つまりコード内のimport csvは正規のcsvモジュールではなく、こいつを読み込んでいたのです。
こんなアホなことがあるんだと思い記事にしてしまいました。
#AttributeError: partially initialized module 'csv' has no attribute 'writer' (most likely due to a circular import)
sakuraエディタの便利な機能
Shift + F6 矩形選択の開始
Alt + s +g Grep検索