PowerShell - C#で記述したオブジェクトを使用する
こちらで使用している内容の再確認。
C#のソースを埋め込んで、定義したクラスをオブジェクトとして利用する。
Add-Type -TypeDefinition @' using System; public class MyClass { public int Data {set; get;} public void PrintInstance() { Console.WriteLine("Instans"); } public static void PrintStatic() { Console.WriteLine("Static"); } } '@ [MyClass]::PrintStatic() # Static $m = New-Object MyClass $m.PrintInstance() # Instance $m.Data = 10 $m.Data # 10
PowerShell Core
バージョン6以降のものをこう呼ぶようになったみたい。
一番の大きな変更はlinuxやmacでも動作するようになったこと。
現時点でも最新バージョンは6.1.0で、早速、リリースサイトからPowerShell-6.1.0-win-x64.msiをダウンロードしてきてインストール。
Windows 10に元々インストールされていた5.1とは併存可能みたい。5.1はスタートメニューの「W」(Windows Power Shell)の欄にあるのに対して、6.1.0は「P」(Power Shell)の欄にありました。
インストールされたのはコンソールのみで、今までの様なPowerShell ISEはないです。
あと、コマンドプロンプトからの起動名称がpwsh変わっていました。
PS C:\> $PSVersionTable Name Value ---- ----- PSVersion 6.1.0 PSEdition Core GitCommitId 6.1.0 OS Microsoft Windows 10.0.17134 Platform Win32NT PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 WSManStackVersion 3.0
関連書籍
PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~
- 作者: 吉崎生
- 出版社/メーカー: マイナビ出版
- 発売日: 2018/05/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
PowerShell - バッチファイル内に記述したスクリプトを実行する。
バッチファイル内にPowerShellスクリプトを記述して実行させる方法を知ったのでメモ。
この方法だとExecutionPolicyに関係なく実行できる様なので、普段PowerShellを使用していないPCでも実行可能になる。
参考サイト
記述方法
バッチファイル1行目に以下を記述し、2行目以降にはPowerShellスクリプトを記述する。コマンドライン引数は$argsで取得できる。
@setlocal enableextensions enabledelayedexpansion & set "SELF=%~f0" & PowerShell.exe -Command "& (Invoke-Expression -Command ('{#' + ((Get-Content '!SELF:'=''!') -join \"`n\") + '}'))" %* & exit /b !errorlevel! # 以下実行させたいPowerShellスクリプト
構造
- バッチコマンドを&で連結して1行で記述
- バッチファイルのパスを取得し、ローカルな環境変数SELFに格納
- PowerShell.exe -Command Script %* でスクリプト実行
- exit /bでバッチ終了
PowerShell.exe -Command Scriptの内容
- Get-Contentで環境変数SELF(バッチファイル自身)の内容取得(この際「'」を「''」に置換)
- 取得した内容(行単位の配列)を改行コードで連結してひとつの文字列にする
- 頭に#を追加して、バッチファイル1行目を(PowerShellの)コメントにする
- Invoke-Expressionで実行
PowerShell - 音量のコントロール
PowerShellからボリュームコントロールできる情報を見つけたのでメモ。VolumeとMuteプロパティへのアクセスができるようになる。
Windows7 の PowerShell Ver.2の場合は、1行目を以下の様に変更する。
Add-Type -Language CSharpVersion3 -TypeDefinition @'続きを読む
PowerShell - SHA256ハッシュ値文字列の取得
function getSHA256Hash( [string]$s ){ $sha256 = New-Object System.Security.Cryptography.SHA256Managed $utf8 = New-Object System.Text.UTF8Encoding $h = $sha256.ComputeHash( $utf8.GetBytes($s) ) return ($h | %{$_.ToString("x2")}) -join "" } Write-Host $(getSHA256Hash "") # 空文字 # e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 Write-Host $(getSHA256Hash "あ") # dc5a4d3d82f7e15792959dc661538ae0e541ce66494516f5c9cfd9cd3308494d