MyUtils

View on GitHub

PowerShellについてまとめる

配列、マップ等あるが、長くなるため別ページに書く。 参考は以下参照

拡張子はXXX.ps1

ここではPowerShellについての文法等をまとめる まず、特徴としてPowerShellで扱われるものは,
戻り値も含めてほとんどすべてオブジェクトです。

また、パイプ処理を使うことができます。

# 例 🌟フォルダ内のファイルを一括でリネームしたい場合
Dir | Rename-Item -NewName {$.name -replace "aaa","bbb"}

PowerShellを書くためには少し慣れが必要ですので, 普通のユーザーがPowerShellでメリットを得られることは少ないかも知れません。

それよりも,システムを管理している人が,何らかの処理を自動化したいと思っているのであれば,そのような場合にPowerShellはうってつけです。



開発環境(ISE)について

PowerShell には、開発環境として ISE (あいす)というエディタが標準で用意されている。

入力補完やデバッガ機能が存在するので、 PowerShell のスクリプトを書くときは、基本 ISE を使用することになると思う。

# 単一行コメント

<#
複数行
コメントも可能
#>


スクリプトを実行できるようにポリシーを変更する

PowerShellが動かない場合、以下が考えられる。

  1. ポリシー設定が不十分
  2. powershellのバージョンが古い/インストールが壊れている

ポリシーを変更するには、 Set-ExecutionPolicy というコマンドレットを使用する。 RemoteSigned を指定した場合、ローカルで作成されたスクリプトは無条件で実行できるが、ネットワークから入手したスクリプトは署名が無ければ実行できない(Windows Server 2012 R2 はこの設定がデフォルト)。

> Set-ExecutionPolicy RemoteSigned
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): y


変数/型について

# 🌟 "$"を先頭につけることで、変数として認識する
$hoge = "Hoge"
echo $hoge

# 🌟 ${<任意の文字列>}として定義することもできる。
${日本語 変数} = "ほげ"
echo ${日本語 変数}
[string] $str = "hoge"
[int] $num = 100

echo $str.GetType()
# string型であれば、大文字に変換して出力すると言ったことも
# echo $str.ToUpper()

echo $num.GetType()
# 🌟  出力結果
IsPublic IsSerial Name                                     BaseType            
-------- -------- ----                                     --------            
True     True     String                                   System.Object       
True     True     Int32                                    System.ValueType
$a = "aaa"

echo "hoge $a" #🌟変数の展開が行われる
# [出力] hoge aaa
echo 'fuga $a' #🌟展開が行われない。
# [出力] fuga $a

$hoge = "HOGE"

# 🚨 変数の展開について
echo "${hoge}_FUGA PIYO" # 🌟${hoge}で展開される
echo "$hoge_FUGA PIYO" # 🌟hoge_Fugaまでが変数と認識


ヒアドキュメント

$fuga = "FUGA"

# 🌟 @" ~~ "@で括るだけ
echo @"
hoge
  $fuga
piyo
"@


実行結果のファイル出力

# | からのOut-File or > でOKらしい
Get-Mailbox -Identity User01 |Out-File C:\temp\User01.txt
Get-Mailbox -Identity User01 > C:\temp\User01.txt
Get-Mailbox -Identity User01 | Export-Csv -Path C:\temp\User01.csv -Encoding UTF8 -NoTypeInformation

$Output = Get-Mailbox -Identity User01
$Output += Get-Mailbox -Identity User02
$Output | Export-Csv -Path C:\temp\User.csv -Encoding UTF8 -NoTypeInformation

コマンドの結果をXMLファイルに出力します。 ひとつのオブジェクトの情報を出力するときによく使います。

設定変更する前の状態をXmlファイルに出力しておけば、 変更前の値を簡単に参照したり、そこから簡単に戻したりできます。

# 🌟出力はこれ
Get-Mailbox -Identity User01 | Export-CliXml -Path C:\temp\User01.xml

# 🌟インポートすることでオブジェクトとして扱うことができます。
$File = Import-CliXml -Path C:\temp\User01.xml
Get-Mailbox -Identity User01 | Clip


プロセスの親子関係

Get-WmiObject -Class Win32_Process -Filter "Name='powershell.exe'" |\
 Select-Object ProcessId,ParentProcessId,CommandLine