Estou trabalhando com alguns scripts nos quais chamo alguns scripts do PowerShell (.ps1) de arquivos em lote. Não consigo fazer isso funcionar para esta situação específica:
Eu tenho o seguinte arquivo em lote:
@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 em lote:(Inseri 'pause' no final do arquivo em lote para capturar isso; recebo 8 deles, sendo este o último conforme indicado pelo .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
Achei que poderia ser um problema com meu script PS1, então abri o arquivo no PowerShell ISE e pressionei F5 para executar o script. Quando faço isso, acontece o seguinte e tenho que clicar em "Executar uma vez" sete vezes - uma vez para cada um dos comandos chamados em QuickAccessPin.ps1
Portanto, o PS1 está funcionando, embora não como deveria, quando eu o executo diretamente, mas não funciona quando eu o chamo do arquivo em lote. Devo também salientar que atualmente para testes, minha Política de Execução éIrrestrito(geralmenteAssinado remotamente). Além disso, para eliminar quaisquer problemas, também tentei executar o seguinte para que o PowerShell não solicite na GUI a execução dos arquivos:
@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 é simplesmente
Get-ChildItem r:\Tools | Unblock-File
... mas isso não parece fazer nada, pois o PowerShell ISE ainda me solicita para executá-lo, dizendo que posso "desbloquear" os arquivos se eles estiverem seguros (o que já fiz talvez 13 vezes). Se eu definir minha política como RemoteSigned e executar o script acima, Get-ExecutionPolicy novamente mostrará Unrestricted, então a 4ª linha funciona e a 3ª parece não fazer nada.
Portanto, o fato de ele me avisar todas as vezes é apenas um pequeno aborrecimento, porque tudo isso será automatizado e não usarei nenhuma GUI. Mas, no momento, não consigo chamar o script PS1 do arquivo em lote, o que preciso fazer, e a única maneira de executar meu script é fazê-lo manualmente dentro do ISE.
Alguém sabe como posso resolver esse problema?
Responder1
O erro que você está recebendo indica que você provavelmente não está no diretório em que pensa estar, e a execução do arquivo de script com o caminho completo não o coloca nesse diretório - portanto, se Set-QuickAccess.ps1
estiver em R:\Tools
, não há garantia de que estará presente R:\Tools
quando você executar o arquivo em lote.
Você precisa começar fazendo um Set-Location
no caminho onde o Set-QuickAccess.ps1
script está localizado.