2018年9月1日土曜日

【PowerShell】カレントフォルダ(自フォルダ)取得

$pth = Split-Path -Parent $MyInvocation.MyCommand.Path
echo $pth
#上記を保存して実行した結果
PS C:\Users\root\Documents> .\test.ps1
C:\Users\root\Documents

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)
# 設定ファイルのパス
$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
■ソース(設定ファイル作成.ps1)
# スクリプトのパスと設定ファイルのパス
$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では使えない。