powershell : ps2exe の使い方(コマンドライン)
ps1ファイルをExe変換するツール。GUIツールもあるが、powershellコンソールからも実行できる。
Invoke-ps2exeまたは、ps2exeを使用する。
Invoke-ps2exe -inputFile .\source.ps1 -outputFile .\target.exe -noConsole
-noConsole は黒いコンソール画面を表示させないオプション。
その他のオプションは、下記を参照。
powershell ファイル削除 (ゴミ箱未使用パターン / ゴミ箱使用パターン)
ゴミ箱未使用
Remove-Item -Path "hogehoge.txt"
これは、いつも通り。
ゴミ箱使用
$shell = New-Object -ComObject "Shell.Application" $recycleBin = $shell.Namespace(0xA) $recycleBin.MoveHere("hogehoge.txt")
NameSpace(0xA)の0xAは、ShellSpecialFolderConstantsの値で、Windowsのごみ箱を指します。
とのことです。Bingちゃんが教えてくれた。
powershell 正規表現 最小マッチ(「.*」 を使ったときに)
.* を使うと任意の文字を0回以上繰り返す。置換などで正規表現を使う場合、思わぬところまでマッチしてしまうことがある。
最大マッチ、最小マッチの概念がある。
$str = "aaa-bbb-ccc.jpg" $str -replace "^.*-", "hoge-" # hoge-ccc.jpg(普通に.*を使うと最大マッチ:aaa-bbb-の部分にマッチ) $str -replace "^.*?-", "hoge-" # hoge-bbb-ccc.jpg(.*?を使うと最小マッチ:aaa-の部分にマッチ)
こんな感じで、最大マッチ、最小マッチで結果が異なる。
powershell 配列同士の比較(差分取得)
$a = @("a", "b", "c"); $b = @("d", "b", "v"); Write-Host "---- same ----" $same = Compare-Object $a $b -IncludeEqual -ExcludeDifferent | Select-Object -ExpandProperty InputObject $same Write-Host "---- diff ----" $diff = Compare-Object $a $b | Select-Object -ExpandProperty InputObject $diff Write-Host "---- $a-$b ----" $diff = Compare-Object $a $b | Where-Object {$_.SideIndicator -eq "<="} | Select-Object -ExpandProperty InputObject $diff Write-Host "---- $b-$a (1) ----" $diff = Compare-Object $b $a | Where-Object {$_.SideIndicator -eq "<="} | Select-Object -ExpandProperty InputObject $diff Write-Host "---- $b-$a (2) ----" $diff = Compare-Object $a $b | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object -ExpandProperty InputObject $diff
Select-Object -ExpandProperty InputObjectが分からなかったので、Bingちゃんに聞いてみたところ下記の回答。
Select-Object -ExpandProperty InputObjectは、Select-Objectコマンドレットを使用して、InputObjectプロパティを展開しています。
-ExpandPropertyパラメーターは、指定されたプロパティの値を展開し、その値を出力します。この場合、Compare-Objectコマンドレットの出力には、InputObjectプロパティが含まれており、その値が配列の要素です。
Select-Object -ExpandProperty InputObjectを使用することで、配列の要素だけが出力されます。受信したメッセージ. Select-Object -ExpandProperty InputObjectは、Select-Objectコマンドレットを使用して、
InputObjectプロパティを展開しています。-ExpandPropertyパラメーターは、指定されたプロパティの値を展開し、
その値を出力します。 この場合、Compare-Objectコマンドレットの出力には、InputObjectプロパティが含まれており、
その値が配列の要素です。Select-Object -ExpandProperty InputObjectを使用することで、配列の要素だけが出力されます。
---- same ---- b ---- diff ---- d v a c ---- a b c-d b v ---- a c ---- d b v-a b c (1) ---- d v ---- d b v-a b c (2) ---- d v
powershell Linux のtail -f と同じようにファイル(ログ)監視をしてみる
ログ監視って結構使いますよね。Windowsではどうやるんだ?と思い調べてみた。
Get-Content -Path xxxx\hogehoge.log -Wait
-Waitをつけると、監視モードになり、hogehoge.logが更新されるとその差分がターミナル上に追記されていく。
動きの速いログでないかぎり、この方法でtail -fと同等の使い方が出来そうです。
ただ、Get-Contentは読み取り専用でファイルを開きますが、そのアクセス中だけは、他のプロセスが当該ファイルを排他的に(占有)ひらくことはできないらしいです。
Bingちゃんが教えてくれました。
powershell メッセージボックスを表示する
一番単純なメッセージボックスは下記の通り。デフォルトでOKボタンは表示される。
Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.MessageBox]::Show("I Love you so ...")
Showメソッドを調べれば、引数はほかにもある。
Add-Type -AssemblyName System.Windows.Forms $Message = "I Love You So ..."; $title = "title" $ButtonType = [System.Windows.MessageBoxButton]::OK $MessageIcon = [System.Windows.MessageBoxImage]::Information [System.Windows.MessageBox]::Show($Message, $Title, $ButtonType, $MessageIcon) | Out-Null
powershell sleepしたい Start-Sleep
Start-Sleep -Milliseconds 1000
これで1秒スリープする。 Bingちゃんが教えてくれた。