Windows

コマンドメモ

プロセス情報

wmic process [where "(条件式)" ] [get <列名>[,<列名>] ...]

CSV形式のフォーマットで出力する

wmic process LIST /format:CSV

メモリサイズが20MB以上のプロセス名とサイズを表示

wmic process where "(workingsetsize > 20000000)" get name,workingsetsize
※CreationDate列はプロセスの起動時間

パフォーマンスカウンタ

typeperf "オブジェクト名" [オブジェクト名...] -si 間隔 -sc 回数 -f <CSV|TSV|BIN|SQL> -o 出力ファイル名

-- CPU使用率とメモリ使用量を1秒毎に表示
typeperf "\Processor Information(_Total)\% Processor Time" "\Memory\Committed Bytes" -si 1
-- オブジェクト一覧取得
typeperf -qx
-- バイナリファイルの変換
relog <カウンタログ> -f csv -o <出力ファイル名>

セッション操作

quser     ※ ログインしてるユーザー、ステータス、アイドル時間
query session ※ ログインしてるセッション数確認
reset session ※ セッション切断
-- リモートのセッション状況を確認
qwinsta /server:<接続先ホスト名>

-- リモートのセッションをログオフする
logoff <SID> /server:<接続先ホスト名> /v
-- 最大ユーザー数、最大オープンファイル数、アイドルセッションタイムの確認
net config server

ユーザー情報

-- ローカルユーザー情報
net user [ ユーザーID [/domain] ]
※ /domain を付与すると、ドメインコントローラーのユーザー情報を取得
-- ローカルグループ情報
net localgroup

インストール情報

-- インストールソフト一覧
psinfo -s          ※ Sysinternalsツール(日本語は文字化けする)
Get-WmiObject Win32_Product
Get-AppxPackage       ※ Windows Server 2016以降
wmic product get name /value ※ 表示されないバージョンとかもあり、参考レベル

-- 役割・機能一覧
Get-WindowsFeature Win32_Product
servermanagercmd -query ※非推奨

サービス一覧表示

sc query (起動のみ)
sc query state= all (起動停止全部)
sc query state= inactive (停止のみ)

ディレクトリのファイル一覧

dir C:\ /S /-C | findstr /V "<DIR>" >> C_drive_dir.txt

イベントログをコマンドでエクスポートする

イベントビューアから、カスタムビューにてログフィルタを作成し、プロパティのXMLタブ Selct Path〜要素の中をコピペする。

(例) 24時間(86400秒)以内にログイン/ログオフしたユーザーをセキュリティログから取得する(上はテキスト形式で出力、下はバイナリ形式で出力)

wevtutil qe Security /f:text /q:"*[System[(EventID=4624 or EventID=4634) and TimeCreated[timediff(@SystemTime) <= 86400000]]]"
wevtutil export-log Security Security.evtx /q:"*[System[(EventID=4624 or EventID=4634) and TimeCreated[timediff(@SystemTime) <= 86400000]]]"

認識してないデバイスを表示する

set devmgr_show_nonpresent_devices=1
start devmgmt.msc

文字列を検索する

findstr

makecab(ファイルの分割)

conf.txt ファイルを作成し以下のパラメータを記述する
------------------------------------
.Set CabinetNameTemplate=file*.cab ;
.Set MaxDiskSize=52428800 ;
.Set Cabinet=on ;
.Set Compress=off ;
.Set DiskDirectoryTemplate= ;
分割対象ファイルのフルパス
------------------------------------
makecab /F conf.txt
※ MaxDiskSize(512byteの倍数である必要あり)で指定したサイズ毎に分割される。


 

コマンドレット

リモート先のPowerShellを操作する

  • リモート先のサーバー
    Enable-PSRemoting -Force
  • クライアント側の操作
    winrm quickconfig -force(PowerShell 2だとエラーになるので、forceの代わりに q を指定)
    Set-Item WSMan:\localhost\Client\TrustedHosts * -Force
    Enter-PSSession 接続先 -Credential 接続アカウント
    ※ Administratorsグループか、Remote Management Usersグループのユーザーのみ接続可能

モジュール

  • 使用可能なモジュール一覧表示
    Get-Command -Module モジュール名
  • モジュールのインポート(Windows Server2012からはコマンド実行時に必要だったら自動的にImportするっぽい)
    Import-Module モジュール名

フォーマット

  • 出力結果のフォーマットを指定する(format)
    コマンド | { Format-List | Format-Table | Format-csv | Format-Custom }
    Format-Table -Autosize(ft -a)で、カラム幅が自動的に広がって項目が切り捨てられない状態で表示できる。

ファイル操作

  • 出力結果をCSV形式で保存する(epcsv)
    コマンド | export-csv -encoding default -path C:\User.csv -notype
    オプション説明
    -encoding出力する文字コードを指定
    -notypeヘッダー行を含めない
    -force読み取り専用ファイルであっても書き込む

  • 特定の列だけ抽出する(select)
    コマンド | Select-Object 列 [,列] ...
    ※ エイリアスは、select
    オプション説明
    -first 数先頭から指定した行数のみ表示
    -last 数末尾から指定した行数のみ表示
    -skip 数指定した行数スキップする(1を指定したら2行目から表示)

  • 特定の行だけ抽出する(where)
    コマンド | Where-Object { $_.抽出対象列 -like "*キーワード*" }
    ※ エイリアスは where
    (例) OU=商店 の文字列を含む列だけ出力する
    Get-ADUser -Filter * -Properties DistinguishedName | select SamAccountName,Surname,DistinguishedName | where { $_.DistinguishedName -like "*OU=商店*" }
  • カンマ区切りのCSVファイルから特定の列だけ抽出する(下記例では1,2,5列目のレコードのみ出力
    If (Test-Path before.csv) {    # ファイルがあった場合のみ処理する
        foreach ($str in Get-Content before.csv | select -skip 1 | % { $_ -replace """",""} | % { $_ -replace "OU=",""}) {
            $str = $str -split ","
            $str[0]+","+$str[1]+","+$str[3] | Out-File after.csv -append
        }
    }
    ※ foreach は ForEach-Objectのエイリアス

WMI

  • WMIの一覧を出力
    Get-WmiObject(gwmi)-list
    Get-WmiObject | ? { $_.Name -like "Win32*Process*" }
  • WMIの実行
    Get-WinObject {WMI} [| ft -a]
    WMI説明
    Win32_Productインストールソフトウェアを取得
    Get-WmiObject Win32_OperatingSystemシステム情報(ロケールとか)
    Get-WmiObject Win32_ProcessorCPU情報
    Win32_PhysicalMemory物理メモリの情報

Get-ChildItem

  • ファイル名一覧を取得する
    Get-ChildItem [フォルダ名] [オプション]
    オプション説明
    -Recurseサブディレクトリも含め再帰的に検索
    -Filter検索結果に含めるファイル名を指定
    -Exclude検索結果から除外するファイル名を指定

  • カレントディレクトリのファイルを一覧取得し、容量順に並び替えて表示
    FullNameだと長すぎて途切れる。その場合は、export-csv -encoding default -path C:\User.csv のようにCSV出力すれば良い
    Get-ChildItem -Recurs | Select-Object LastWriteTime,Length,FullName | Sort-Object Length

Active Directory関連コマンド

  • ADに属するユーザー、グループ、コンピューターを確認
    -- AD関連モジュール読み込み(コマンドないエラーが出る場合は実行する)
    Import-Module ActiveDirectory
    
    -- コマンド例
    Get-ADUser -Filter {samAccountName -like "admin*"} -Properties *
    Get-ADGroup -Filter * -Properties *
    Get-ADComputer -Filter * -Properties *
    Get-ADObject -Filter {GUID -Eq "123455-XXXXXX-XXXXXX-XXXXXX-XXXXX"} -Properties *
    オプション説明
    -Filter表示対象を指定。指定は必須。*で全て表示。属性でフィルタ指定することも可能
    -Properties表示したいプロパティをカンマ区切りで列挙する。*で全て表示

グループポリシー関連コマンド

  • GPOの確認
    Get-GPO -All
  • 既定のGPOを元に戻す
    Dcgpofix.exe /Target:{ Domain | DC | BOTH }
  • セキュリティフィルター設定(Domain Usersグループに対して読み取り許可)
    Set-GPPermissions -Name "GPO-Name" -TargetName "Domain Users" -TargetType { Computer | User | Group } -PermissionLevel オプション
    オプション説明
    GpoApplyセキュリティフィルターの登録
    Noneセキュリティフィルターの削除
    GpoRead読み取りの委任
    GpoEdit編集の委任
    GpoEditDeleteModifySecurity編集、削除、セキュリティの変更を委任
  • GPOリンク
    New-GPLink -Name "GPO-Name" -Target "OU=Sales,DC=contoso,DC=com"
    Set-GPLink -Name "GPO-Name" -Target "OU=Sales,DC=contoso,DC=com" -LinkEnabled { Yes | No } -order 優先順位
  • 継承のブロック
    Set-GPInheritance -Target "OU=Sales,DC=contoso,DC=com" -IsBlocked Yes
  • GPO適用状況を出力
    Get-GPOReport -Name "GPO-Name" -ReportType HTML -Path ファイル名
  • GPOバックアップ
    Backup-GPO -name "GPO-Name" -Path バックアップ先フォルダ名
  • GPO復元
    Restore-GPO -name "GPO-Name" -Path バックアップ先フォルダ名
  • GPOインポート
    New-GPO -name "GPO-Name" [-StarterGpoName スタートアップGPO名]
    Import-GPO -BackupGpoName バックアップしたGPO名 -TargetName インポート先のGPO名 -Path フォルダ名

     

Memory

タスクマネージャのメモリ使用量は、リソースモニターの使用中+変更済みの容量を合わせた容量。
RAMMapを使用すると更に詳細なメモリ使用領域が確認できる。下記は( )はRAMMapでの表示。

キーワード説明
使用中(Active)ページフォールトを発生させることなく直ぐに利用可能なアクティブメモリ。
プロセス(ワーキングセット)やデバイスドライバ、カーネルなどで使用されている使用中のメモリ
スタンバイ(Standby)ワーキングセットから削除された削除されたキャッシュメモリ。
ソフトフォールトでActiveメモリに戻すことが可能。ディスクI/O発生させず再利用可能
変更中(Modified)ワーキングセットから削除されたキャッシュメモリで使用中に変更されたデータを含むがディスクへの書き込みが完了していない

スタンバイ+変更中の合計がタスクマネージャの「キャッシュ済」になる。
タスクマネージャのコミットチャージは、Mapped Fileと、Metafile の Active/Standby/Modifiedすべて除外されてるように思える
つまり、Mapped FileとMetafileは、Activeでも必要に応じて解放可能なのではないか?

RAMMap縦列のカラム

Usage説明
Process Privateプロセス用メモリ
Mapped Fileディスク上のファイルに対応する共有可能なメモリマップドファイル(ファイルをメモリに読み込むことで、メモリ内で操作可能になる)
Shared Memory他のプロセスと共有可能なメモリ。ページファイルにページアウトすることが可能
Page Tableプロセスの仮想アドレス空間を記述したカーネルモードのメモリ
Paged Poolカーネルの割り当てメモリでディスクにページアウトすることが可能
Nonpaged Poolカーネル割り当てページで常に物理メモリに存在する必要がある。常にActive列にのみ表示される
System PTEシステムのページエントリに使用。I/O領域やカーネルスタック、メモリ記述子リストのようにシステムページを動的にマップする為に利用
Session Privateリモートデスクトップセッション用のメモリ
MetafileNTFSのメタファイル用メモリ
AWEメモリ空間拡大用のAWE機能で利用されるメモリ
Driver Lockedドライバーによって割り当てられたメモリでシステムコミットのために予約されている。常にActiveに存在。
Hyper-VやVirtual PCはDiriverdメモリを使用して仮想マシンにRAMを割り当てる
Kernel Stackカーネルスレッドのスタックに割り当てられたメモリ
Unused未使用メモリ


プロセス単位で細かいメモリー使用状況を確認するには、VMMap.exe を使用する。

 

MSFC(Microsoft Failover Cluster)

クラスター情報

cluster /prop
cluster node /prop
cluster group /prop
cluster res /prop
cluster res /priv
cluster net /prop
cluster netint /prop
cluster res /status
cluster group /status
ckuster res "リソース名" /on /wait ※ 特定リソースをONLINEにする
cluster log /g
※ C:\Windows\Cluster\Reports に出力された Cluster.log を取得(クラスターノード分取得)
コマンド説明
Get-Clusterクラスター名情報
Get-ClusterNodeクラスターノード情報
Get-ClusterNetworkInterfaceクラスターインターフェース情報
Get-ClusterGroupクラスターグループ情報
Get-ClusterResourceクラスターリソース情報
Get-ClusterLogクラスターログ出力(C:\Windows\Cluster\Reports\Cluster.log)
Start-ClusterResource引数に指定したリソースを ONLINE にする


sysinternals

Procmon

  • フィルタ
    begin with(〜で始まる) end with(〜で終わる) contains(含む) less then(未満) more then(より大きい)

  • バックグラウンドで実行する方法
    【開始】PsExec64.exe -s -d Procmon.exe /AcceptEula /Quiet /LoadConfig <コンフィグ> /BackingFile <ファイル名>
    【終了】PsExec64.exe -s -d Procmon.exe /AcceptEula /Quiet /Terminate
    フィルターなど作成し、File - ExportConfiguration で コンフィグファイルを保存する。
    このコンフィグを実行時にロードすることで設定された内容でトレース取得が出来る。
    デフォルトは全てキャプチャするため、ログ量が膨大になる。

PsExec

1台または複数台のリモートコンピューター上で任意のプログラムを実行する
リモート先で実行したコマンド結果を、リモート先にリダイレクトする場合は、> の前に ^(CMDの場合)や`(PowerShellの場合)をつける

PsExec [実行ホスト] [オプション] コマンド [ ^> リモート先のファイル出力 ]
オプション説明
-dプロセスの終了を待たずにPsExecを終了する
-c [-f,-v]指定したプログラムをローカルからリモートへコピー。-fは上書き、-vは新しいバージョンの場合は上書き
-sシステムアカウントでプロセスを実施
-i対話的なデスクトップ上でプログラムを実施
-<優先度>プロセスの実行優先度。-background、-low、-belownormal、-abovenormal、-high、-realtime(低←→高)


 

Excel

時間操作

  • 時間に10秒を足す
    =対象セル + 10/24/60/60
    =TIME(HOUR(対象セル), MINUTE(対象セル),SECOND(対象セル) + 10)
  • 時間(HH:MM:SS)を秒にする
    =対象セル/(1/(24*60*60))
    書式を [ss] にする

文字列操作

  • 改行を別の文字列に置き換える
    =SUBSTITUTE(A1,CHAR(10),"改行後の文字")
  • ゼロパディング
    =RIGHT(値 + 10^2 , 2) 2桁のゼロパディング

値の取得

  • 最終行のセルの行番号を取得する (例) B2:B100の範囲で一番最後に文字が入ってる箇所の行番号を取得する場合
    =ROW(INDEX(B2:B1000,MATCH(10^17,CODE(B2:B1000))))
    と数式を記述し、Ctrl + Shift + Enter で配列数式で計算する。
    配列数式はB:Bのような範囲指定ができない。
    ※10^17=10の17乗
  • 数値分布の集計を行う(〜10、〜20、・・・、〜100 といった分布数を集計する時)
    基準となる範囲の右隣のセルを全て選択する。
    数式に =FREQUENCY(集計対象範囲,基準となる範囲) を入力する。
    集計対象範囲は、集計対象の数値が分散している列
    基準となる範囲は、分布数の基準値。10、20、30・・・100 といった分布数の範囲を選択。
    Ctrl + Shift + Enter で配列数式で計算する。
  • 特定の条件にマッチしたものをカウントする
    =COUNTIF(検索範囲,"=>"&セル)
    検索範囲の中で、セルに指定した数値以上のカウントを取得する。
    
    複数条件の場合は COUNTIFS / SUMIFS を使う。
    否定条件は、"<>free memory" というようにキーワードの前に<>を付与する
  • 条件に合致したキーワードの中で、最大値(最小値)を求める
    条件に一致したキーワードの平均はAVERAGEIFという関数があるが、MAX/MINはないので以下の方法を使う。
    C2〜C100 にバラバラにある複数のキーワードに紐付く、数値がF2〜F100にあるとする。
    B2セルに記載されたキーワードの中で最大値のものを算出する場合は以下の関数を使う。
    
    =MAX(IF($C$2:$C$100=$B2,$F$2:$F$100))
    で、CTRL+SHIFT+ENTERで配列数式で計算させる。

グラフ

  • 基準線を追加
    以下のようなセルでグラフを作成し、60 を基準線として表示させる。
    1月 100 60
    2月  50 60
    3月  25
    4月  88
    
    60 60 のグラフ種類を「散布図(直線)」に変更し、最小を1、最大2 にすることで、一直線になる。
  • 軸の数値を実際の値とは別の値に書き換える(飛び抜けた軸の値を省略する時に使う)
    軸のオプション表示形式で、ユーザー形式を選択。
    [=200]"1200";[=250]"1250";0
    
    200 の値は 1200、250の値は 1250 と表示される。[=100]"",#,##0 とした場合は 100の値が非表示になる。
    実際の軸の値が 1220 の時、値から 1000 マイナスし、220 の値にしてグラフを作成し、
    軸の項目だけ、0,50,100,150,1200,1250 のように表示すれば、220の値でも軸上は1200〜1250の間になる
  • 2つの時間軸を上下2段にして表示させる
    Data  Time 項目1 項目2
    09/01 15  AAAA  あああ
    09/01 16  BBBB  いいい
    
    の場合、データソースの選択 で 「横(項目)軸ラベル」の[編集]を押下。
    時間にしたいラベルを選択する。

ピボットテーブル

  • 日付をまとめて集計(グルーピング化)
    ピボットの日付を選択し、ピボットテーブルツール - 分析 - グループの選択 で集計単位を変更する
  • 前月と比較する
    比較したい値をドラッグ&ドロップで値フィールドに落とし2つ分表示させる
    2つめの値フィールドの値設定から「計算の種類」で「基準値との差分の比率」
    「基準フィールド」に日付、「基準アイテム」に前の値 を入力。
    日付フィールド単位で1つ前のセルとの比率が表示されるようになる。
  • フィールドの追加
    ピボットテーブル - 分析 - フィールド/アイテム/セット - 集計フィールド
    任意の計算式(金額*1.10とか)を使ったフィールドを追加できる
    削除も同じメニューから、追加ではなく削除で行う
  • 集計グループの作成
    カラーコピー用紙と、コピー用紙を合計した金額を「用紙」の項目として追加したい場合など
    追加したい項目の箇所で、ピボットテーブル - 分析 - フィールド/アイテム/セット - 集計アイテム
    ※ 集計対象の数値がグループ化されてると集計できないので、グループ解除を行う
    削除も同じメニューで、名前に削除したいアイテムを入力し削除

その他

  • INDEX/MATCHの使い方
    =VLOOKUP("A",C5:D8,2)
    =INDEX(C5:D8,MATCH("A",C5:C8),2)
    この二つは同じ意味
    違いは
    =INDEX(B5:D8,MATCH("A",C5:C8),1)
    とすることで、検索対象C列の左側B列から値を取得できる。
    また
    ここれは、取得する列を2,1で固定していますが
    =INDEX(D5:F8,MATCH("A",C5:C8),MATCH("B",D4:F4))
    のように、行、列をMATCH関数で検索することで、マトリックスな検索も出来ます。
  • CASE文のような処理を行う
    =CHOOSE((DATEDIF(Q6,NOW(),"D")>=0) + (DATEDIF(Q6,NOW(),"D")>=14) + (DATEDIF(Q6,NOW(),"D")>=30) + (DATEDIF(Q6,NOW(),"D")>=90),"1の時","2の時","3の時","4の時")
    引数1の値により、引数2以降の値を表示する。引数1が3だったら、引数4の値を表示する
    条件がTRUEの場合は、1 になる為、TRUEになる条件によって、表示する値を変えている
  • Excelのシート名をセルに表示
    =MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,31)
  • 改行コードを置換
    検索ボックスなどで「Ctrl+J」を押下。何も表示されないが改行の制御コードが入力されている

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-09-12 (火) 22:58:13 (8d)