Search This Blog

[Powershell] 学習とまとめ

get-alias, 別名(エイリアス)を確認することができる。
PS C:\> get-alias| gm -m p*

   TypeName: System.Management.Automation.AliasInfo

Name                MemberType     Definition
----                ----------     ----------
CommandType         Property       System.Management.Automation.CommandTypes CommandType {get;}
Definition          Property       string Definition {get;}
Description         Property       string Description {get;set;}

PS C:\> get-alias -Definition get-alias

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           gal -> Get-Alias

PS C:\>


# Cmdletなどの詳細などが確認できるhelpの表示方法
 Get-Help About_*
 Help About_pipeline

# -command は省略しても認識するとの情報あり
 PowerShell [-command] ""


batからPowershellを呼び出す場合のforeach-Objectは%%{}のようにbatの%の二重化ルールを忘れないようにする。

batと同様に癖があるように感じるのは、私がこれらをあまりよく知らないということが原因のようだ。
コマンドレットという私には聞き慣れないカタカナも手伝ってか、ものすごい抵抗を感じている。
でも覚えればbatではなかなか実現できなかったような処理でも容易に作成できそうだ。
Objectというものに慣れるまではそこそこ苦しみそう。
get-filehash * -a sha1| group hash

Count Name                      Group
----- ----                      -----
   21 DA39A3EE5E6B4B0D3255BF... {@{Algorithm=SHA1; Hash=DA39A3EE5E6B4B0D3255BFEF95601890AFD80709; Path=C:\...

(Get-filehash *.log, *.dat -a sha1| select hash).gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array


(Get-filehash *.log, *.dat -a sha1| select hash)| gm


   TypeName: Selected.System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
Hash        NoteProperty string Hash=2FC4FBC63678171A8AA76A78B3E2C9B27356153D

#いたるところに書式の簡略化ができるところがある。
#Select-StringはAliasでslsと書くこともできる。オプションなども同じ字面になるものがない部分までで認識してくれるよう。
#$_ は|で渡されたものを表す。


gal

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           gal -> Get-Alias

1..3 | Foreach-Object -PipelineVariable Left -Process { $_ } |
              Foreach-Object -PV Right -Process { 1..5 } |
              Foreach-Object -Process { "$Left * $Right = " + ($Left * $Right) }


;について、一行に複数cmd記述する場合の区切りとなる。改行する場合には不要らしい。

PowerShell

コマンドがやたらに長く不格好、なにより一から覚えなければならず、使いづらく面倒だと感じ、嫌いだった。
慣れてきたことで抵抗が薄れ、便利だと感じることも増えた。
about_Escape_Characters

Windows PowerShell Profiles

Start-Process cmd "/K echo %userprofile%"

環境変数

$env:USERPROFILE,$Home,sl ~ は同じ。
Start-Process cmd "/K echo %userprofile%"


  • Import-csv で読み込むファイル内に空白行がある場合でも、Errorとなるということもなく、データ行のみ取り込まれる。
  • Read-Host で入力プロンプトで値を取得できるらしい。