PowerShellで表示が切れるのを防ぐ
PowerShellで表示が切れるのを防ぐ
PowerShellでコンソール上に値を表示させたり、テキストとして出力させたりするときに、 一定の長さで表示が切れて「...」となってしまうのを防ぎたい。
長く不便に感じていたにも関わらず全然情報を見つけられなかったのですが、 別件の調べものをしていた際に偶然発見しました。
こちらのブログに情報がありました。(ありがとうございます) http://cncn-us.hatenablog.com/entry/2016/10/18/175657
たとえば
PS > Get-EventLog Application -Newest 1 Index Time EntryType Source InstanceID Message ----- ---- --------- ------ ---------- ------- 4981 12 13 22:30 Warning EventSystem 2147488002 ソース 'EventSystem' のイベント ID '-2147479294' の説明が...
となり、「Message」が全て表示されません。 これはOut-Fileでテキストに表示させても同じで(改善される場合もある)、 「Export-Csv」を使ってcsvファイルに出力することで、何とか回避していました。
「...」にせずに全て表示させるにはこのようにします。
PS > Get-EventLog Application -Newest 1 | Format-Table -AutoSize -Wrap Index Time EntryType Source InstanceID Message ----- ---- --------- ------ ---------- ------- 4981 12 13 22:30 Warning EventSystem 2147488002 ソース 'EventSystem' のイベント ID '-2147479294' の説明が見つかりません。必要 なレジストリ情報またはメッセージを表示するメッセージ DLL ファイルがローカル コ ンピューターに存在しない可能性があります。または、これらのデータへのアクセス許 可がユーザーに与えられていない可能性があります。次の情報はイベントの一部です:' 80010105', 'ConnectionMade', '{D5978620-5B9F-11D1-8DD2-00AA004ABD5E}', '', '', 'ConnectionMade', ''
上記参考にさせていただいたブログでは「-Wrap」オプションを使わず、「| Out-String -Width 4096」としていました。 もちろんそれでもOKです。「-Wrap」オプションは、長い場合にその項目の欄に改行して表示してくれるオプションです。
PS > Get-EventLog Application -Newest 1 | Format-Table -AutoSize | Out-String -Width 4096 Index Time EntryType Source InstanceID Message ----- ---- --------- ------ ---------- ------- 4981 12 13 22:30 Warning EventSystem 2147488002 ソース 'EventSystem' のイベント ID '-2147479294' の説明が見つかりません。必要なレジストリ情報またはメッセージを表示するメッセージ DLL ファイルがローカル コンピューターに存在しない可能性があります。または、これらのデータへのアクセス許可がユーザーに与えられていない可能性があります。次の情報はイベントの一部です:'80010105', 'ConnectionMade', '{D5978620-5B9F-11D1-8DD2-00AA004ABD5E}', '', '', 'ConnectionMade', ''
PowerShellでADのオブジェクト検索(メンバサーバーから)
ドメインコントローラーから検索する場合は「Get-ADUser」や「Get-ADComputer」を使えばよいのですが、 DCを触れない、AD管理PowerShellもインストールできない場合かつ単純に「ユーザーが存在するかだけ知りたい」 といったシチュエーションで、手軽にユーザーと存在するOUを表示させます。
参考URL、というか今回の記事はここをまとめただけ https://gallery.technet.microsoft.com/scriptcenter/767d313c-645c-4c62-b021-3772091a8c61
◇ ユーザー一覧を表示
PS > ([ADSISearcher]"ObjectCategory=user").FindAll() | Select Path
こんな感じで出力されます。
LDAP://CN=Administrator,CN=Users,DC=hoge,DC=local LDAP://CN=Guest,CN=Users,DC=hoge,DC=local LDAP://CN=krbtgt,CN=Users,DC=hoge,DC=local LDAP://CN=testUser,OU=TestOU,DC=hoge,DC=local
"ObjectCategory=user" を"ObjectClass=user"にすると、コンピューターオブジェクトも出力されます。 純粋にコンピューターオブジェクトだけを出力する場合は、次項のコマンドです。
◇ コンピューターオブジェクト一覧を表示(ABC順でソートもしてみます)
PS > ([ADSISearcher]"ObjectClass=Computer").FindAll() | Select Path | sort Path
ダブルクォートで囲まれているところは検索のフィルターを記述できます。(詳しくは参考URL) 名前に「test」を含むユーザーで検索してみます。
PS > ([ADSISearcher]"(&(ObjectCategory=user)(Name=*test*))").FindAll() | Select Path
もう一つ、上記は「[ADSISercher]型アクセラレーター」というのを使っています。 それを使わずにオブジェクトを作成する場合は、このようになります。 (出力内容、形式は同じです)
$hoge = New-Object DirectoryServices.DirectorySearcher $hoge.Filter = "(&(ObjectCategory=user)(Name=*test*))" $hoge.FindAll() | Select Path
1行で書くこともできます。
(New-Object DirectoryServices.DirectorySearcher "(&(ObjectCategory=user)(Name=*test*))").FindAll() | Select Path
どーでもいい情報ですが、参考URLの「Scripting Guy」は冒頭と末尾にちょっとひねった挨拶を入れるので、 なかなか面白いです。
Windows Serverの各種パラメーターを調べるPowerShellコマンドレット
◇ 役割と機能
Get-WindowsFeature | Out-File "C:\work\Yakuwari.txt" -Encoding Default Get-WindowsFeature | Export-Csv "C:\work\Yakuwari.csv" -Encoding Default
「Out-File」で出力するのと「Export-Csv」で出力するので出力される項目が違うので注意。 追加されている/いないを見たいだけなら「Out-File」の形式が見やすくてよいです。
以降は原則どちらかのみ記載していきます。
◇ 更新プログラム一覧
Get-Hotfix | Select-Object HotFixID | Out-File "C:\work\Hotfix.txt" -Encoding Default
◇ 環境変数一覧
Get-ChildItem env: | Select-Object Name,Value | Export-Csv "C:\work\Env.csv" -Encoding Default
「Out-File」で出力すると、Value欄が切れてしまうのが残念。(項目の桁数を増やす方法を知らんので) 「Export-Csv」で出力するとすべて出力されます。
◇ インストールされたプログラム一覧
Get-WmiObject -Class Win32_Product | Select Name,Version,Vendor | Out-File "C:\work\Program.txt" -Encoding Default
GUIの「プログラムと機能」に近い形式で出力されます。
PowerShellでGrepっぽいこと
以下例とします。
あるフォルダ下すべての「.txt」ファイルのうち記載内容に「Get」を含むファイルとその行数を表示する
ただし、「Test.txt」は対象外とする
◇ コマンド
PS > dir -Recurse .\*.txt -Exclude "Test.txt" | Select-String "Get"
◇ 表示
Test1.txt:2:GetGoal
Test2.txt:3:Get-Command
「次の一手」で覚える432を解いた
他の方のブログに触発されて正答率をカウントしつつ解いた
「次の一手」で覚える将棋基本手筋コレクション432
ようやく1周目が終了しました。
章ごとではなく総数しかカウントしていませんでしたが、
181問/432問 正解で、正答率約42%。
正答の基準として、「その後の手はよく分からないけれどたまたま当たった」
は不正解扱いとしました。
大体半分の200問の時点ではちょうど50%正解だったのですが、
後半の「中盤編Part2」がやたら難しく、一気に正答率が下がりました。
「寄せが見える本」を読んでいたせいか、
中盤編よりも終盤編のほうが正答率が高い感じでした。
この「正答率をカウントしつつ解く」やり方、
最後まで続けるモチベーション、繰り返し解くモチベーションにもなって
いいですね。
「次の一手」で覚える将棋基本手筋コレクション432の感想としては、
「キラーパスとなる手を探す訓練」といった感じで、
実戦でいかにそのチャンスを逃しているか、を実感します。
(本の表紙に「基本手筋」「比較的易しい次の一手問題」と書いてあった気がするが、
多分気のせいだな)
一方で、ではそういった手が見当たらなかったときに
どんな手を指せば一方的に悪くならないか、
自分のレベルだとまずそちらのほうが重要な気もします。
そして長かった・・・
買ったのは発売直後なので、およそ5か月コツコツと。
上記のブログに刺激を受けていなかったら、10問ぐらいでお蔵入りでした。
感謝です。
あと、短期間に一気に解ける分量ではなかったので、
かえって力が抜けて良かったかもしれません。
市川市民将棋大会に参加してみた2016 その2
続いて他の方のブログを参考に、自分の戦績ダイジェストを。
1戦目: 先手:筋違い角風 VS 後手:(自分)居飛車力戦 →負
相手は60代ぐらいの男性。3手目に角交換されて筋違い角を打たれるも、何故か歩を取らずに角を引く。その後はこちらは盛り上げて角に当てつつ矢倉に持っていったら、相手にちゃっかり穴熊に組まれ、最後は陣形の差で負け。中盤以降はずっと苦しいと思っていたが、相手も終盤入り口まではいいとは思っていなかったとのこと。
2戦目: 先手:(自分)先手番中飛車 VS 後手:居飛車6三銀型 →勝
相手は70代ぐらいの男性。中盤7七にある角の頭を攻められて防戦一方になり、こちらの飛車角が抑えこまれる苦しい展開。何とか作れた馬を銀銀の二枚替え、と思いきや相手の見落としでプラス金の三枚替えとなり、後はそれらを相手の玉の周りにペタペタ打って寄せきった。
3戦目: 先手:(自分)先手番中飛車 VS 後手:居飛車6三銀型 →勝
相手は80代ぐらいの男性。序盤相手が角を引いて、一瞬使いにくくなったところで仕掛け、多少強引ながらも一気に押し切った。最後は7手詰めをきっちり読めた。
4戦目: 先手:(自分)先手番中飛車 VS 後手:居飛車6三銀型 →勝
相手は小学校低学年ぐらいの男の子。やはり角頭を攻められたが、うまいこと角交換してさばけた。相手はこちらが大人ということで萎縮してしまったかもしれない。
5戦目: 先手:(自分)先手番中飛車 VS 後手:居飛車棒銀 →負
相手は小学校高学年ぐらいの男の子。棒銀をうまくかわしてこちらの銀を8筋に成り込めたものの、その銀が遊ぶ展開に。それでも中盤は一瞬の隙をついて攻め込めたが、相手が飛車も受けに投入する展開に戦力が足りず息切れ。気がつけば相手の陣は受けにベタベタ打った駒たちで難攻不落になっており、こちらの陣はペラペラ。反撃をくらって撃沈。
最終戦勝てば入賞の芽もあったのでちと悔しいですが、
また来年以降、強くなって挑戦します。
今回良かったのは、角筋を見落とすなどのいわゆる「ただやん」が無かったこと含め、
後から「なんじゃそりゃ」という手が無かったこと。実力を出しきった気がします。
弱点も見えてきて、やはり中盤、
こちらの狙いの手、相手の応手とも複数洗い出して比較検討する姿勢が
まだ完全に身についておらずに手拍子で指しがちなところ。
あとは大会ならではですが、
初戦が長引いて周りで二戦目が始まると、別にじっくりやればいいのに何となく焦ってしまうこと、
逆に5戦目は頭が疲れているのか雑になりがちなところも改善点です。