ラベル Windows の投稿を表示しています。 すべての投稿を表示
ラベル Windows の投稿を表示しています。 すべての投稿を表示

2016-02-12

ファイルのタイムスタンプを他のファイルと同じにする

Linuxでいうところのtouchで他のファイルを参照してタイムスタンプを揃えるみたいなことをWindowsでやってみようという訳です。

Linuxならこんな感じ
$ touch target.txt -r source.txt

WindowsだとPowerShellを使って、次のような感じでとりあえずはできました。
もっとスマートな方法あるのかな・・・(´・ω・`)

Set-ItemProperty target.txt lastwritetime -value $(Get-ItemProperty source.txt).lastwritetime
Set-ItemProperty target.txt creationtime -value $(Get-ItemProperty 0source.txt).creationtime

2014-06-23

Powershellのリモート接続で嵌った件

Powershellでリモート接続するには



接続先サーバーでリモート接続を受け入れるための設定
Enable-PSRemoting –force


接続元のサーバーで接続先を信頼するための設定
Set-Item WSMan:\localhost\Client\TrustedHosts -Value *
をしてあげれば繋がるとの情報があちこちに書かれていたのだが、次のようなエラーがでてどうも繋がらない(´・ω・`)
PS C:\> Enter-PSSession -ComputerName xxxx -Credential xxxx\Administrator
Enter-PSSession : リモート サーバーへの接続が失敗し、次のエラー メッセージが返されました。WinRM クライアントは、リモート WS-Management サービスから HTTP 状態コード 403 を受け取り
ました。詳細については、about_Remote_Troubleshooting のヘルプ トピックを参照してください。
発生場所 行:1 文字:16
+ Enter-PSSession <<<<  -ComputerName xxxx -Credential xxxx\Administrator
    + CategoryInfo          : InvalidArgument: (xxxx:String) [Enter-PSSession]、PSRemotingTransportException
    + FullyQualifiedErrorId : CreateRemoteRunspaceFailed
PS C:\> winrs -r:http://xxxx:5985 -u:xxxx\Administrator "dir c:\"
'xxxx\Administrator' のパスワードを入力してください。'http://xxxx:5985' に接続します:

Winrs error:WinRM クライアントは、リモート WS-Management サービスから HTTP 状態コード 403 を受け取りました。
試行錯誤しているうちに、Proxy経由で接続する設定が入ってしまっているのでは・・・と思い始め確認してみた
PS C:\> netsh winhttp  show proxy

現在の WinHTTP プロキシ設定:

    プロキシ サーバー:  172.16.11.4:8089
    バイパス一覧     : (なし)
案の定入ってました・・・
これを無効に設定してあげると無事に繋がりましたヾ(*・∀・)ノ"
PS C:\> netsh winhttp reset proxy

現在の WinHTTP プロキシ設定:

    直接アクセス (プロキシ サーバーなし)。
PS C:\> netsh winhttp  show proxy

現在の WinHTTP プロキシ設定:

    直接アクセス (プロキシ サーバーなし)。

2014-06-17

Windowsのバッチファイルで、ファイルの文字列監視を実現

Linuxだとtailコマンドを利用すれば良いのだけれど、Windowsの標準コマンドにはtailコマンドが存在しない

そこでラベルでtail処理を作成し、CALLで呼び出すことでサブルーチンとして実装している

wuaclt.exeでWindowsUpdateの更新を確認し、そのログにレポートの完了が出力されたら処理終了といった具合のバッチファイルだとこんな感じ

@echo off
wuauclt.exe /detectnow /reportnow

:LOOP
timeout 5
CALL TAIL "%windir%\WindowsUpdate.log" 1 | find "CWERReporter finishing event handling" && GOTO END || GOTO LOOP

:TAIL
for /F "tokens=1,2,3 USEBACKQ" %%A in (`find /V /C "" %1`) do set FL=%%C
set /A TAIL=%FL%-%2
more +%TAIL% %1
exit /b

:END
echo "Finish."

これを実行すると
0 秒待っています。続行するには何かキーを押してください ...

0 秒待っています。続行するには何かキーを押してください ...
2014-06-17      13:31:26:149     592    2274    Report  CWERReporter finishing event handling. (00000000)
"Finish."

な感じで正常に動いていることが確認できた


Windows7だとこの方法で実行できたが、Windows Server 2008だと

"バッチ スクリプト外でバッチ ラベルを呼び出すことはできません。"

という感じで怒られてしまった(´・ω・`)



そこで、tail処理は別のスクリプトとして実装してみた



tail.bat
@echo off
for /F "tokens=1,2,3 USEBACKQ" %%A in (`find /V /C "" %1`) do set FL=%%C
set /A TAIL=%FL%-%2
more +%TAIL% %1

@echo off
wuauclt.exe /detectnow /reportnow

:LOOP
timeout 5
cd /d %~dp0
CALL .\tail.bat "%windir%\WindowsUpdate.log" 1 | find "CWERReporter finishing event handling" && GOTO END || GOTO LOOP

:END
echo "Finish."

※cd /d %~dp0はこのスクリプトがあるディレクトリへワーキングディレクトリを移動するための処理

wuauclt.exeのスイッチ一覧

スイッチ意味
/DetectNowただちに検出を開始する
/ReportNowただちにWSUSへのレポートを実行する
/RunHandlerComServer
/RunStoreAsComServer
/ShowSettingsDialog更新プログラムのインストール方法を選択するダイアログを表示
/ResetAuthorization
/ResetEulas
/ShowWUWindowsUpdateのUIを表示する
/ShowWindowsUpdate上に同じ
/SelfUpdateManaged更新プログラムの確認を実行する?
/SelfUpdateUnmanaged更新プログラムの確認を実行する?
/UpdateNow
/ShowWUAutoScan更新プログラムの確認をWindowで実施
/ShowFeaturedUpdatesインストールする注目の更新プログラムを選択するWindowを表示
/ShowOptions更新プログラムをインストールする方法を選択するWindowを表示
/ShowFeaturedOptInDialog新しいソフトウェアに関する詳しい情報の通知を希望するか選択するダイアログを表示
/DemoUI

2013-04-26

RightScale on Windowsで任意のSSHクライアントを利用する

Settings->User Settings->SSH->Client Applicationのところで

のように設定しておいて、PuTTYを入れておきます。
こうすることでRightScaleからSSH Consoleを開こうとすると、PuTTYを起動してくれました。
ところが、Version 7 Update 21を入れたらPuTTYを起動してくれなくなってしまったので、この際だから愛用しているrloginを起動してくれないものかと試行錯誤してみました
その結果、どうやらsshコマンドを
-i "c:\users\xxx\.rightscale\yyyyyyy" rightscale@aaa.bbb.ccc.ddd
というオプション付きで呼び出そうとしているようです
なので、この引数をうまいこと加工して任意のsshクライアントに渡してあげれば任意のsshクライアントを呼び出すことが可能そうです

1.パスの通っているところにssh.batを作成
※私の場合はc:\windows\ssh.batとして作成
※3番目の引数rightscale@aaa.bbb.ccc.dddからIPアドレス部分だけを抽出して/ipスイッチとしてrloginに渡してあげています
@echo off
for /f "tokens=1,2 delims=@" %%a in ("%3") do (
 start "-" "C:\Program Files\RLogin\Rlogin.exe" /inuse /entry RightScale /user %%a /ip %%b
)
exit
2.rlogin側で呼び出す設定を作成

Server Addressのところは/ipスイッチから渡ってくるので空欄にして作成
Passwordのところは実際には鍵ログインするので使わないけど、空欄だと聞かれてしまうので適当に入力
SSH Identity Keyのところは、SSH Consoleを立ち上げようとするとC:\Users\xxx\.rightscale\yyyyyyみたいな鍵ファイルが一時的に生成されるので消えないうちにどこかへ退避してそれを指定
この状態でSSH Consoleを起動しようとすると

と聞かれるのではい(Y)を選択
するとめでたくrloginが起動して、SSH接続できますヾ(*・ω・)シ