• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PowerShellで処理を簡単にしたい)

PowerShellで処理を簡単にする方法

このQ&Aのポイント
  • PowerShellの処理を簡単にする方法をご紹介します。
  • 現在は複数の手順を行って処理していますが、BATファイルを利用することで一つのファイルで処理できます。
  • BATファイルを使用することで手間を減らし、より簡単にPowerShellの処理が行えます。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.10

> 私が実施したいps1はsample.ps1ですが > No8には、sample.ps1とtest.ps1と2つのps1が記載内容に出てきて > どう違うのか区別が出来ずにコード作成に不安があります。 ややこしくてすみません。 sample.ps1が管理者権限のあるPowerShellの中じゃないと動かないのかなと考えていたので test.ps1 は、手動で管理者権限でPowerShellを起動した状態だと考えて その中で set-executionPolicy remoteSigned -File C:\Users\Mic\Desktop\Keep\sample.ps1 を実行するという事で、手動でやっていることを置き換えた状態です。 sample.ps1の頭に入れるというのは この時点ではsp1を管理者権限で実行することだけ考えていて set-executionPolicy remoteSigned のことは深く考えていなかったので sample.ps1を直接管理者権限で起動するようにすればいいような気もする、と考えたのです。 コードは1行に記載です。 ですので、NuboChanさんのとらえ方であっていると思います。 ただ、No.9で説明した状態だとしたら意味が無かったという感じです。

NuboChan
質問者

お礼

>ややこしくてすみません。 すいません。 私の理解が追いついていないのが悪いだけです。 kkkkmさんの見解として、batなので簡単には処理できそうにないので今回は諦めます。 解決にに至りませんでしたが  色々お気遣い願いありがとうございました。

その他の回答 (9)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.9

No.8は勘違い。 もとがスクリプト実行不可なのを実行可にしてからsp1を実行するという順でしたね。なので、sp1の最初に権限付加するコードにしてもsp1が実行できないから無理でしたm(__)m

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.8

時間があれば参考にしてみてください。 ps1を管理者権限で実行されたPowerShellから実行するのではなく直接管理者権限で実行してみたらいかがでしょう。 以下でtest.ps1が管理者権限で実行されました。 PowerShellの場合はbat、ps1ともpwshをPowerShellに変更してください。 batの内容 pwsh c:\Ok\test.ps1 pause 参考にしたサイト https://correct-log.com/powershell_auto_admin/ test.ps1の内容 if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process pwsh.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit } Set-ExecutionPolicy Restricted ↑Restrictedがデフォルトみたいなのでtestではそれに設定してみました実際は省いてください。 以降に set-executionPolicy remoteSigned -File C:\Users\Mic\Desktop\Keep\sample.ps1 を記述しておけばいけそうな気がします。 か sample.ps1の頭に if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process PowerShell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit } を付け足せばいいような気もします。

NuboChan
質問者

お礼

kkkkkmさん、すいません。  記載された内容が読み解けずに理解できていません。 私が実施したいps1はsample.ps1ですが No8には、sample.ps1とtest.ps1と2つのps1が記載内容に出てきて どう違うのか区別が出来ずにコード作成に不安があります。 bat(test.bat)の内容は、以下で良いと思うのですが? PowerShell C:\Users\Mic_\Desktop\MergeDrive\sample.ps1 pause 現在のsample.ps1を修正する場合は、先頭に以下を追加して記載するとの事でしょうか ? if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process PowerShell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit } (if から -Verb RunAs; exit } までは、1行に記載するのですよね ?) 又は、他の方法としては 以下の記載のtest.ps1を作成してpowershellを実行してtest.ps1からsample.ps1(修正なし)を呼び出すような感じでしょうか ? if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powerShell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit } set-executionPolicy remoteSigned -File C:\Users\Mic\Desktop\Keep\sample.ps1

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.7
NuboChan
質問者

お礼

kkkkkmさん、 なるほど、PowerShellとPowerShell7は名前は似ていますが別物なんですね。 (PowerShell7はPowerShellのVerUP版では無い、PowerShellからPowerShell7への以降なんですね) 試しにPowershell7で以下のbatを作成して試してみました。 pwsh -ExecutionPolicy RemoteSigned pause なんと、以下のような「スクリプトファイル名として認識されない」とエラーがでました。 PS C:\Users\Mic_> pwsh set-executionPolicy remoteSigned The argument 'set-executionPolicy' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. Usage: pwsh[.exe] [-Login] [[-File] <filePath> [args]] [-Command { - | <script-block> [-args <arg-array>] | <string> [<CommandParameters>] } ] [-ConfigurationName <string>] [-CustomPipeName <string>] [-EncodedCommand <Base64EncodedCommand>] [-ExecutionPolicy <ExecutionPolicy>] [-InputFormat {Text | XML}] [-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile] [-OutputFormat {Text | XML}] [-SettingsFile <filePath>] [-SSHServerMode] [-STA] [-Version] [-WindowStyle <style>] [-WorkingDirectory <directoryPath>] pwsh[.exe] -h | -Help | -? | /? PowerShell Online Help https://aka.ms/powershell-docs '--------------------------- お世話をおかけしましたが挫折しました。 もう、初心者の私にはどうすることも出来そうにないので 手数を減らすbatでの処理は諦めて元のように PowerShellで2),3)のコマンドをコピペして対処する事にしました。 毎回アドバイスを受けて成功していましたが   今回は、残念な結果に終わりましたが協力感謝いたします。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.6

https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/migrating-from-windows-powershell-51-to-powershell-7?view=powershell-7.2 上記によると > PowerShell 7 は、Windows PowerShell 5.1 と共存するように設計されています。 > Windows PowerShell では、PowerShell の実行可能ファイルには powershell.exe という名前が付けられます。 バージョン 6 以降では、実行可能ファイルには pwsh.exe という名前が付けられます。 ということですのでpwshで呼び出すと7が起動すると思います。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.5

> 複数のコマンドを1行で表示して実行させる為の > 「&」や「;」だと思うのですが、違っていますか ? はいそうだと思います。私もいまいちよく分からないので口を出すべきではないのかもしれませんが > 現状では、PowerShellで質問の1)のコマンドを先に実施て成功後に > 2)のPS1ファイルを実行しないと上手く処理できません。 cmd1の実行に成功した場合にのみ、cmd2を実行したいとき で「&&」があるみたいですが (1)&&(2)&&(3) みたいな感じでいけないでしょうか。 コマンドプロンプトやPowerShellで複数のコマンドを1行で連続実行する方法 で 最後の方に Windows10に標準搭載の「Windows PowerShell」では「&&」や「||」といったパイプラインは利用できませんが、新しいクロスプラットフォーム向けの「PowerShell7」をインストールすれば利用できます。 との記載もありました。 できなければ、申し訳ないです。

NuboChan
質問者

お礼

PowerShellのVerも問題になりそうなので 私のVerをチェックすると5.1と古い?Verでした。 そこでPowerShell7をインストールすると Ver7.2.7がインストールできました。 しかし旧版(5.1)はそのまま残っているようです。 個人的には、Powershell7をインストール時に 旧版は上書きされて新板に取って代わられると思っていたので意外でした。 Powershell (5.1のインストール場所) %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe   旧版は、クリックすれば起動する。 Powershell7 (7.2.7のインストール場所) "C:\Program Files\PowerShell\7\pwsh.exe" -WorkingDirectory ~ そこでPowershellをBATでコマンド指定する場合、  旧版、新板の区別をどうやってつけるのか?   (powerShell set , powershell -File のpowershellはどちらになるの ?) 疑問に思って思考が停止しています。 なお、私の環境(Windows11 22H2 x64)では 「プログラムと機能」のアンインストールに、Powershell7は存在しますが、旧版の表示はありません。 何か?情報をお持ちであれば教えて下さい。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

コマンドを「;」で繋げて連続実行するというのがありましたがいかがでしょう。 PowerShellのコマンドラインから連続してコマンドを実行する方法 https://maywork.net/computer/powershell-any-command-exec/ コマンドプロンプトやPowerShellで複数のコマンドを1行で連続実行する方法 https://4thsight.xyz/31940#:~:text=%E5%8D%98%E7%B4%94%E3%81%AB%E3%80%81%E8%A4%87%E6%95%B0%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89,%26%E3%80%8D%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

NuboChan
質問者

お礼

kkkkkmさん、アドバイスありがとうございます。 提示いただいたURLをチェックしました。 思うに(素人の思考なので違っている可能性も大いにありそうですが) 複数のコマンドを1行で表示して実行させる為の 「&」や「;」だと思うのですが、違っていますか ? 現状では、PowerShellで質問の1)のコマンドを先に実施て成功後に 2)のPS1ファイルを実行しないと上手く処理できません。 提示いただいた「複数のコマンドを1行で表示して実行させる為 「&」や「;」をどうやって利用するのか? 理解が追いついていません。

  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.3

私が勝手にコマンドを一行にしてしまったので、 もとのひとつずつ実行にしてみてください。 ----test.bat powershell set-executionPolicy remoteSigned powershell -File C:\Users\Mic\Desktop\Keep\sample.ps1 PAUSE ---- sample.ps1がどのような処理なのかわからないので、 私がテストしたのは以下の処理だけですが、 添付画像のような感じで実行はできそうなのですが・・・。 ----sample.ps1 powershell Get-ExecutionPolicy -List ----

NuboChan
質問者

補足

No.3のtest.batの実行結果ですが、 添付いただいた画像と全く同じ内容の出力が出ました。 (sample.ps1は、No.3のまま利用しました。) つまり紛らわしいのですが、 私の実行したい名前が同じsample.ps1に問題が有るようです。 現状Powereshellからコピペで質問に記載した2つのコマンドをコピペして実行すれば 上手く処理できるので何か手数が減る方法はありそうですが batでは難しいのかもしれませんね。

  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.2

一瞬で終了していると何が起こっているかわからないですね。 バッチファイルの最後に、 PAUSE を追加して、いったん止まるようにしてみてください。 エラーかなにか表示されているかも知れません。

NuboChan
質問者

補足

以下のBATで試して見ましたが BATは止まらずに同じで一瞬で終了します。 (エラーは、表示されません。) powershell -ExecutionPolicy RemoteSigned -File C:\Users\Mic\Desktop\Keep\sample.ps1 pause 最初の以下でそもそも落ちているのかもしれません。 powershell -ExecutionPolicy RemoteSigned -File C:\Users\Mic\Desktop\Keep\sample.ps1

  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.1

以下の内容でバッチファイルを作ってただいて、 ---- powershell -ExecutionPolicy RemoteSigned -File C:\Users\Mic\Desktop\Keep\sample.ps1 ---- そのバッチファイルを右クリックして、 「管理者として実行」でどうでしょうか。

NuboChan
質問者

お礼

dell_OKさん、回答感謝します。 残念ながら、 早速、紹介された内容のps.batを作成してBATを管理者権限で実行しましたが 一瞬でBAT画面がブリンクして終了します。 試しにlogをチェックするために以下のtest.batを作成してBATを管理者権限で実行しましたが result.logには何も記載されていませんでした。 call C:\Users\Mic\Desktop\Keep\ps.bat > C:\Users\Mic\Desktop\Keep\result.log

関連するQ&A