▼
2018年3月12日月曜日
2018年3月11日日曜日
【PowerShell】batから管理者権限で実行ポリシー(ExecutionPolicy)変更
Install.bat等から管理者権限でPowerShellを起動し、実行ポリシーを変更する。-waitを指定すると初回実行時(Execution Policyが変更されていない場合)にエラーが表示されるため、> nullでエラーを捨てている。
ただし、ユーザアカウント制御のダイアログと以下のウインドウが表示される。

powershell "start-process powershell '-Command Set-ExecutionPolicy RemoteSigned -Confirm' -wait" -verb runas > nul
【PowerShell】PC起動時にメール送信
と言っても、タスクスケジューラーを使う。zip内のinstall.batを実行して
メールやタスクスケジューラー登録を行う。使用しているのは、bat、PowerShell、タスクスケジューラーなので、動かない場合は適切に書き換える。
BootMail_v0.1.zip
■ソース(Bootメール送信.ps1)
■ソース(設定ファイル作成.ps1)
BootMail_v0.1.zip
■ソース(Bootメール送信.ps1)
# 設定ファイルのパス
$MyInvocation.MyCommand.Path | Split-Path -Parent | sv path
Join-Path $path setting.json | sv setting_path
# 設定ファイル読み込み
cat $setting_path | ConvertFrom-Json | sv conf
# 認証情報生成
ConvertTo-SecureString $conf.pass | sv pass
New-Object System.Management.Automation.PSCredential $conf.user, $pass | sv cred
# ホスト名取得
hostname | sv hst
# メール送信
Send-MailMessage `
-To $conf.to `
-From $conf.from `
-SmtpServer $conf.server `
-Port $conf.port `
-Subject "PC Boot" `
-Credential $cred `
-UseSsl `
-Body $hst
# スクリプトのパスと設定ファイルのパス
$MyInvocation.MyCommand.Path | Split-Path -Parent | sv current_path
Join-Path $current_path setting.json | sv setting_path
Read-Host "送信先(to)メールアドレスを入力してください。" | sv to
Read-Host "送信元(from)メールアドレスを入力してください。" | sv from
Read-Host "SMTPサーバアドレスを入力してください。" | sv server
Read-Host "SMTPサーバポート番号を入力してください。" | sv port
Get-Credential -m "【メールアカウント】と【パスワード】を入力して下さい。" | sv cred
# ユーザ入力情報から設定ファイルを作成。
@{
to = $to
from = $from
server = $server
port = $port
user = $cred.UserName
pass = ConvertFrom-SecureString $cred.Password
} | sv setting
ConvertTo-Json $setting | Set-Content $setting_path
【PowerShell】タスクスケジューラー登録はWin7とWin8以降で別
- Windows7
- schtasks
- Window8やWindow10は、以下が使用可能
- New-ScheduledTaskPrincipal
- New-JobTrigger
- New-ScheduledTaskAction
- Register-ScheduledTask
schtasksよりRegister-ScheduledTaskの方が色々できそうだが、残念ながらWin7では使えない。
2018年3月9日金曜日
【PowerShell】記事一覧
【PowerShell】カレントフォルダ(自フォルダ)取得
【PowerShell】PC起動時にメール送信
【PowerShell】タスクスケジューラー登録はWin7とWin8以降で別
【PowerShell】グローバルIPアドレスをメール送信
【ESXi】【PowerShell】ゲストOSの起動にWake On LAN(Magic Packet)を使用
【PowerShell】スクリーンショット2【PowerShell】PC起動時にメール送信
【PowerShell】タスクスケジューラー登録はWin7とWin8以降で別
【PowerShell】グローバルIPアドレスをメール送信
【ESXi】【PowerShell】ゲストOSの起動にWake On LAN(Magic Packet)を使用
【PowerShell】Windows起動、終了時刻を表示
【PowerShell】スクリーンショット(画面キャプチャ)
【PowerShell】フォルダ内の最新画像を表示
2018年3月8日木曜日
【Linux】コマンドのプログレス表示(リアルタイム表示)を加工する
■CentOSの場合
./progress.sh | xargs -n 1 -d '¥x0D' | sed -u "s/copied/【copy progress report】/g" | awk -v ORS="¥r" '{print;}'
■Ubuntuの場合(CentOSでもできるかも)
./progress.sh | xargs -n 1 -d '\x0D' | sed -u "s/copied/【copy progress report】/g" | ruby -pe 'sub("\n", "\r")'
■Ubuntuの場合(CentOSでもできるかも)
./progress.sh | xargs -n 1 -d '\x0D' | sed -u "s/copied/【copy progress report】/g" | ruby -pe 'sub("\n", "\r")'
■加工内容の変更
sedの引数を変更すると加工内容を変更できる。 -eで正規表現使用可能。
上記では、copiedを【copy progress report】に変換している。
■補足
・sedだけいけると思いきや、プログレス表示は、CRしか来ないのでsedが実行されない。sedはLFを待ってから実行されるみたい。そのため、xargsでCRが来る度にパイプ先に渡すようにする。次にsedで加工。xargsでLN改行したので、最後にawkやrubyでCRに戻す。
・awkやrubyのバージョン、Linuxの種類によって、できたりできなかったりする。
■補足
・sedだけいけると思いきや、プログレス表示は、CRしか来ないのでsedが実行されない。sedはLFを待ってから実行されるみたい。そのため、xargsでCRが来る度にパイプ先に渡すようにする。次にsedで加工。xargsでLN改行したので、最後にawkやrubyでCRに戻す。
・awkやrubyのバージョン、Linuxの種類によって、できたりできなかったりする。
◆例)
以下のようなprogress.sh(中身はかなりテキトー)があったとする。
※Ubuntuでしかもsudo apt install sleepenhが必要。CentOSの場合はusleepに読み替えること。
このprogress.shを実行すると、以下のように表示される。
加工コマンドをかますと、以下となる。
#!/bin/bash
for i in `seq 1 100`; do
complete=`expr ${i} \* 10`
echo -en "copied $complete/1000KB (${i})%\r"
sleepenh 0.1 > /dev/null
done
echo
このprogress.shを実行すると、以下のように表示される。
加工コマンドをかますと、以下となる。

