質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

2回答

518閲覧

タスクスケジューラでPowerShellを実行したいのですが、「プログラムの開始」のオプション欄に空白が含まれるパスが入っていると実行されません

semiouto

総合スコア1

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2024/10/01 14:49

編集2024/10/02 11:42

実現したいこと

イメージ説明

赤枠の箇所に
上部は「-ExecutionPolicy Bypass C:\T a s k\HogeHoge.ps1」
下部は「C:\T a s k」
のようにスペースが含まれるパスを入れてもPowerShellが実行されるようにしたいです。
参考:https://sscaro.hatenablog.com/entry/2020/08/06/224301

発生している問題・分からないこと

パスに空白があるせいかPowerShellが実行されません。

エラーメッセージ

error

1確認できません。 2実行されない状態です。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

パスに空白が含まれないCドライブ直下に置くことで回避はできるのですが、
できれば空白が含まれるパスのものを使用したいと考えています。

補足

環境
Windows10 home

ファイル
hoge.ps1
内容
echo test
pause
文字コード
ANSI

成功時(パスに空白が入っていない場合)
イメージ説明
プログラム/スクリプト
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加
-ExecutionPolicy Bypass "C:\test\hoge.ps1"
開始
C:\test

失敗時(パスに空白が入っている場合)
※実行させてもすぐにパワーシェルが閉じてしまうので、エラー内容を確認できません。
ps1ファイルには「pause」を入れてありますが、このファイルを読み込めていないようです。
イメージ説明
プログラム/スクリプト
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加
-ExecutionPolicy Bypass "C:\t e s t\hoge.ps1"
開始
C:\t e s t

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2024/10/01 23:36

参考にしている記事では引数をダブルクォートで囲んでいますので、同じ様にしてみてはどうでしょうか。 -ExecutionPolicy Bypass "C:\T a s k\HogeHoge.ps1" "C:\T a s k"
otn

2024/10/02 01:52

powershell -ExecutionPolicy Bypass C:\T a s k\HogeHoge.ps1 を、コマンドプロンプトやpowershell画面で入力してもエラーになると思いますが、テストせずにタスクスケジューラーで起動しようとしているのでしょうか? テストはちゃんとしましょう。 空白を含んだパス名をコマンドラインで指定する時は " " で囲みます。 また、少なくともWindows10だと、タスクスケジューラーの「開始」(ディレクトリー)欄は空白があっても " " で囲まないようです。 pwsh じゃなくて powershell の場合は、" " で囲むだけでなく、-file も必要です。
semiouto

2024/10/02 03:49

解決しました 上部には日本語などを含む場合はダブルクォーテーションで囲み、 空白や()が含まれる場合は8.3形式とします それを調べるにはコマンドプロンプトでdir /xで調べます。 下部はダブルクォーテーションで囲いませんが、対象のパス部分を同じく8.3形式とします。
otn

2024/10/02 07:47

> 8.3形式とします かなり古い情報ですね。現在は、デフォルトでは8.3形式はCドライブのみで有効なので、それはCドライブ限定の話です。 今回のケースではCドライブのファイルなので8.3形式が使えますが。
semiouto

2024/10/02 08:50

一応、Cドライブ以外でもこちらのPCの元々の設定で行けました。 書き漏れていましたが、Windows 10です。 少し古いパソコンですが……。 Windows11などではそのようになっておるのでしょうか? また、他に良い対策をご存知の場合はご教示くださると幸いです。 関連? https://4thsight.xyz/30390
otn

2024/10/02 09:54

> また、他に良い対策をご存知の場合はご教示くださると幸いです。 " " で囲むと書いたのですが。。。。。 > 下部はダブルクォーテーションで囲いませんが、対象のパス部分を同じく8.3形式とします。 こっちは、" " で囲んでは駄目で、8.3形式の必要も無いです。「C:\Program Files」 とか、そのまま書いてもOK。 > Windows 10です。 失礼しました。Windows7か8か10から、デフォルト値が「システムボリュームのみ8.3形式を作成」に変わったと思っていたのですが、PCメーカー毎の設定だったんですかね。 私は一度8.3形式が原因でファイル削除ミスをやったので、それ以来、PC初期設定時にはCドライブ以外は無効にしてましたが、最近「システムボリュームのみ8.3形式を作成」という選択肢が増えて、変更しなくても複数メーカーで最初からそうなってるケースばかりなので、デフォルトが変わったのかと思ってました。
semiouto

2024/10/02 10:23 編集

すみません。 上部の方のパスをダブルクォーテーションで囲むのは、試してダメだったんです。 ちなみに空白や()無し、英数字のみのパスならテストしてダブルクォーテーションなしでも問題ありませんでした。 パスをダブルクォーテーションで囲む方法は空白などありのパスをPowerShellに直接書く場合は問題ありませんが、 タスクスケジューラの該当部に記載すると私はうまくいきませんでした。(パスはPowerShellに記載したのと同じものをコピペしたので記載ミスということはないはずです。) これもなにかしらの環境の違いでしょうか。 8.3形式はそういった危険性があるのですね。 心に留めておきます。
semiouto

2024/10/02 10:05

帰宅後に改めて確認しようかと思います。 一旦、未解決に戻します。
otn

2024/10/02 10:48

> 上部の方のパスをダブルクォーテーションで囲むのは、試してダメだったんです。 ファイル名が違うのでしょうね。 Explorerから、該当ファイルをShiftキーを押しながら右クリックすると、右クリックメニューに「パスのコピー」という項目が追加されて、フルパスがダブルクォーテーション付きでコピーされるので、そのまま記入場所にペーストしましょう。
semiouto

2024/10/02 11:47 編集

補足に詳細を記載しました。 パスのコピーを使用して、パス名は間違っていないと思います。 成功時にはパワーシェルに「test」と表示されEnter待ちの状態となりますが、 失敗時にはパワーシェルが一瞬起動しますが、すぐに落ちてしまいます。 ちなみに8.3形式による対処は以下に書かれていました。 https://ja.softwareuser.asklobster.com/posts/270643/windows-%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%95%E3%82%8C%E3%81%9F%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AB%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%92%E5%90%AB%E3%82%80%E5%BC%95%E6%95%B0%E3%82%92%E6%B8%A1%E3%81%99%E6%96%B9%E6%B3%95/
otn

2024/10/02 13:50 編集

> pwsh じゃなくて powershell の場合は、" " で囲むだけでなく、-file も必要です。 と書いたのですが、その記述を無視しているのではないですか? 誤: -ExecutionPolicy Bypass "C:\t e s t\hoge.ps1" 正: -ExecutionPolicy Bypass -file "C:\t e s t\hoge.ps1" -file を書かないと、C:\t e s t\hoge.ps1 は、スクリプトを読み込むファイル名じゃなくて、Powershellコマンドと見なされて、C:\t がコマンド、e 以降はその引数という意味になります。 C:\test\hoge.ps1 は、(Powershellから見ると)実行可能ファイル名なので、calc.exe と書いたのと同じくそれが実行されます。 C:\t e s t\hoge.ps1 の空白をコマンドと引数の区切りと見做されないようにするには、空白にバッククォートを前置すれば良いですが、わかりにくいので止めた方が良いと思います。 正その2: -ExecutionPolicy Bypass "C:\t` e` s` t\hoge.ps1" 注:.ps1のファイルは、あくまで「Powershellからみると実行可能ファイル」であって、OS的には実行可能ファイルではないです。
otn

2024/10/02 14:02

補足ですが、 > pwsh じゃなくて powershell の場合は、" " で囲むだけでなく、-file も必要です。 のpwshというのは、powershellを起動すると表示される 「新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6」 のリンクからインストールできる新しいPowerShellです。Microsoft Storeからもインストール出来たはず。 pwshだと -file は省略できます。 最初の質問では、どちらを使っているのか不明だったので両方のケースを想定して書きました。
semiouto

2024/10/02 14:16 編集

丁寧にありがとうございます。 正その1,2どちらも試して実行することができました。 お手数をおかけしました。 ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答2

0

ベストアンサー

空白を含んだパス名をコマンドラインで指定する時はダブルクォーテーション" "で囲みます。
タスクスケジューラーの「引数の追加」欄でも同じです。

起動するプロセスの初期ディレクトリを指定する「開始」欄は空白の有無にかかわらずダブルクォーテーションで囲みません。

PowerShellには、Windowsに最初からインストールされているpowershell.exeと、「新しいPowerShell」pwsh.exeがありますが、古い方のPowerShellを使ってコマンドラインでスクリプトファイル名を指定する場合は、ファイル名の前に-fileが必要です。

両方合わせると、-ExecutionPolicy Bypass -file "C:\t e s t\hoge.ps1"ですね。

-fileを付けないとC:\t e s t\hoge.ps1はファイル名じゃなくてPowerShellコマンドと見なされ、空白で自動分割されるのでC:\tだけがコマンド名と見なされます。空白でコマンド名と引数に分割されてコマンドとして正当で期待通りなら問題ありませんが。
空白で分割されないためには、空白の前にバッククォートを書けば良いですが、単に-fileを書くのが簡単で簡明です。
新しいPowerShellだと-fileは省略可能です。

投稿2024/10/02 15:28

otn

総合スコア85766

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

semiouto

2024/10/02 15:29

ありがとうございました!
guest

0

上部には日本語などを含む場合はダブルクォーテーションで囲み、 空白や()が含まれる場合は8.3形式とします。
それを調べるにはコマンドプロンプトでdir /xで調べます。
下部はダブルクォーテーションで囲いませんが、対象のパス部分を同じく8.3形式とします。

投稿2024/10/02 03:54

semiouto

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問