Excelで大文字小文字を区別して集計する

Excelのピボットテーブルが大文字と小文字を区別しない仕様だったため、元の文字列を文字コード列に変換してなんとか区別させてみる。

元の文字列(ここではセルA1)に対して、文字コード列を生成。

=CONCAT(DEC2HEX(CODE(MID(A1,SEQUENCE(1,LEN(A1)),1))))

生成した文字コード列を基準に集計すれば、大文字小文字は区別される。文字コード列は16進数にしたところで大してユーザフレンドリーでもないので、DEC2HEXは省略しても良いかもしれません。

やっていることは、MIDで文字列を1文字ずつ分解(このときSEQUENCEで開始位置1~文字数までの数値の配列を作成)、CODEで各文字を文字コードに変換し、DEC2HEXで16進数に変換。ここまでは分解した文字単位で処理し、最後にCONCATで結合して文字列にする。

CONCATを使用しているため、Excel 2016以降で利用できます。

PowerShellでクリップボードの画像を日時ベースのファイル名で保存

Alt+PrintScreenでウィンドウ単位のスクリーンショットを撮ったときなど、クリップボードに入っている画像にファイル名を自動生成してカレントディレクトリに保存する。

変数インクリメントしていけば連番もできそう。

(Get-Clipboard -Format Image).Save((Join-Path (Get-Location) ("ss_{0:yyyyMMdd-HHmmss}.png" -f (Get-Date))))

Saveメソッドに渡すファイル名はフルパスでないと指定したパスに保存されず、ファイル名のみではユーザのプロファイルフォルダ直下に保存される。なぜ…

Alpine Linuxでopen-vm-toolsを自動起動する

導入

apk add open-vm-tools
apk add open-vm-tools-guestinfo
apk add open-vm-tools-deploypkg

サービス登録

rc-update add open-vm-tools boot

直ちに起動する場合

rc-service open-vm-tools start

注意
Alpine Linux 3.9からopen-vm-toolsのパッケージがcommunityリポジトリに移っていました。インストール直後の状態でパッケージが見つからない場合はリポジトリ設定を見直してcommunityリポジトリが有効になっているか確認してください。

2022-10-10追記
https://wiki.alpinelinux.org/wiki/Open-vm-tools を参照し導入するパッケージ追加、サービス登録コマンド修正

PowerShellでパスワード簡易生成

外部ライブラリを使用しないワンライナー

-join (0..7 | %{([char](Get-Random (0x21..0x7e))).ToString()})

パスワードに使用できそうな文字から8文字のパスワードを生成する。ループ回数の調整でパスワード長を変更可能。

Zabbix更新

Zabbix 3.0がリリースされたので、2.4からアップデート。

公式ドキュメントでは、サーバとエージェントを停止後バイナリを上書き導入してサーバを起動すればデータベースが自動移行されるとのこと。

CentOS 7環境にて以下のコマンドでさっくりアップデート。

systemctl stop zabbix-agent
systemctl stop zabbix-server
yum remove zabbix-release
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum clean all
yum update
systemctl start zabbix-server
systemctl start zabbix-agent

yum clean allを実行しないと、新しいバージョンを検出してくれなかった。

Fedora Server 21 + MATE Desktop

やってみたことの記録(ところどころうろ覚え)

Fedora Server 21を通常インストール 追加のコンポーネントは特になし

インストール後CUIで起動 まずは全パッケージ更新

yum update

早速MATEをインストール→失敗

yum groups install 'MATE Desktop'

インストール済みのfedora-release-serverパッケージとfedora-release-nonproductパッケージがコンフリクトしていたので削除

yum remove fedora-release-server.noarch

firewalldを依存で巻き込むが、構わず一緒に削除

改めてyum groups install ‘MATE Desktop’

デフォルトではmulti-userで立ち上がるのでXが立ち上がらない

systemctl get-default
multi-user.target

grapicalに変更

systemctl set-default graphical.target

再起動

shutdown -r now

再起動後Xのログイン画面が起動

ついでに各種ディレクトリを英字表記に

LANG=C xdg-user-dirs-gtk-update

LXDEやKDEなど、他のデスクトップ環境でも同様にインストールできそう

PowerShellでフォルダ間比較

2つのフォルダ間で、ファイル単位の比較をしてみる。

前提として$refに比較元フォルダのパス、$difに比較先フォルダのパスを設定している。

diff -ReferenceObject @(ls -Recurse $ref | where {-not $_.PSIsContainer} | gc) -DifferenceObject @(ls -Recurse $dif | where {-not $_.PSIsContainer} | gc)

ファイル数が多いとかなり時間がかかるので注意。文字化けする場合は、gcのオプションに-Encoding UTF8を追加する。

OSごとに違うtracerouteのコマンド名

紛らわしいのでメモ

ネットワークの経路を調べるtracerouteだが、OSごとにコマンド名が違ってとても紛らわしい

OSコマンド名
Windowstracert
Linuxtraceroute
z/OStracerte

他のOSではどうなんだろうか。見つけたらメモしておこう。

PowerShellを使ってWindowsログオン時の認証に使用したドメインコントローラを調べてみる

Windowsのログイン時認証に使用したドメインコントローラを調べる方法は、ネットを探せば出てくるもののいまいち決め手に欠ける印象。

とりあえずLOGONSERVER環境変数を調べるよりは確実そうなVBScriptのサンプルを見つけたので、PowerShell用に変換して実行してみた。

([ADSI]"LDAP://rootDSE").dnsHostName

上記コードを実行するとドメインサーバ名が表示されているので、きちんと情報は取れているのだろう。複数DC構成の環境で使えれば言うことないのだが、現状では確認不能。機会があったら確認してみよう。

Windowsのイベントログを他のPCから閲覧する

Windows 7のイベントビューアーで他のPCのイベントを見るために、少し調べてみたのでメモ。

イベントビューアーの「操作」→「別のコンピューターへ接続」で、他のPCのホスト名なりIPアドレスなり指定すれば解決。と言いたいところだが、一見接続がうまくいったように見えて、いざログを見ようとしたときに適切な権限がないとログを見ることができない。

もちろんAdministratorの権限を振りかざせばログを見ることができるのだが、ログだけ見たいという用途ではあまりにも権限が強すぎる。

というわけで、ログを見るために適切な権限を探してみたところ、ビルトイングループとして"Event Log Readers"というものが用意されていることを発見。このグループに属しているユーザの資格情報を用いて他のPCに接続すれば、ログを閲覧することができた。

PowerShellと組み合わせると、色々応用できそう。