LoginSignup
0
1

More than 1 year has passed since last update.

PowerShellを使い始めるときの取っ掛かり

Posted at

PowerShellを実業務で使い始めるときの取っ掛かりになる情報

$profile

  • Powershellのターミナル起動時に自動で$profileから定義情報(エイリアス定義や関数定義)が読み込まれる。
    要するにLinuxの.bashrcや.bash_profileと同じようなもの。

  • $profileの実体は$HOME\Documents\PowerShell\Profile.ps1に保存される。
    詳しくは公式ページ

$profileの編集
# 最初は$HOME\Documents配下にPowerShellディレクトリがないので自分で作る。
New-Item $HOME\Documents\PowerShell -ItemType Directory
# notepadで開く(最初はファイルがないので新規ファイル扱い)
notepad $profile

# 編集後にファイル名「Profile.ps1」で保存する。

$profileに関数を登録しておく

関数登録の例
# Get-Content = catコマンド
Get-Content $profile
 function ls_filename_only() {
   foreach($item in Get-Item ./*) {
     # Basename = 拡張子抜きの名前
     $item.Basename
   }
 }
関数実行の例
# 登録した関数を実行(拡張子抜きの名前だけを表示)
ls_filename_only
 alternatives
 alternatives.log
 alternatives.log.2
 auth
 auth.log
 auth.log.2


# 実際のファイル
Get-Item ./*
 -rw-r--r-- root             root               2022/12/05 00:00              0 alternatives.log
 -rw-r--r-- root             root               2022/12/04 16:45            753 alternatives.log.1
 -rw-r--r-- root             root               2022/10/26 23:55           4464 alternatives.log.2.gz
 -rw-r----- root             adm                2022/12/11 15:39           7863 auth.log
 -rw-r----- root             adm                2022/12/10 23:30          69870 auth.log.1
 -rw-r----- root             adm                2022/12/03 23:58           3409 auth.log.2.gz

$profileにエイリアスを登録して楽をする。

エイリアス登録の例
Get-Content $profile  
 # Home配下のファイル一覧
 Set-Alias ls_alias Get-Item 
 
 # functionをエイリアスとして登録
 #(引数のせいでうまくエイリアスにできない場合は、functionで定義してエイリアスに登録する)
 function ls_file_name_only() {
                             # 引数の値はargsで受け取る
   foreach($item in Get-Item $args[0]) {
     $item.Basename
   }
 }
 Set-Alias ls_name ls_file_name_only

エイリアス実行の例
ls_alias ./*
 -rw-r--r-- root             root               2022/12/05 00:00              0 alternatives.log
 -rw-r--r-- root             root               2022/12/04 16:45            753 alternatives.log.1
 -rw-r--r-- root             root               2022/10/26 23:55           4464 alternatives.log.2.gz
 -rw-r----- root             adm                2022/12/11 15:39           7863 auth.log
 -rw-r----- root             adm                2022/12/10 23:30          69870 auth.log.1
 -rw-r----- root             adm                2022/12/03 23:58           3409 auth.log.2.gz

ls_name ./*
 alternatives
 alternatives.log
 alternatives.log.2
 auth
 auth.log
 auth.log.2

作業用にスクリプトファイルをつくる

よく使う命令・構文

ファイル・ディレクトリ一覧を取得

Get-Item ファイルパス

ファイルの内容を表示する

Get-Content ファイルパス [-Encoding <ENcoding>] # Encoding以外のオプションもある

headと同じ働きをする命令

Get-Contentのオプション指定
# $profileの先頭6行
Get-Content $profile -head 6
[始まり..終わり] で指定
# $profileの先頭6行
$(Get-Content $profile)[0..5]

tailと同じ働きをする命令

Get-Contentのオプション指定
# $profileの末尾6行
Get-Content $profile -tail 6
[始まり..終わり] で指定
# $profileの末尾6行
$(Get-Content $profile)[-6..-1]

tailコマンドのファイル監視と同等の挙動をさせる
# -waitオプションを使う
Get-Content $profile  -wait

ループ処理

  • ファイル1件ずつ処理する場合
  • ファイル情報ののプロパティは 公式ページ参照。
foreach($item in Get-Item ファイルパス) {
  $item.Name #ファイル名を使う
  $item.Basename # 拡張子抜きの名前を使う
}

コマンド実行

# PowerShellのコマンドを実行
Invoke-Command 

# 別プロセスを実行
Start-Process 

配列を利用した繰り返し処理

# @()で配列を定義
$test_array = @('a', 'b', )

foreach($item in $test_array) {
  Write-Host $item
}

Mapを利用した繰り返し処理

# @{}でMapを定義
$test_map = @{
  "key" = "value",
  
}
foreach($entry in $test_map.GetEnumerator()) {
  Write-Host $entry.Key;
  Write-Host $entry.Value;
}

Excelの読み書き(ActiveX)

# Excel(ActiveX)を変数化
$excel = New-Object -ComObject Excel.Application
$book = $null
try{
  # 不可視にしておく
  $excel.Visible = $false
  $excel.DisplayAlerts = $false

  # Book Open
  $book = $excel.Workbooks.Open(ファイルパス)

  # シート取得
  $sheet = $book.Sheets(1)

  # セルへ値書き込み
  $sheet.Cells.Item(x, y) = 

  # セル値の取得
  Write-Host $sheet.Cells.Item(x, y)
  Write-Host $sheet.Cells.Item(x, y).Text    # 文字列として取得
  Write-Host $sheet.Cells.Item(x, y).Value() #値を取得

  # Excel Book 保存
  [void]$book.Save()

} finally {
  try{
    if($book -ne $null) {
      # 利用したExcel Bookオブジェクトの開放
      [void]$book.Close($false)
      [System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
    }

    # Excelオブジェクトの開放
    [void]$excel.Quit()
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
  }catch{
  }
 
}

CSVファイルの読み書き

# CSV文字列をCSVオブジェクトに変換
$CSVオブジェクト = CSV文字列 | ConvertFrom-Csv
# CSVオブジェクトをCSV文字列に変換
$CSV文字列 = CSVオブジェクト | ConvertTo-Csv

# オブジェクトを一連のコンマ区切り値 (CSV) 文字列に変換し、文字列をファイルに保存
CSVオブジェクト | Export-Csv -Path 保存先ファイルパス
#コンマ区切り値 (CSV) ファイル内の項目からテーブルのようなカスタム オブジェクトを作成
$CSVオブジェクト変数 = Import-Csv -Path CSVファイルパス

jsonファイルの読み書き

# JSON文字列をJSONオブジェクトに変換(PSObject または Hashtableオブジェクト)
$JSONオブジェクト = JSON文字列 | ConvertFrom-Json
# JSONオブジェクトをJSON文字列に変換
$JSON文字列 = JSONオブジェクト | ConvertTo-Json

xmlの読み書き

# .NETオブジェクトをXML表現に変換
$XML = $PSObject | ConvertTo-XML

PowerShellのリファレンス

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1