PowerShell Start-Process 待た ない

More than 1 year has passed since last update.

PowerShell Start-Process 待た ない

posted at 2019-05-27

updated at 2020-05-09

コマンドプロンプトから印刷だとlprサービスが必要だが、うまく出来なかったためPowerShellの方法を調べた。

参考

  • 【PowerShell】プロセスを開始する | ほそぼそプログラミング日記
  • Powershellでstart-processコマンドと-waitコマンドを使用する

既定のプリンターで印刷

  • a.txtを印刷(アプリケーションは表示、終了を待たない)

Start-Process "c:\a.txt" -Verb Print

  • a.txtを印刷 (アプリケーションは非表示、終了を待たない)

非表示

Start-Process "c:\a.txt" -Verb Print -WindowStyle Hidden

  • a.txtを印刷 (アプリケーションは非表示、終了を待つ)

非表示

Start-Process "c:\a.txt" -Verb Print -WindowStyle Hidden -Wait

  • 管理者として実行 (hostsを編集)

Start-Process notepad.exe "c:\Windows\System32\drivers\etc\hosts" -Verb runAs

起動方法

  • Start-Process
  • saps

オプション

  • -WindowStyle
    • Hidden : 非表示で実行
    • Maximized : 最大化
  • -Verb
    • runAs : 管理者として実行
    • Print : 印刷
  • -Wait
    • プロセスの終了を待つ
  • -WorkingDirectory
    • 作業場所となるディレクトリを指定

その他PowerShellコマンド

  • Start-Sleep -s 3
    • 3秒待つ

特権になる

  • コマンドプロンプトから管理者権限のコマンドプロンプトに切り替える - Qiita


PowerShell Start-Process "cmd.exe" -ArgumentList '/k "cd %cd%"' -Verb runAs

他のコマンド

  • powershell_ise
    • 統合環境の起動
  • alias
    • コマンドalias一覧表示
    • alias | findstr "select"
  • dir | ogv
    • 結果をグリッド表示
  • ii
    • ファイルを関連付けられたプログラムで実行
    • ii .
    • ii Readme.txt
  • Get-ChildItem -Path Cert:\CurrentUser\Root
    • 証明書一覧(CA)を出力

フルパスで取得

  • 【備忘録】PowerShell 指定したフォルダ以下の全てのファイルの絶対パスを取得する - Qiita
  • dir -Recurse | Select-Object FullName
  • dir -Recurse | select FullName
  • dir -Recurse | Select-Object FullName | findstr "log"

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information

What you can do with signing up

2020年3月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Powershell

Python.orgからダウンロードしたPythonとは別に、追加でWinPythonをダウンロードしてインストール。

試しにWinPythonに含まれているPowerShell(WinPython Powershell Prompt.exe)を起動してみた。 すると、

"WindowSize" の設定中に例外が発生しました: "ウィンドウの幅は 192 を上回ることができません

というエラーが表示される。

WinPython_PS_Prompt.ps1というスクリプトでエラーが表示されるので中を確認すると、ウィンドウサイズを指定する箇所が問題らしい。

Set-WindowSize 210 40 6000

Set-WindowSize内で

$size = New-Object System.Management.Automation.Host.Size($x,$y)

$host.ui.rawui.WindowSize = $size 

という風に指定している。

なので、210としている箇所を192よりも小さい値に変更。

するとエラーは表示されなくなった。

配列に対して、+演算子は要素の連結を、+=は要素の追加を表す。

PS C:\temp> $aa=@()
PS C:\temp> $aa[0]=0
インデックス '0' が範囲外のため、配列の代入が失敗しました。
発生場所 行:1 文字:5
+ $aa[0 <<<< ]=0
PS C:\temp> $aa+=0
PS C:\temp> $aa[0]
0

Powershellから、例えばnotepadみたいなアプリケーションを起動すると、起動した時点でPowershellのプロンプトが戻ってくる。

notepadが終了するまで次の処理を待たせたい場合は、waitforexit()を使う。

Hey, Scripting Guy! Windows PowerShell を使用してアプリケーションの終了時に通知する方法はありますか

こんな感じ。

PS >notepad

PS >$proc=get-process notepad

PS >$proc.waitforexit()

けど、これはPowershellのV2.0のコマンドなので、V1.0の場合は、

PS >[System.Diagnostics.Process]::Start("notepad").WaitForExit()
PS >Write-Host "Notepad has terminated."

Windows PowerShell スクリプトからアプリケーションを起動した後、アプリケーションが終了するまでスクリプトを一時停止する方法はありますか

こんな感じ。

C:\temp>for /F %i in ( 'powershell -command "$param=\""aaa bbb ccc ddd\"";$param
.replace(\"" \"", \"",\"") " ')  do echo %i

C:\temp>echo aaa,bbb,ccc,ddd
aaa,bbb,ccc,ddd

C:\temp>

加えて、

C:\temp>for /F %i in ("aaa bbb ccc ddd") do echo %i

C:\temp>echo aaa
aaa

C:\temp>

となったので、forループの仕様として、空白で区切られた文字列だと、最初のフィールドの値だけ取ってそれでループは終了となるってことらしい。

C:\temp>for /F %i in ( 'powershell -command "$param=\""aa bb cc dd\"";$param;"')
do echo %i

C:\temp>echo aa
aa

あれ?なんで?

と思い、試行錯誤の結果、

C:\temp>for /F %i in ( 'powershell -command "$param=\""aa bb cc dd\"";$param.spl
it();"') do echo %i

C:\temp>echo aa
aa

C:\temp>echo bb
bb

C:\temp>echo cc
cc

C:\temp>echo dd
dd

C:\temp>

という風に、望むかたちになった。

PowerShell 終了するには何かキーを押してください?

PowerShell終了は、コンソールウィンドウに「exit」と入力して[Enter]キーを押すか、右上の[X]ボタンをクリックします。

Start

Start-Process -FilePath 【実行ファイルのパス】 ファイル名は「notepad.exe」です。

Start

Start-Process コマンドレットでは “-WindowStyle” オプションで起動時のウィンドウ状態を指定することができます。 Start-Process で新たにプロセスを立ち上げてアプリケーションを動かす場合、「バックグラウンドで処理させたいなぁ」という時にこのオプションを活用しましよう!