2020年10月21日水曜日

powershellでgrep → Select-String "xxxx"

 AzureのTemplate.jsonでこんな行があった。

"commandToExecute": "powershell.exe Install-WindowsFeature -name Web-Server -IncludeManagementTools && powershell.exe ~~~

PowerShellからIISの役割と管理ツールをインストールしているっぽい。


手持ちのWindows10端末でPowerShellを起動して実行するとエラー。

PS C:\Users\lydian> Install-WindowsFeature

Install-WindowsFeature : 用語 'Install-WindowsFeature' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。

VMのWindowsServer2016で試しても同じエラー。
よくよく確認すると、Windows10とPowerShell(x86)では動作しないことがわかった。。

で、WindowsServer2016のPowerShellで再度確認。

PS C:\Users\Administrator\Desktop> Install-WindowsFeature -name Web-Server
Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    No             NoChangeNeeded {}

一応、それらしい応答があった。この「-name」が何かが気になったので調べた。

役割、役割サービス、または機能のインストールまたはアンインストール | Microsoft Docs

ローカル サーバーにインストール済みの利用可能な役割と機能の一覧を表示するには、「Get-WindowsFeature」と入力し、Enter キーを押します。

次にこの「Get-WindowsFeature」を試す。

PS C:\Users\Administrator> Get-WindowsFeature
Display Name                                            Name                       Install State
------------                                            ----                       -------------
[ ] Active Directory Federation Services                ADFS-Federation                Available
[ ] Active Directory Rights Management サービス         ADRMS                          Available
    [ ] Active Directory Rights Management サーバー     ADRMS-Server                   Available
    [ ] ID フェデレーション サポート                    ADRMS-Identity                 Available

こんな感じでズラズラ表示された。よくよく探すと
「[X] Web サーバー (IIS)                                  Web-Server                     Installed」
の行もあった。

長い行から目視で探すのも大変なので、これをgrepみたいにして探したいなと思ったのが始まり。

*** --- *** --- *** --- ***

PowerShellにはgrepの仕組みは無いようで、代わりに「Select-String "文字"」を使うらしい。
なので、「Get-WindowsFeature | Select-String "Web-Server"」としても結果は無しだった。。

「Get-WindowsFeature」に使えるものかがわからないので、代わりに「dir」と組み合わせて確認した。

PS C:\Users\Administrator> dir
    ディレクトリ: C:\Users\Administrator
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-r---       2020/07/30     17:26                Contacts
d-r---       2020/07/30     17:26                Desktop
d-r---       2020/07/30     17:26                Documents
d-r---       2020/07/30     17:26                Downloads
d-r---       2020/07/30     17:26                Favorites
d-r---       2020/07/30     17:26                Links
d-r---       2020/07/30     17:26                Music
d-r---       2020/07/30     17:26                Pictures
d-r---       2020/07/30     17:26                Saved Games
d-r---       2020/07/30     17:26                SearchesPS
C:\Users\Administrator> dir | Select-String "Links"
Links

 これはOK。つぎは

PS C:\Users\Administrator> dir | Select-String "es"
Desktop
Favorites
Pictures
Saved Games
Searches

と、検索文字が含まれると複数マッチすることもわかった。
日本語の場合は?

PS C:\Users\Administrator\Desktop> dir
    ディレクトリ: C:\Users\Administrator\Desktop
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2020/05/22      9:46                sakura-tag-v2.4.0-bui
d-----       2020/05/22     11:54                共有フォルダ
-a----       2020/05/22     15:59         179676 ASP.NET4.6.PNG
-a----       2020/05/22      9:47           1008 サクラエディタ.lnk

PS C:\Users\Administrator\Desktop> dir | Select-String "サクラ"
PS C:\Users\Administrator\Desktop>


日本語だとNGになった。「powershell dir select-string」でググると、

【連載】PowerShell Core入門 - 基本コマンドの使い方 [8] 文字列の一致検索 Select-String、Out-String|サーバ/ストレージ|IT製品の事例・解説記事

Out-Stringというコマンドレットに-Streamというオプションを指定すると、表示されているテキストを行単位で処理させることができるようになる。次のように見た目は一緒だが、出力されるテキストがそのままオブジェクトとして扱われるように変わっている。
Out-String -Streamを利用すると出力された文字列を対象とすることができる

という説明があって、このコマンドをdirにパイプでつなげればうまくいきそうな気がした。

PS C:\Users\Administrator\Desktop> dir | Out-String -Stream | Select-String "サクラ"
-a----       2020/05/22      9:47           1008 サクラエディタ.lnk

うまくいった!これで同じく「Get-WindowsFeature」にもできそう。

PS C:\Users\Administrator\Desktop> Get-WindowsFeature | Out-String -Stream | Select-String "Web-Server"
[X] Web サーバー (IIS)                                      Web-Server                     Installed

いけた!!

*** --- *** --- *** --- ***

同じような質問が解決した後に見つかったので、ついでに投稿しておいたw

PowerShell Select-String matches nothing despite trying everything in TFM - Stack Overflow


2020年10月18日日曜日

microSD 256GBを購入、ディスクチェック記録 その2

 今年のAmazonPrimeでFireHD10とSDカードを購入したので、その記録になります。
前回の記録をなぞりながら書いていきます。

 購入したものはAmazon限定の初耳メーカー「【Amazon.co.jp 限定】SEKC microSDXCカード 256GB A1 UHS-I(U3) V30 Class10対応 4K ULTRA HD対応 最大読出速度100MB/s 2年間保証 SDアダプタ付 SV30A1256」
 3,650円で購入しました。





Windows上で認識されています。































 まずはWindowsでフォーマット









 フォーマットが終わったので、CriystalDiskMarkでチェックします。
細かいことはよくわかりませんが、前より数値はよい感じです。














------------------------------------------------------------------------------
CrystalDiskMark 7.0.0 Shizuku Edition x64 (C) 2007-2019 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

[Read]
Sequential 1MiB (Q=  8, T= 1):    96.679 MB/s [     92.2 IOPS] < 85907.18 us>
Sequential 1MiB (Q=  1, T= 1):    95.828 MB/s [     91.4 IOPS] < 10937.53 us>
    Random 4KiB (Q= 32, T=16):     9.552 MB/s [   2332.0 IOPS] <112232.20 us>
    Random 4KiB (Q=  1, T= 1):     8.989 MB/s [   2194.6 IOPS] <   455.04 us>

[Write]
Sequential 1MiB (Q=  8, T= 1):    86.202 MB/s [     82.2 IOPS] < 96152.52 us>
Sequential 1MiB (Q=  1, T= 1):    88.925 MB/s [     84.8 IOPS] < 11765.71 us>
    Random 4KiB (Q= 32, T=16):     3.725 MB/s [    909.4 IOPS] <185515.47 us>
    Random 4KiB (Q=  1, T= 1):     3.620 MB/s [    883.8 IOPS] <  1129.85 us>

Profile: Default
   Test: 1 GiB (x5) [Interval: 5 sec] <DefaultAffinity=DISABLED>
   Date: 2020/10/18 12:26:28
     OS: Windows 10 Professional [10.0 Build 18363] (x64)





 ディスク内容の消去
これも前回と同じく、コマンドプロンプトでdiskpartを実行、そのあとの画面で
・list disk
・select disk x
・list partition
・clean
・list disk
を実行していきます。



















 前回と同じく未フォーマット状態になりました。

















 Check Flashでディスクチェック。これも前回と同じ方法で実施します。
・右クリック「管理者として実行」
・「物理デバイスとして」
・「読み書きテスト→最小パターン」
・「フルパス1回」


















 3時間少しして完了しました。
パス #1 が完了しました。 0 個のエラーが検出されました。
テストが完了しました。 合計 0 個のエラーが検出されました。




































 今回も特に大きな支障は無さそうでした。よかった!