私は、MS-DOSやVBSとか好きだ。制限された中で、いかに頭を使って、書くのが面白いと思うんだけどね。とは、MS-DOSのコマンドは基本SJIS対応で、Unicode対応してないので、折角だからと、PowerShellを使って見ることにした。
-
PowerShellのバージョン確認
(Get-ItemProperty HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine).PowerShellVersion
-
PowerShellスクリプトファイル
拡張子は。ps1。スクリプトファイルとして実行にするだけで手間がかかる。
-
実行ポリシー確認。
Get-ExecutionPolicy
-
Restricted
デフォルト。PowerShellは対話的にしか入力できないようになっている。スクリプト実行不可。
-
Remote Signed
ローカルで作成した、信頼できる発行元が署名したPowerShellスクリプトの実行が可能。
他にもあるが、とりあえず、
Remote Signed
にしておく。 -
-
実行ポリシー変更。
Set-ExecutionPolicy RemoteSigned
この時、管理者としてPowerShellを起動していないとアクセス拒否。どんだけ強固なんだよ。
-
取得オブジェクトの変数、メソッドを知る。これなくては何もできん。
Get-Member
-
ヘルプ。
Get-Help
-
文字列
"
の場合、変数を展開。'
は、$
もそのまま文字として扱う。 -
文字列連結
-
配列の連結
Join
(配列の各要素の間に挿入する文字, 配列変数) -
通常の連結
+
-
-
ヌルとの比較は$nullを使う。
$a -eq $null
-
コマンド結果のプロパティからそのまま参照したい
write-output (Get-Date).Year
write-output Get-Date.Year
だとエラー、| $_.Year
で繋げてもエラー -
スクリプト自身のパス
$MyInvocation.MyCommand.Path
-
スクリプト名は
$MyInvocation.MyCommand.Name
-
Write-Host
は改行なしで出力し、Write-Output
は改行あり(ほかにも違いは、いっぱいあるが) -
ネットワークドライブの追加
New-PSDrive -Name [ドライブ名] -PSProvider [プロバイダー] -Root "\\UBUNTU\arimasou16"
-
Providerの種類
- Alias(エイリアス)
- Certificate(デジタル署名)
- Environment(環境変数)
- Registry(レジストリ)
- FileSystem(ファイルシステム)
- Variable(変数)
- WSMan(WinRMサービス)
New-PSDrive -Name Ubuntu -PSProvider FileSystem -Root "\\192.168.x.x\arimasou16"
Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Ubuntu FileSystem \\192.168.x.x\arimasou16
-
-
ファイルパスの解析
Split-Path
(古いバージョンだとparse-pathらしい)
親フォルダの取得
Split-Path "C:\Program Files\Microsoft Command Shell" -parent
-
時刻の取得
Get-Date
フォーマットを指定しての取得Get-Date -Format "yyyy/MM/dd HH時mm分ss秒"
とりあえず、今日はここまで。