Windowsについて
不服だが、仕事上使うのでメモを書いていく
- cmd,PowerShellの違い
- Active Directry
- マクロ
- Debugについて
- パフォーマンスについて
- イベントログ
- SQLServerについて
- リソース集計バッチ
- ファイルを開いているプロセス特定方法について
👇いいこと書いてるので、おすすめ時間ある時に読む
日本マイクロソフト TechnologySupportBlog
gitアカウント
ハードリンク/シンボリックリンクの作成方法
# ハードリンク
mklink /H "C:\path\to\new\link.txt" "C:\path\to\original\file.txt"
# ソフトリンク
# /Dオプションでディレクトリのシンボリックリンク作成ができる
mklink "D:\path\to\new\link.txt" "C:\path\to\original\file.txt"
mklink /D "D:\temp\newlink.txt" "C:\myfolder\test.txt"
Edge-IEモードのデバッグ
EdgeのIEモードは開発者ツールが使えない(‘F12’で開くやつ)
IEChooser.exe
を使えばIEモードのEdgeでも開発者ツールが利用できる。
C:\Windows\System32\F12\IEChooser.exe
CMDから起動中のタスクをチェックする
tasklist
# 名前でソートする場合(/nh:ヘッダなしにしないとヘッダもソートされる)
tasklist /nh | sort
# csv形式出力(/fo csv)
tasklist /svc /fo csv > test.csv
# /V (verbose)
tasklist /fi "CPUTIME gt 00:00:10" /V /fo csv
タスクスケジューラの設定
タスクスケジューラはデフォルトで実行優先度が通常より低めに設定される。 以下のリンクから設定の変更方法を確認することができる。
cmd,PowerShellの違い
cmd
とPowerShell
の違いについてまとめる。
cmd
は古くからあるが、PowerShell(以下PSで省略)
はWindows7から追加された機能でcmdより強力
でスクリプトを描くための言語
である。
cmdで使えるコマンド
は,ほぼすべてPowerShellでも利用可能
です。
また、cmd
では,レジストリやWMI
にアクセスすることは難しいですが,
PowerShellでは標準的にサポート
されており,システムの管理業務に役に立ちます。
実際には,PS
はCMD
とは全くことなります。
コマンドレット(cmdlets)
と呼ばれる独自のコマンドを用います。
コマンドプロンプトで使えるほとんどのコマンドが,PowerShellでも利用可能です
PowerShellの内部でエイリアスが設定されており,例えばSet-Locationというコマンドレットにはcdという従来のコマンドが対応するようになっています。また,Get-ChildItemはコマンドプロンプトでいうdirに相当する,という具合です。
- 対応の確認には
Get-Aliasコマンド
が使える。
Get-Alias dir
イベントログについて
イベントログ
はイベントログビューア
でも確認できるが、
いちいちアプリを起動するのは鬱陶しい。
バッチを叩いてログを収集したい。
そのためのメモをここに残す。
# ログだけ取りたいならこれ。
Get-WinEvent
# イベントログビューアを起動 まあ、いらない
# /? オプションをつけることでhelpを表示できる
eventvwr.exe
- サンプル1 イベントログを取得 (syslog,applicationログを別々に出力する場合)
#任意の出力先フォルダと-afterで指定する時間を設定
$OutPutFolder = Join-Path ([Environment]::GetFolderPath('Desktop')) "EventLogs"
if(!(Test-Path $OutPutFolder)){ mkdir $OutPutFolder }
$yesterday = (Get-Date).Date.AddDays(-1)
#Systemログ、Applicationログを別々に$OutPutFolderへ保存する処理。
@("System", "Application") | %{
Get-EventLog $_ -After $yesterday |
?{ ($_.EntryType -eq "Error") -or ($_.EntryType -eq "0") } |
Export-Csv -Encoding Default -NoTypeInformation -Path (
Join-Path $OutPutFolder ($_ + "Log_" + (Get-Date).Date.ToString("yyyyMMdd") + ".csv") #任意の出力ファイル名
)
}
- サンプル2 イベントログを取得 (syslog,applicationログを別々に出力する場合)
#任意の出力先フォルダと-afterで指定する時間を設定
$OutPutFolder = Join-Path ([Environment]::GetFolderPath('Desktop')) "EventLogs"
if(!(Test-Path $OutPutFolder)){ mkdir $OutPutFolder }
$yesterday = (Get-Date).Date.AddDays(-1)
Get-WinEvent -FilterHashtable @{
LogName='System', 'Application'
Level=1,2
StartTime=$yesterday
} |
Select-Object -Property * |
Export-Csv -Encoding Default -NoTypeInformation -Path (
Join-Path $OutPutFolder ("WinEventLog_" + (Get-Date).Date.ToString("yyyyMMdd") + ".csv") #任意の出力ファイル名
)
Get-WinEvent使い方 🌟イベントログ -> CSVファイル出力
リソース使用料集計バッチ
# CPU/メモリ使用可能料出力
# %%はバッチ用エスケープなので、%で読み替えて、
# -si <sec> サンプリング間隔(sec)
# -sc <num> 収集するサンプル数
typeperf -y -si 1 -o resource.csv "\Process(*)\%% Processor Time" "\Memory\Available Bytes"
# helpコマンド
typeperf -?
# typeperfで確認できるメトリックは以下で確認できる
typeperf -q
typeperf -qx
# -cf <ファイル名>
# 一行ごとにカウンターを記載することで収集する対象を書ける
typeperf -cf counters.txt -si 5 -sc 50 -f TSV -o domain2.tsv
# typeperfでなくともCPU/memory使用率をtasklistで確認することもできる(filter付きで)
tasklist /fi “MEMUSAGE gt 1000000” /fi “CPUTIME gt 00:01:00”
CPU使用率調査有効メトリック
# 🌟システム全体での CPU 使用率
\Processor Information\ % Processor Utility
# CPU が idle 以外のスレッドを実行するために使用した経過時間の割合
\Processor Information\ % Processor Time
# CPU の処理を待つスレッドの数
\System\Processor Queue Length
## 🌟🌟🌟🌟🌟プロセスごとの CPU 使用状況🌟🌟🌟🌟🌟
# プロセスのスレッドすべてが、命令を実行するためにプロセッサを使用する経過時間の割合
# Processor = Privileged + User となる。
\Process(プロセス名)\ % Processor Time
# プロセスのスレッドが特権モードでコードを実行するために費やす時間の割合
\Process(プロセス名)\ % Privileged Time
# プロセスのスレッドがユーザー モードでコードを実行するために費やす時間の割合
\Process(プロセス名)\ % User Time
メモリ使用率調査有効メトリック
# 利用可能な物理メモリの大きさ(※使用量ではない)
\Memory\Available Bytes
\Memory\Available KBytes
\Memory\Available MBytes
## 🌟🌟🌟🌟🌟プロセスごとの メモリ 使用状況🌟🌟🌟🌟🌟
# 各プロセスが割り当てた物理メモリ使用量
\Process(プロセス名)\Working Set
# 各プロセスが割り当てた他のプロセスと共有できない物理メモリ使用量
\Process(プロセス名)\Working Set - Private
# 各プロセスが割り当てた他のプロセスと共有できない仮想メモリの使用量
\Process(プロセス名)\Private Bytess
以下のパフォーマンスモニタを参考に集計メトリックが確認できる。