Estou trabalhando com alguns scripts em que estou chamando alguns scripts do PowerShell (.ps1) de arquivos em lote. Eu não consigo fazer isso funcionar para essa situação específica:
Eu tenho o seguinte arquivo em lotes:
@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"
Erro ao executar o arquivo de lote: (inseri 'pause' no final do arquivo de lote para capturá-lo; recebo 8 deles, sendo este o último indicado por o .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
Eu pensei que poderia ser um problema com o meu script PS1, então eu abri o arquivo no PowerShell ISE e pressionei F5 para executar o script. Quando eu faço isso, acontece o seguinte e eu tenho que clicar em "Executar uma vez" sete vezes - uma vez para cada um dos comandos chamados no QuickAccessPin.ps1
Então,oPS1estáfuncionando,emboranãocomodeveria,quandoeuoexecutodiretamente,masnãoestoufuncionandoquandoeuochamodoarquivoemlote.Tambémdevosalientarque,atualmente,paratestes,minhaPolíticadeExecuçãoéIrrestrito(geralmenteRemoteSigned).Alémdisso,paraeliminarquaisquerproblemas,tambémtenteiexecutaroabaixo,paraqueoPowerShellnãosolicitenaGUIaexecuçãodosarquivos:
@echooffTITLEUnblockingPowerShellToolscolorf0PowerShell-NoProfile-ExecutionPolicyBypass-Command"& 'r:\Tools\UnblockThisFolder.ps1'";
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force}"
UnblockThisFolder.ps1 é simplesmente
Get-ChildItem r:\Tools | Unblock-File
... mas isso não parece fazer nada, já que o PowerShell ISE ainda me pede para executá-lo, dizendo que posso "desbloquear" os arquivos se eles estiverem seguros (o que eu já fiz talvez 13 vezes agora). Se eu definir minha política como RemoteSigned e depois executar o script acima, então Get-ExecutionPolicy novamente, mostrará Irrestrito, portanto a quarta linha funciona e a terceira não parece fazer nada.
Assim, o fato de que isso me avisa toda vez é apenas um pequeno aborrecimento, porque tudo isso será automatizado e eu não usarei nenhuma GUI. Mas agora, não consigo chamar o script PS1 do arquivo de lote, que preciso fazer, e a única maneira de executar meu script é fazer manualmente dentro do ISE.
Alguém sabe como posso resolver este problema?