MyUtils

View on GitHub

Windowsについて

不服だが、仕事上使うのでメモを書いていく

👇いいこと書いてるので、おすすめ時間ある時に読む
日本マイクロソフト 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



タスクスケジューラの設定

タスクスケジューラはデフォルトで実行優先度が通常より低めに設定される。 以下のリンクから設定の変更方法を確認することができる。

優先度一覧 TaskSettings.Priority プロパティ



cmd,PowerShellの違い

cmdPowerShellの違いについてまとめる。 cmdは古くからあるが、PowerShell(以下PSで省略)はWindows7から追加された機能でcmdより強力スクリプトを描くための言語である。
cmdで使えるコマンドは,ほぼすべてPowerShellでも利用可能です。
また、cmdでは,レジストリやWMIにアクセスすることは難しいですが,
PowerShellでは標準的にサポートされており,システムの管理業務に役に立ちます。

実際には,PSCMDとは全くことなります。
コマンドレット(cmdlets)と呼ばれる独自のコマンドを用います。

コマンドプロンプトで使えるほとんどのコマンドが,PowerShellでも利用可能です

PowerShellの内部でエイリアスが設定されており,例えばSet-Locationというコマンドレットにはcdという従来のコマンドが対応するようになっています。また,Get-ChildItemはコマンドプロンプトでいうdirに相当する,という具合です。

Get-Alias dir


イベントログについて

イベントログイベントログビューアでも確認できるが、 いちいちアプリを起動するのは鬱陶しい。 バッチを叩いてログを収集したい。 そのためのメモをここに残す。

# ログだけ取りたいならこれ。
Get-WinEvent

# イベントログビューアを起動 まあ、いらない  
# /? オプションをつけることでhelpを表示できる
eventvwr.exe
#任意の出力先フォルダと-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") #任意の出力ファイル名
    )
}
#任意の出力先フォルダと-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

# CPUidle 以外のスレッドを実行するために使用した経過時間の割合
\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

以下のパフォーマンスモニタを参考に集計メトリックが確認できる。

リソースメトリック確認メモ