Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

PowerShell

【PowerShell】様々な文字コードのサンプルCSVファイルを作成する

以下はカレントディレクトリに、順番にシフトJIS、UTF-8(BOM無し)、UTF-8(BOM付き)、UTF-16(ビッグエンディアン、BOM付き)、UTF-16(リトルエンディアン、BOM付き)のCSVファイルを出力した例。 PowerShellのコマンドレットでは、Unicode系は原則BOM付…

【PowerShell】BOM付きUTF-8のテキストファイルを簡単に出力する

FileクラスのWriteAllLinesメソッドを使う。以下は変数$linesに代入したテキストを、ファイルtemp.csvに出力した例。文字コードはUTF-8(BOM無し)、改行コードはCR+LFである。 PS > $lines = "1,ABC", "2,abc", "3,あいう" PS > $file = (gl).Path + "\temp…

【PowerShell】BOM無しUTF-8のテキストファイルを簡単に出力する

文字列配列の場合は、FileクラスのWriteAllLinesメソッドを使う。以下は変数$linesに代入したテキストを、ファイルtemp_utf8nb.csvに出力した例。文字コードはUTF-8(BOM無し)、改行コードはCR+LF。 PS > $lines = "1,ABC", "2,abc", "3,あいう" PS > $file…

【PowerShell】タスクスケジューラのタスクでスクリプトを実行する

タスクスケジューラを起動する。管理者アカウントではなく標準アカウントの場合は、「管理者として実行」する。 右側「操作」パネルの「タスクの作成」をクリック。「タスクの作成」ダイアログが開く 名前は分かりやすいものを適宜入力。「タスクの実行時に…

【PowerShell】インターネット上のファイルをダウンロードする

WebClientクラスのDownloadFileメソッドを使う。以下では財務省のトップページをtemp.htmlというファイル名でダウンロードした例。なお、ダウンロード先はGet-Locationコマンドレットで得られるカレントディレクトリではなく、DirectoryクラスのGetCurrentDi…

【PowerShell】インターネット上のファイルをダウンロードする

Invoke-WebRequestコマンドレットを使う。以下では、首相官邸のトップページをtemp.htmlというファイル名でダウンロードした例。 PS > Invoke-WebRequest "https://www.kantei.go.jp/index.html" -OutFile "temp.html"PS > Get-Content .\temp.html -TotalCo…

【PowerShell】キー入力を読み取る

ConsoleクラスのReadKeyメソッドを使う。Read-HostコマンドレットはEnterキーが押されるまで入力待ちの状態が続くが、ConsoleクラスのReadKeyメソッドは何かキーが押された時点で、その入力を返す。 以下は、上から順に「a」、「A」(Shiftキーを押しながら…

【PowerShell】キー入力を行う

Read-Hostコマンドレットを使う。Read-HostはEnterキーが押されるまで処理を中断し、Enterキーが押されたら、それまで入力された文字を返す。 以下の例では「文字を入力:」と表示されて処理が一旦停止しており、「ABCD」と入力した後にEnterキーを押している…

【PowerShell】CSVファイルの中身をソートする

Sort-Objectコマンドレットを使う。デフォルトでは昇順に、-Descendingオプションを付けると降順で並び替える。 PS > Get-Content .\sample1.csv no, name, age 1, 安倍, 33 2, 菅, 11 3, 岸田, 22 PS > $csv = Import-Csv .\sample1.csv PS > $csv no name …

【PowerShell】スクリプト内で使用した変数を参照する

スクリプトの動作確認をするために、PowerShellのコマンドライン環境を対話型実行環境(REPL)のように実行後の変数の値を参照するには、スコープを利用する。通常はスクリプト内で使用した変数等はスクリプトの動作終了後には引き継がれないが、スクリプト…

【PowerShell】多次元配列の次元と次元ごとの大きさを得る

全要素数を得るにはLengthプロパティを、次元を得るにはRankプロパティを参照する。次元ごとの大きさを得るにはGetLengthメソッドを使う。 PS > $ary = New-Object 'int[,]' 3, 4 PS > $ary.Length 12 PS > $ary.Rank 2 PS > $ary.GetLength(0) 3 PS > $ary.…

【PowerShell】多次元配列を作る

New-Objectコマンドレットを使う。以下は整数型の3行4列の配列を作成した例。PowerShellのインデックスは0から始まるので注意。 PS > $ary = New-Object 'int[,]' 3, 4 PS > Write-Host $ary 0 0 0 0 0 0 0 0 0 0 0 0 PS > $ary[0, 1] = 2 PS > $ary[1, 2] =…

【PowerShell】日付を文字列に変換する

ToStringメソッドまたは-f演算子を使う。 PS > $dt = New-Object DateTime 2034, 1, 2 PS > Write-Host $dt 2034/01/02 0:00:00 PS > $s = ">" + $dt.ToString("yyyy-MM-dd") + "<" PS > Write-Host $s >2034-01-02< PS > $s = ">{0:yyyy-MM-dd}<" -f $dt PS…

【PowerShell】CSVファイルを読み込む

Import-Csvコマンドレットを使う。以下はsample1.csvとsample2.csvというファイルを使用した読み込み例。日本語コードをシフトJISにして保存してある。 PS > Get-Content .\sample1.csv no, name, age 1, 安倍, 33 2, 菅, 11 3, 岸田, 22 PS > $csv = Import…

【PowerShell】任意の年月日のDateTimeオブジェクトを作成する

Get-Dateコマンドレットは今の日時のDateTimeオブジェクトを作成するが、任意の年月日のDateTimeオブジェクトを作成するには、New-Objectコマンドレットを使う。 PS > Get-Date 2023年6月17日 11:54:34 PS > $dt = New-Object DateTime 2001, 2, 3 PS > $dt …

【PowerShell】複数の文字列を順番に指定して繰り返し処理を行う

配列とforeach文を使う。以下は、3つの文字列(ABC、123、abc)の両端にそれぞれ「>」と「<」を付けて順番に表示した例。 PS > $ary = 'ABC', '123', 'abc' PS > $ary | foreach {Write-Host ('>' + $_ + '<')} >ABC< >123< >abc

【PowerShell】スクリプトに指定した引数を扱う

自動変数$argsを使う。$argsは配列として扱う。 以下は、以下ならなるスクリプトargs.ps1を実行した例。 Write-Host $args.Length if ($args.Length -gt 0) { for ($i = 0; $i -lt $args.Length; $i++) { Write-Host $args[$i] } } 実行例。 PS > .\args.ps1…

【PowerShell】文字列内の文字列を置換する

Replaceメソッドもしくは-replace演算子を使う。-replaceは正規表現を使うことができる。 PS > "Kishida Cabinet".Replace("Kishida", "Abe") Abe Cabinet PS > "Kishida Cabinet" -replace "Kishida", "Abe" Abe Cabinet PS > "Kishida Cabinet" -replace '…

【PowerShell】ディレクトリを再帰的に検索する

Get-ChildItemコマンドレットを使う。-Recurseに検索をしたいディレクトリを、その後に探したいディレクトリ名を指定する。ディレクトリ名にはワイルドカードが使える。 > Get-ChildItem -Recurse C:\Windows\Boot EFI ディレクトリ: C:\Windows\Boot Mode L…

【PowerShell】ファイルを再帰的に検索する

Get-ChildItemコマンドレットを使う。-Recurseに検索をしたいディレクトリを、その後に探したいファイル名を指定する。ファイル名にはワイルドカードが使える。 PS > Get-ChildItem -Recurse C:\Windows\Boot boot*.dll デフォルトではファイルとディレクト…

【PowerShell】実行中のスクリプトの完全なパス+ファイル名、親ディレクトリの完全なパス、スクリプト名を得る

以下のとおり。あらかじめ以下のようなスクリプトscriptname.ps1を作成しておき、実行してみる。 PS D:\work> Get-Content .\scriptname.ps1 # 実行中のスクリプトの完全なパスとファイル名 Write-Host $PSCommandPath # 実行中のスクリプトの親ディレクトリ…

【PowerShell】処理を一時停止する

Start-Sleepコマンドレットを使う。引数に数字だけ指定すると、その秒数の間だけ、処理を一時停止する。 PS > $dt1 = Get-Date; Start-Sleep 3; $dt2 = Get-Date PS > New-TimeSpan $dt1 $dt2 Days : 0 Hours : 0 Minutes : 0 Seconds : 3 Milliseconds : 14…

【PowerShell】ファイル名から拡張子を取り除く

FileInfoオブジェクトのBaseNameプロパティを使う。 PS > # FileInfoオブジェクトを得る PS > $f = Get-ChildItem "C:\Windows\System32\drivers\etc\lmhosts.sam" PS > # ファイルの絶対パス PS > $f.FullName C:\Windows\System32\drivers\etc\lmhosts.sam…

【PowerShell】ファイルの親ディレクトリ名と親ディレクトリの親ディレクトリ名を得る

DirectoryInfoオブジェクトのParentプロパティを利用する。 PS > # FileInfoオブジェクトを得る PS > $f = Get-ChildItem "C:\Windows\System32\drivers\etc\hosts" PS > # ファイルの絶対パス PS > $f.FullName C:\Windows\System32\drivers\etc\hosts PS >…

【PowerShell】ハッシュ値を得る

Get-FileHashコマンドレットを使う。以下は公式ページによるWindows版のPHPバージョン8.2.4(ノンスレッドセーフ版)が納めされた圧縮ファイル(php-8.2.4-nts-Win32-vs16-x64.zip)のハッシュ値(SHA256)。これを求めてみる。 PS > Get-FileHash .\php-8.2…

【PowerShell】変数の宣言を強制する

Set-PSDebugコマンドレットを-Strictオプションを付けて実行する。以下の3つのスクリプトを用意する。 psdebug1.ps1 Write-Host $s psdebug2.ps1 Set-PSDebug -Strict Write-Host $s psdebug3.ps1 Set-PSDebug -Strict $s = "" Write-Host $s それぞれ実行し…

【PowerShell】あるディレクトリ内のディレクトリ一覧を得る

Get-ChildItemコマンドレットの結果をパイプラインでWhere-Objectコマンドレットに渡してフィルターをかける。PsIsContainerプロパティはファイルであればFalse、ディレクトリであればTrueを返す。 PS > Get-ChildItem C:\Windows\Boot ディレクトリ: C:\Win…

【PowerShell】あるディレクトリ内のファイル一覧を得る

Get-ChildItemコマンドレットの結果をパイプラインでWhere-Objectコマンドレットに渡してフィルターをかける。PsIsContainerプロパティはファイルであればFalse、ディレクトリであればTrueを返す。 PS > Get-ChildItem C:\Windows\Boot ディレクトリ: C:\Win…

【PowerShell】ある年ある月に含まれる日数を取得する

PS > [DateTime]::DaysInMonth(2003, 1) 31 PS > [DateTime]::DaysInMonth(2003, 2) 28 PS > [DateTime]::DaysInMonth(2003, 3) 31 PS > [DateTime]::DaysInMonth(2004, 1) 31 PS > [DateTime]::DaysInMonth(2004, 2) 29 PS > [DateTime]::DaysInMonth(2004,…

【PowerShell】うるう年か否か判定する

DateTimeクラスのIsLeapYearメソッドを使う。 PS > [DateTime]::IsLeapYear(2023) False PS > [DateTime]::IsLeapYear(2024) True PS > for ($i = 1996; $i -le 2005; $i++) {[DateTime]::IsLeapYear($i)} True False False False True False False False Tr…