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問ぐらいでお蔵入りでした。
感謝です。
あと、短期間に一気に解ける分量ではなかったので、
かえって力が抜けて良かったかもしれません。