【Windowsコマンド】コマンドプロンプトで無限ループ

Linuxのwhileでの無限ループに相当。
以下は、5秒おきにDドライブの容量を監視するコマンド。
ちなみにfor文で指定する(x,x,x)を空にすることで可能になっている模様。

timeout

【Windowsコマンド】バッチファイルのif文でAND条件を使う

バッチだとANDやORのオプションがないため、疑似的に作るしかない。
以下のように環境変数を用いると使いやすい。

【Windowsコマンド】コマンドでのサービス一覧取得

Windowsでのコマンドでのサービス一覧取得方法。

コマンドプロンプトでの取得方法

sc query state= all

service_000001

どうせなら1行に全項目表示してほしいんだけどなぁ

PowerShellでの取得方法

Get-Service

service_000002

 

Export-CSVコマンドをパイプで渡すことで、csv形式で取得可能

service_000004 service_000003

 

やっぱ、コマンドプロンプトよりPowershellの方が勝手がいいね。

【レジストリ】目的のレジストリ値の特定方法

目的のレジストリ値の見つけ方について。
よく、業務内でベンダからレジストリxxを設定してと言われてたけど、自分で見つけられるじゃん。という備忘録。

たとえば、インターネットオプションのスタートアップ設定のレジストリ値を見つけたい場合。
201611251431_000000

 

① まず、だいたいのあたりをつけて、レジストリをエクスポートする。
今回はインターネットオプション関連なので、以下レジストリが含まれてそう。
201611251434_000000

②GUI画面で対象項目の設定を変更する。

 

③再度、①と同様の階層からレジストリ値をエクスポートする。

 

④設定前、設定後で差分比較を行う。
すると、それらしい箇所の値が変わっていることがわかる。
201611251425_000000

 

⑤実際に差分のあった階層にいってみると、該当項目が見つかるはず。
201611251425_000002

 

念のため、値を戻してみたりして、実際にGUI画面の値が変わったらビンゴ。

【Powershell】Powershellで実行コマンドのリターンコードを取得する

DOSコマンドにおける%ERRORLEVEL%、bashにおける$?のようなコマンドのリターンコードを取得する。
Linuxと同じなので覚えやすい。

一番最後に実行したコマンドのあとに「$?」でTrueかFalseが返却される。

コマンド成功時

201611241719_000000

 

コマンド失敗時

201611241719_000001

 

リターンコードのエラー判定例

201611241728_000000

【Powershell】Powershellでの左からxx文字目、右からxx文字目の文字列を取得する

たとえば$aにabcdeの文字列を入れた場合。
201611241010_000000

左から1文字

201611241013_000000

 

右から1文字

201611241013_000001

 

書式は、$a.Substring(切り出しを始める値、切り出しを終える値)

【Powershell】Containsでの真偽判定がうまく動作しないときの対処方法

Powershell初心者にはまりやすいと思われ。
バッチでは特に意識しなかったけど、Powershellでは型の仕組みを理解する必要があるね。

失敗例

変数$zにコマンド結果を格納して、その中に「Users」文字列があれば、Trueを返したい。
が、エラーが出力。また、タブ補完もできなかった。

201611222026_000000

そうだと思い、型を確認すると、配列型になっている。

201611222026_000000_2

 

成功例

変数$zにあらかじめ型[string]を付与してあげることで、真偽判定ができるようになった。

201611222027_000000

 

おそらく変数化する際に改行コードが含まれていると配列と判断されてしまうのかな。

【PowerShell】Invoke-Commandで実行コマンドの書き方

Invoke-Commandへの実行コマンドの渡し方。
知らない人は必ずやってしまうと思われるトラップ。

失敗例
-scpritblock内の{}にコマンドと変数化した引数を記載。
引数がnullだと・・・

invoke3

 

成功例
-scpritblock内の{}にコマンドに引数として$args[0]とし、invoke-commandのオプション-ArgumentList $pathを記載する。
コマンドは成功している模様。

invoke4

 

オチとしては、コマンドに引数を渡すときは配列で渡す必要があるのだと。
ヘルプを見てみるとそれらしいことが確かに書いてある。
invoke5

3時間くらいいろいろ格闘してたけど、ちゃんとヘルプ読まないとだめですね。

【Windows】WMICを利用したリモートでのコマンド実行

WMICを利用したリモートでのコマンド実行
RDPでのシングル操作が基本となるが、コマンド化できるところはどんどんやったほうがいいと思う。

ただ、厳密に言うとサーバ側に配置されているコマンドが記述されたバッチファイルを実行することになる。
ダイレクトにコマンドを記述してもどうもうまくいかない・・・

まずは、クライアント端末からコマンド実行

%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%ef%bc%91

サーバ側で実行されるtest.bat
ファイル名が日時になっているファイルをEドライブ直下へ出力する。

dsmove000003

テキストファイルが出力されている。

dsmove000004 dsmove000005

バッチの中身はどんなコマンドでもOK。
/node:に与えるパラメータをリスト化するなどしてfor文で回せば、より効率的になるね。

【Windowsコマンド】dsmoveコマンドで所属コンピュータを移動する

大量のOUが存在する場合、とても手作業だとやっていられない。
男らしくコマンドでやりたいところ。
※PowershellのSet-ADUserではオプション不足のためできない模様

「Computers」に所属している「K-PC01」を移動する。
移動先は「OU=test,OU=Client」とする。

dsmove000000

所属確認コマンド

所属変更コマンド

GUIでも確認OK。
dsmove000002