バッチ ファイルから PS1 スクリプトを呼び出すと、外部スクリプトが実行されないのはなぜですか?

バッチ ファイルから PS1 スクリプトを呼び出すと、外部スクリプトが実行されないのはなぜですか?

私は、バッチ ファイルから PowerShell (.ps1) スクリプトを呼び出すスクリプトをいくつか使用しています。この特定の状況では、これを機能させることができません。

次のバッチファイルがあります:

@echo off
TITLE Modifying Quick Access Pinned Items
color f0
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'r:\Tools\QuickAccessPin.ps1'";

クイックアクセスピン.ps1:

.\Set-QuickAccess.ps1 -Action Unpin -Path "$env:userprofile\Desktop"
.\Set-QuickAccess.ps1 -Action Unpin -Path "$env:userprofile\Downloads"
.\Set-QuickAccess.ps1 -Action Unpin -Path "$env:userprofile\Documents"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Desktop"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Documents"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Downloads"

バッチファイルを実行するとエラーが発生します:(これをキャプチャするために、バッチ ファイルの最後に「pause」を挿入しました。このうち 8 つが取得され、.ps1:8 で示されているようにこれが最後のものです)

.\Set-QuickAccess.ps1 : The term '.\Set-QuickAccess.ps1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
and try again.
At R:\Tools\QuickAccessPin.ps1:7 char:1
+ .\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Downloads
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (.\Set-QuickAccess.ps1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

これは私の PS1 スクリプトの問題かもしれないと思ったので、PowerShell ISE でファイルを開き、F5 キーを押してスクリプトを実行しました。そうすると、次のことが発生し、QuickAccessPin.ps1 で呼び出されるコマンドごとに 1 回ずつ、合計 7 回「1 回実行」をクリックする必要があります。

ここに画像の説明を入力してください

つまり、PS1は、直接実行すると想定どおりには動作しませんが、バッチファイルから呼び出すとまったく動作しません。また、現在テスト用に、私の実行ポリシーは制限なし(いつものリモート署名済みさらに、問題を排除するために、PowerShell が GUI でファイルの実行を要求しないように、以下のコマンドも実行してみました。

@echo off
TITLE Unblocking PowerShell Tools
color f0
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'r:\Tools\UnblockThisFolder.ps1'";
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force}"

UnblockThisFolder.ps1は単純に

Get-ChildItem r:\Tools | Unblock-File

...しかし、PowerShell ISE は依然として実行を促し、ファイルが安全であれば「ブロック解除」できると表示するため、何も行われないようです (これまでに 13 回ほど実行しています)。ポリシーを RemoteSigned に設定し、上記のスクリプトを実行してから Get-ExecutionPolicy を再度実行すると、Unrestricted と表示されるので、4 行目は機能しますが、3 行目は何も行われないようです。

毎回プロンプトが表示されるという事実は、すべて自動化され、GUI をまったく使用しないので、小さな煩わしさにすぎません。しかし、現時点では、バッチ ファイルから PS1 スクリプトを呼び出すことができません。これは実行できる必要があります。スクリプトを実行する唯一の方法は、ISE 内で手動で実行することです。

この問題を解決する方法を知っている人はいますか?

答え1

表示されているエラーは、現在いるディレクトリが想定したディレクトリではないことを示しています。また、スクリプト ファイルをフル パスで実行しても、そのディレクトリに移動することはできません。つまり、Set-QuickAccess.ps1が にある場合、バッチ ファイルを実行したときにR:\Toolsにいることが保証されません。R:\Tools

Set-Locationまず、スクリプトが配置されているパスに対して を実行する必要がありますSet-QuickAccess.ps1

関連情報