*Windows [#w9901423]
#contents

***別メニュー [#a9df2730]
-[[PowerShell>Windows/PowerShell]]~


**コマンドメモ [#m4ae59fb]
***プロセス情報 [#pfc72496]
 wmic process [where "(条件式)" ] [get <列名>[,<列名>] ...]

CSV形式のフォーマットで出力する
 wmic process LIST /format:CSV

メモリサイズが20MB以上のプロセス名とサイズを表示
 wmic process where "(workingsetsize > 20000000)" get name,workingsetsize
 ※CreationDate列はプロセスの起動時間


***パフォーマンスカウンタ [#uf75bd88]
 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 <出力ファイル名>


***セッション操作 [#y3570531]
 quser     ※ ログインしてるユーザー、ステータス、アイドル時間
 query session ※ ログインしてるセッション数確認
 reset session ※ セッション切断

 -- リモートのセッション状況を確認
 qwinsta /server:<接続先ホスト名>
 
 -- リモートのセッションをログオフする
 logoff <SID> /server:<接続先ホスト名> /v

 -- 最大ユーザー数、最大オープンファイル数、アイドルセッションタイムの確認
 net config server


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

 -- ローカルグループ情報
 net localgroup

 --ファイルアクセス制御
 icacls


***インストール情報 [#e4c4c51c]
 -- インストールソフト一覧
 psinfo -s          ※ Sysinternalsツール(日本語は文字化けする)
 Get-WmiObject Win32_Product
 Get-AppxPackage       ※ Windows Server 2016以降
 wmic product get name /value ※ 表示されないバージョンとかもあり、参考レベル
 
 -- 役割・機能一覧
 Get-WindowsFeature
 servermanagercmd -query ※非推奨


***サービス一覧表示 [#e5e91240]
 sc query (起動のみ)
 sc query state= all (起動停止全部)
 sc query state= inactive (停止のみ)
 sc qc サービス名 (依存情報などの構成情報の確認)
~
サービスの依存関係について~
-このサービスが依存するシステム コンポーネント~
このサービスが起動する際に、この一覧に記載されてるサービスが起動してる必要がある。~
このサービスが停止する際は、一覧に記載されてるサービスに関係なく単独で停止する。~
~
-このサービスに依存しているシステム コンポーネント~
このサービスが起動する際に、この一覧に記載されてるサービスが起動してる必要がある。~
このサービスが停止する際に、この一覧に記載されてるサービスも停止する。~
~


***タスクスケジューラーの一覧 [#j7dbddff]
 schtasks /query /fo csv /v >> schtasks-query.csv


***ディレクトリのファイル一覧 [#hd4f0670]
 dir C:\ /S /-C | findstr /V "<DIR>"
 forfiles [/P パス名] [/M 検索マスク] [/S] [/C コマンド] [/D 日付]
引数を何も指定しない場合は、forfiles /C "cmd /c echo @file" が実行される。

|BGCOLOR(#f0f8ff):''オプション''|BGCOLOR(#f0f8ff):''説明''|
|/M|特定のファイル名のみ対象とする。ワイルドカード利用可能|
|/S|サブフォルダも対象に含める|
|/C|"cmd /c 任意のコマンド"で対象のファイルに対して任意のコマンドを実行できる|
|/D|YYYY/MM/DD または NNN で指定。先頭に-で以前。先頭に+で以降と解釈sれる |

/Cで実行するコマンド内で利用できる変数一覧
|BGCOLOR(#f0f8ff):''変数''|BGCOLOR(#f0f8ff):''説明''|
|@file|ファイル名|
|@fname|ファイル名.拡張子|
|@ext|拡張子|
|@path|フルパスでのファイル名|
|@relpath|カレントディレクトリからの相対パスでのファイル名|
|@isdir|フォルダーであればTRUE。if内部コマンドと組み合わせ「/C "cmd /c if @isdir==FALSE echo @file"」のように利用|
|@fsize|ファイルサイズ(bytes)|
|@fdate|ファイル更新日|
|@ftime|ファイル更新時間|

(例) カレントディレクトリ配下のファイル名一覧取得
 forfiles /S /C "cmd /c echo @path*@fdate @ftime*@fsize"

(例) 90日以前のタイムスタンプを持つファイルを削除
 forfiles /d -90 /c "cmd /c del @file"



***イベントログ操作 [#u0c30321]
イベントビューアから、カスタムビューにてログフィルタを作成し、プロパティの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]]]"


wmicコマンドによるイベントログ出力~
(例) システムログ、2018/04/25 00:00:00以降、レベルがエラーのログをCSV形式で出力。(+540は日本時間に合わせてる)~
 wmic ntevent where "(logfile='system' and timegenerated >= '20180425000000.0+540' and type='error')" list /format:CSV
|BGCOLOR(#f0f8ff):''指定文字''|BGCOLOR(#f0f8ff):''説明''|
|ComputerName|コンピューター名|
|LogFile|Application、Security、System、DNS Serverなど|
|Message|ログのメッセージ|
|SourceName|ソース名|
|TimeGenerated|発生時間。YYYYMMDDHHMMSS.0+540|
|Type|イベントの種類。error、warning、info|


PowerShellによるイベントログ出力
 Get-Eventlog [System | Application] [-List | -Newest | -After | -Before ]
 Get-Eventlog System -After (Get-Date).adddays(-30) | export-csv -encoding default -path C:\SystemLog.csv



***認識してないデバイスを表示する [#vf7713d1]
 set devmgr_show_nonpresent_devices=1
 start devmgmt.msc


***文字列を検索する [#s7ec1b45]
 findstr


***makecab(ファイルの分割) [#s9db2416]
 conf.txt ファイルを作成し以下のパラメータを記述する
 ------------------------------------
 .Set CabinetNameTemplate=file*.cab ;
 .Set MaxDiskSize=52428800 ;
 .Set Cabinet=on ;
 .Set Compress=off ;
 .Set DiskDirectoryTemplate= ;
 分割対象ファイルのフルパス
 ------------------------------------

 makecab /F conf.txt
 ※ MaxDiskSize(512byteの倍数である必要あり)で指定したサイズ毎に分割される。
~
#br



**Memory [#z3842e94]
タスクマネージャのメモリ使用量は、リソースモニターの使用中+変更済みの容量を合わせた容量。~
RAMMapを使用すると更に詳細なメモリ使用領域が確認できる。下記は( )はRAMMapでの表示。
|BGCOLOR(#f0f8ff):''キーワード''|BGCOLOR(#f0f8ff):''説明''|
|使用中(Active)|ページフォールトを発生させることなく直ぐに利用可能なアクティブメモリ。&br;プロセス(ワーキングセット)やデバイスドライバ、カーネルなどで使用されている使用中のメモリ|
|スタンバイ(Standby)|ワーキングセットから削除された削除されたキャッシュメモリ。&br;ソフトフォールトでActiveメモリに戻すことが可能。ディスクI/O発生させず再利用可能|
|変更中(Modified)|ワーキングセットから削除されたキャッシュメモリで使用中に変更されたデータを含むがディスクへの書き込みが完了していない|
スタンバイ+変更中の合計がタスクマネージャの「キャッシュ済」になる。~
タスクマネージャのコミットチャージは、Mapped Fileと、Metafile の Active/Standby/Modifiedすべて除外されてるように思える~
つまり、Mapped FileとMetafileは、Activeでも必要に応じて解放可能なのではないか?~

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




**MSFC(Microsoft Failover Cluster) [#b49b19d8]
***クラスター情報 [#y1347a44]
 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 を取得(クラスターノード分取得)

|BGCOLOR(#f0f8ff):''コマンド''|BGCOLOR(#f0f8ff):''説明''|
|Get-Cluster|クラスター名情報|
|Get-ClusterNode|クラスターノード情報|
|Get-ClusterNetworkInterface|クラスターインターフェース情報|
|Get-ClusterGroup|クラスターグループ情報|
|Get-ClusterResource|クラスターリソース情報|
|Get-ClusterLog|クラスターログ出力(C:\Windows\Cluster\Reports\Cluster.log)|
|Start-ClusterResource|引数に指定したリソースを ONLINE にする|
~



**シャドウコピー [#q2b598bd]
|BGCOLOR(#f0f8ff):''コマンド''|BGCOLOR(#f0f8ff):''説明''|
|vssadmin List Shadows|取得されてるシャドウコピーの一覧|
|vssadmin List ShadowStorage|記憶域関連付けの一覧(使用量やシャドウ領域のサイズ確認)|
|vssadmin List Volumes|シャドウコピーで利用できるボリュームの一覧|
|vssadmin List Providers|登録されているボリュームシャドウコピーのプロバイダー一覧表示|
|vssadmin List Writers|ボリュームシャドウコピーのサブすくライブライターの一覧|

***diskshadowユーティリティ [#t898f4b8]
List Writersコマンドでwbadminによるバックアップの -allCriticalオプション指定した時のバックアップ対象ドライブを確認できる。
~
#br




**sysinternals [#ae3111c1]
***Procmon [#f4b70962]
-フィルタ~
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 [#yfbefe8a]
1台または複数台のリモートコンピューター上で任意のプログラムを実行する~
リモート先で実行したコマンド結果を、リモート先にリダイレクトする場合は、> の前に ^(CMDの場合)や`(PowerShellの場合)をつける
 PsExec [実行ホスト] [オプション] コマンド [ ^> リモート先のファイル出力 ]
|BGCOLOR(#f0f8ff):''オプション''|BGCOLOR(#f0f8ff):''説明''|
|-d|プロセスの終了を待たずにPsExecを終了する|
|-c [-f,-v]|指定したプログラムをローカルからリモートへコピー。-fは上書き、-vは新しいバージョンの場合は上書き|
|-s|システムアカウントでプロセスを実施|
|-i|対話的なデスクトップ上でプログラムを実施|
|-<優先度>|プロセスの実行優先度。-background、-low、-belownormal、-abovenormal、-high、-realtime(低←→高)|
~
#br




**Excel [#v4b96db0]
***VLOOKUP高速化 [#xccbbd3f]
INDEXと、MATCH関数を利用する。サンプルのExcelを参照。~
#ref(VLOOKUP_sample.xlsx)


***時間操作 [#dcd5bafc]
-時間に10秒を足す
 =対象セル + 10/24/60/60
 =TIME(HOUR(対象セル), MINUTE(対象セル),SECOND(対象セル) + 10)

-時間(HH:MM:SS)を秒にする
 =対象セル/(1/(24*60*60))
 書式を [ss] にする


***文字列操作 [#f736736c]
-改行を別の文字列に置き換える
 =SUBSTITUTE(A1,CHAR(10),"改行後の文字")

-ゼロパディング
 =RIGHT(値 + 10^2 , 2) 2桁のゼロパディング


***セルを交互に色分けしたい [#s4abe53f]
 数式で偶数になる場合という条件式で色を付ける
 =MOD(ROW(),2)=0



***値の取得 [#pa32414f]
-最終行のセルの行番号を取得する
(例) 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で配列数式で計算させる。
~


***グラフ [#z057772c]
-基準線を追加
 以下のようなセルでグラフを作成し、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  いいい
 
 の場合、データソースの選択 で 「横(項目)軸ラベル」の[編集]を押下。
 時間にしたいラベルを選択する。
~


***ピボットテーブル [#oed994aa]
-日付をまとめて集計(グルーピング化)
 ピボットの日付を選択し、ピボットテーブルツール - 分析 - グループの選択 で集計単位を変更する

-前月と比較する
 比較したい値をドラッグ&ドロップで値フィールドに落とし2つ分表示させる
 2つめの値フィールドの値設定から「計算の種類」で「基準値との差分の比率」
 「基準フィールド」に日付、「基準アイテム」に前の値 を入力。
 日付フィールド単位で1つ前のセルとの比率が表示されるようになる。

-フィールドの追加
 ピボットテーブル - 分析 - フィールド/アイテム/セット - 集計フィールド
 任意の計算式(金額*1.10とか)を使ったフィールドを追加できる
 削除も同じメニューから、追加ではなく削除で行う

-集計グループの作成
 カラーコピー用紙と、コピー用紙を合計した金額を「用紙」の項目として追加したい場合など
 追加したい項目の箇所で、ピボットテーブル - 分析 - フィールド/アイテム/セット - 集計アイテム
 ※ 集計対象の数値がグループ化されてると集計できないので、グループ解除を行う
 削除も同じメニューで、名前に削除したいアイテムを入力し削除
~


***その他 [#ne80be6d]
-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」を押下。何も表示されないが改行の制御コードが入力されている


**WORD [#wbb26cc5]
***自動連番のスタイル作成 [#l3ff5a2f]
リボンメニューの [ホーム] - [アウトライン]を選択。~
連番が割り振られるリストを選択する。例えば、1.1.1 を選択すると、1.1.1 をワードに表示される。~
リストのレベル変更で、自由に 1.1 や 1.1.1.1 など変更可能。他のリストレイアウトなど自由に選べる。~
1.1.1 などとなった行にカーソルがあったまま、スタイルから(隠れてるので▼で全て表示させる)[スタイルの作成]をクリックする。~
そうすると今、選択してるスタイルを、スタイルとして保存可能。~
~
ようは選択してる行のスタイルを作成することができるということ。~
行はアウトラインなどで自由に作成すれば良い。~
~

***見出し [#k59f165f]
見出しにしたい項目を選択し、[ホーム] - [スタイル] から「見出し1」を選択する。~
見出し1 がトップレベルの見出しとなり左のナビゲーションバーにリンクされる。~
ナビゲーションバーのリンクを右クリックし「レベル下げ」を行うことで、サブ見出しとなる。~
[ホーム] - [スタイル] に「見出し2」が作成される。~
~


***箇条書き [#s989f721]
以下のような箇条書きが自動で割り振られるようにするには[ホーム]のスタイルから「リスト段落」を選択する。~
 1. ----
  1.1 ----
  1.2 ----
 2. ----
  2.1 ----
  2.2 ----
1.1 の小項目の左側の数値(1.の部分)を自動的に大項目と合わせて採番させるには~
その項目にカーソルを合わせて[ホーム]から「段落番号」をクリックする。~
更に「段落番号」のプルダウンを選択し「リストレベルの変更」からレベル2(上から2番目)を選択する。~
~
基準にするスタイルを「見出し」に変更することで目次の作成が可能となる。~
目次の階層を変更するには、右クリック「段落」から「アウトラインレベル」を変更する。~
~
目次を作成するには [参考資料] の「目次」で見出しレベルのものを選択する。~
~
#br



**PowerPoint [#w3bb4e51]
***スライドマスター [#m3ff5738]
表示メニューから選択する。~
ページ背景のレイアウトを決めるマスター。<#>を埋め込めば、現在のページが入る。~

トップ   編集 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS