我正在使用一些腳本,從批次檔呼叫一些 PowerShell (.ps1) 腳本。我無法讓它在這種特殊情況下工作:
我有以下批次檔:
@echo off
TITLE Modifying Quick Access Pinned Items
color f0
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'r:\Tools\QuickAccessPin.ps1'";
QuickAccessPin.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"
運行批次檔時發生錯誤:(我在批次文件末尾插入了「暫停」來捕獲這一點;我得到了其中 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 中調用的每個命令一次
因此,當我直接運行 PS1 時,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
is in R:\Tools
,則不能保證您R:\Tools
當你執行批次檔時
您需要先Set-Location
對腳本所在的路徑執行 a 操作Set-QuickAccess.ps1
。